TOP業務システム> Ludiaの高度な検索機能
Ludia
高性能なオープンソース全文検索システム「Ludia」

第6回:柔軟に対応できるLudiaの検索機能

著者:NTTデータ  岩崎 正剛   2007/2/28
1   2  3  次のページ
Ludiaの高度な検索機能

   前回はLudiaの基本的な検索のバリエーションと種類について解説しました。今回は、前回説明できなかった設定項目と全文検索の応用について説明します。
検索ヒット件数の上限の設定

   「第4回:Ludiaを体験」で説明したインストールの手順の中で、PostgreSQLの設定ファイル(postgresql.conf)に以下のようなカスタム変数を記述しました。

custom_variable_classes = 'ludia'
ludia.max_n_sort_result = 100000
ludia.enable_seqscan = on
ludia.sen_index_flags = 31

   この中のludia.max_n_sort_resultは、全文検索のヒット件数の上限を設定する変数になります。これはSQLのクエリにLIMIT句を指定した場合と意味がすこし異なります。LIMIT句の指定は最終的に返却される行数の上限を設定しますが、Ludiaのカスタム変数の設定はLudiaがPostgreSQLに(ソートして)返却する結果数の上限を設定します。

   例として、第4回で作成したテーブルをヒット件数の制限をつけて検索してみます。カスタム変数の現在の値はSHOWコマンドで確認ことができます。

# SHOW ludia.max_n_sort_result;
 ludia.max_n_sort_result
-------------------------
 100000
(1 row)

# SELECT count(*) FROM zip WHERE address @@ '東京都';
 count
-------
  3333
(1 row)

   カスタム変数の値はSETコマンドで変更することができます。値を100にしてもう一度同じ検索を実行してみます。

# SET ludia.max_n_sort_result TO 100;
SET

# SELECT count(*) FROM zip WHERE address @@ '東京都';
 count
-------
   100
(1 row)

   得られる結果数が100件に変化していることがわかります。さらに、次のように複数の検索条件を組み合わせた場合を見てみます。

# EXPLAIN SELECT count(*) FROM zip
      WHERE address @@ '東京都' AND zipcode LIKE '104%';
                                QUERY PLAN
------------------------------------------------------------------------
Aggregate  (cost=0.02..0.03 rows=1 width=0)
  -> Index Scan using idx_word on zip  (cost=0.00..0.01 rows=1 width=0)
        Index Cond: (address @@ '東京都'::text)
        Filter: (zipcode ~~ '104%'::text)

   この場合は、まずaddress列に「東京都」が含まれる行を100行まで取りだされ、次にその行のzip列が「104」からはじまるかどうかチェックしています。

   こうすると、実際には両方の条件を満たすものがあっても、最初に取得される100行に含まれていないものは取得されません。ヒットするはずのものがヒットしないということにならないよう、注意してください。

   全文検索ではキーワードによってはヒット件数が非常に大きくなりますが、この設定をしておくことでソート処理などの時間を減らすことができます。

   PostgreSQLは構造上(インデックスで処理できる検索の)結果数を取得するだけでも処理に時間を要してしまうため、この設定が役に立つことがあります(PostgreSQLの構造については、後述します)。

1   2  3  次のページ


株式会社NTTデータ 岩崎 正剛
著者プロフィール
株式会社NTTデータ  岩崎 正剛
基盤システム事業本部 オープンソース開発センタ
2002年よりNTTデータにてPCグリッドの研究開発などに従事。2006年よりOSS分野に参画し、現在はLudiaの開発、技術支援を行っている。


INDEX
第6回:柔軟に対応できるLudiaの検索機能
Ludiaの高度な検索機能
  検索ヒット件数を高速に取得
  PDFファイルの全文検索