2011-08-03 4 views
0

ファジィ検索はすべてうまくいっていますが、私のアプリケーションでは非常に時間がかかります(〜500ms)。私はファジィ検索を遅らせるために、ファジィ検索を行う代わりに、levensteinアルゴリズムで用語を索引付けすることで、通常のキーワード検索ではあいまいな結果が得られることを示唆していました。Hibernateのファジーインデックス検索

Hibernate Searchでこれを行う方法はありますか?できればアノテーションを使用してください。

答えて

0

私はここで何をしたいのかよく分かりません。あなたはインデックス作成の際に、与えられたLevensteinの距離の単語をインデックスに挿入しますか?シノニム検索と同様に、シノニム・トークンをインデックスに挿入しますか?その場合は、トークンフィルタ(およびフィルタファクトリ)を作成してから、@AnalyzerDefフレームワークを使用してカスタムアナライザを構築することができます。これがどのように行われているかを見るにはソースコードを見てください。 このアプローチにはいくつかの問題があります。索引付けは高価になり、索引サイズは非常に大きくなります。もちろん私はあなたのユースケースについてもっとは分かっていません。

0

私は順序で、次のオプションを試します:

  1. あなただけのユーザークエリでスペルエラーを修正しようとしていますか?チューニングの関連性が低い低速のファジークエリを使用するのではなく、スペルチェッカー/自動提示を使用してください。
  2. これは実際にフルテキスト検索ではなく、代わりにある種の「一致」手順ですか?この場合、代わりに、代わりに文字nグラムをインデックスすることができる。 luceneのngram TokenFiltersを使用すると、ゆっくりとしたファジークエリの代わりにフィールドでブールクエリを実行します。これは、実際にはどのようにルーネンのスペルチェッカーが裏で働くかです!
  3. 上記の内容が当てはまらず、実際にファジィ検索が必要であると判断し、代替手段がない場合は、夜間にluceneのトランクを使用してみることもできます。これはまったく異なるアルゴリズムを使用しているため、これらのクエリははるかに高速です[1]。しかし、私はあなたが未発表のluceneトランクを冬眠に簡単に統合できるとは思わない。

    [1]:http://blog.mikemccandless.com/2011/03/lucenes-fuzzyquery-is-100-times-faster.htmlファジー改善についてのブログ。

+0

ありがとうございます!そうです、フルテキスト検索ではなく、特定のフィールドデータに基づいてデータベース内のレコードを検索します。ファジー検索は、これらのフィールドの2つに適用する必要があり、長い検索クエリの場合は30秒ほどの検索になります。私はしばらくの間ファジー検索を使用してオプトアウトしました。 – Mouscellaneous

関連する問題