1

Solr サーバーを使用して、場所 (都市、地域、国、オブジェクト) のあいまい検索を実装しようとしています。現在、私のインデックスには約 0.8 ~ 1.0 M のアイテムが含まれています。あいまい検索 (~0.7) を使用すると非常にうまく機能しますが、私には遅すぎます (非常に頻繁に 0.2-0.6 秒)。使用されるトークナイザーは<tokenizer class="solr.StandardTokenizerFactory"/>. 私が試した代替手段として<tokenizer class="solr.WhitespaceTokenizerFactory"/>- パフォーマンスの点では優れています (約 100 倍高速) が、あいまい検索は提供されません:(

私が使用できる別のアプローチを知っていますか?あいまい検索機能を使用したいのですが、可能であればはるかに高速な方法で。

どうもありがとう!

4

1 に答える 1

3

問題は、使用しているアナライザーとは関係ありません。Califrna~0.7 を検索すると、Lucene はインデックス内のすべての用語を繰り返し処理し、「Califrna」とすべての用語の間の (レーベンシュタイン) 編集距離を計算します。これは非常にコストのかかる操作です。

この問題は、Lucene バージョン 4.0 で解決される予定です。残念ながら、Solr に付属する Lucene バージョンは、古いブルート フォース アプローチを使用しています。

https: //issues.apache.org/jira/browse/LUCENE-2089

http://java.dzone.com/news/lucenes-fuzzyquery-100-times

よろしければ、Solr/Lucene をトランクからダウンロードして、新しいあいまいクエリがどのように機能するかをテストすることをお勧めします。

http://wiki.apache.org/solr/NightlyBuilds

トランクは安定していますが、本番環境での使用はお勧めできません。2 つの同様の方法を提案できます。

1 - スペルチェッカー

http://wiki.apache.org/solr/SpellCheckComponent

http://www.lucidimagination.com/blog/2010/08/31/getting-started-spell-checking-with-apache-lucene-and-solr/

SpellChecker は、高速なルックアップを実行するために、n-gram を使用して小さなインデックスを作成します。レーベンシュタイン距離も使用していますが、すべての用語を反復する代わりに、関連する用語の距離のみを計算します。

最初に「Californa」のスペル チェッカーを実行する必要があります。「Californa」が提案されます。次に、あいまいクエリを使用せずに、メイン インデックスのクエリで "California" を使用できます。

2- 自動提案

http://wiki.apache.org/solr/Suggester

Suggester コンポーネントを使用して、ユーザー タイプ クエリとして正しいスペルを提供できます。これにより、はるかに高速になります。JaspellLookup クラスによるあいまい検索に対応しています。あいまい検索を有効にするには、JaspellLookup を更新する必要があります。ただし、Wiki は、何を更新する必要があるかについてはあまり述べていません。usePrefix が false に設定されている場合、あいまい検索を実行する必要があると思います。

于 2012-06-04T22:45:28.043 に答える