0

I understand fuzzy searches all and well, but in my application they are very slow with lots of terms (~500ms). I ran across a solution to slow fuzzy searches where it was suggested that instead of doing fuzzy searches, index the terms with the levenstein algorithm, so that a regular keyword search would yield fuzzy results.

Is there any way of doing this with Hibernate Search, preferably using annotations?

4

2 に答える 2

0

次のオプションを順番に試してみます。

  1. ユーザークエリのスペルミスを修正しようとしていますか?おそらく、関連性を調整するのが難しい低速のファジークエリを使用するのではなく、事前にスペルチェッカー/オートサジェストを使用する必要があります。
  2. これは実際には全文検索ではなく、ある種の「マッチング」手順ですか?この場合、代わりに、たとえばluceneのngram TokenFiltersを使用して、文字のn-gramにインデックスを付けることもできます。これにより、低速のファジークエリではなく、フィールドでブールクエリを実行できます。これは、実際にはluceneのスペルチェッカーが舞台裏でどのように機能するかです!
  3. 上記が当てはまらず、あいまい検索が本当に必要であり、代替手段がないと判断した場合は、代わりにLuceneのトランクのナイトリービルドを使用してみてください。これはまったく異なるアルゴリズムを使用するため、これらのクエリははるかに高速です[1]。ただし、リリースされていないLuceneトランクをHibernateと簡単に統合できるとは思いません。

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

于 2011-08-05T03:06:29.137 に答える
0

ここで何をしたいのかよくわかりません。索引作成時に、特定のレーベンシュタイン距離を持つ単語を索引に挿入しますか? 同義語トークンをインデックスに挿入する同義語検索に似ていますか? その場合は、トークン フィルター (およびフィルター ファクトリ) を記述し、 @AnalyzerDefフレームワークを使用してカスタム アナライザーを構築することができます。ソースコードを見て、これがどのように行われるかを確認してください。このアプローチにはいくつかの問題があります。インデックス作成のコストが高くなり、インデックス サイズが非常に大きくなります。もちろん、私はあなたのユースケースについてあまり知りません。

于 2011-08-04T08:01:20.330 に答える