2013-05-20 7 views
5

私は、間違った単語や省略された単語を含む可能性のあるデータのリポジトリを経由するSolrを使用してファジークエリを処理しています。例えば、リポジトリは、単語「Hlth」(略語「Health」)を有する名前を有することができる。Solzzでのファジー検索

  1. 私がName:'Health'~0.35のファジー検索を行うと、「Health」という単語で結果が表示されますが、「Hlth」では表示されません。
  2. Name:'Hlth'~0.35のファジー検索を行うと、名前が「Health」と「Hlth」のレコードが取得されます。

私は最初のクエリを取得したいと思います。私のbussinessユースケースでは、すべてのスペルミスや省略語をクエリーするためにクリーンなデータを使用しなければならないでしょう。

#1ファジー検索がうまくいかない理由と、それを達成する他の方法がある場合は、誰かを助けてください。

答えて

4

間違った方法でファジークエリを使用しています。

マイク・マッカンドレスは(http://blog.mikemccandless.com/2011/03/lucenes-fuzzyquery-is-100-times-faster.html)言って何によると:

FuzzyQueryは「近い」指定したベース期間に条件に一致する:あなたは、許容される最大編集距離を指定し、ベースからの編集距離内の任意の用語term(そして、それらの用語を含むドキュメント)がマッチします。

QueryParser構文は~~または用語Nは、編集の最大 許容数であるN、用語である(以前のリリースのためのNの貫通等価最大編集 距離に変換0.0と1.0との間の混乱フロート 、ましたトリッキーな式)。

FuzzyQueryは固有名詞をマッチングするための素晴らしいです:私は mcandless〜1を検索することができ、それが「マッカンドレス(Cを挿入)、mcandles( 秒を削除)、mkandless(KとCを交換)し、他の非常に多くのと一致します閉じる "という言葉。 最大編集距離2では、最大2つの挿入、削除、または の置換が可能です。各試合の得点は、その語の編集距離 に基づいています。正確な一致が最も高く評価されます。編集距離1、 下;など

ですから、このようなクエリを記述する必要がある - 健康〜2

+0

は機能しません。 ParkwayとPkwyを一致させたいと思っていました。 Parkway〜2はParkwayとPkwyの2つしか一致しません〜Pkwyと一致するのは –

+0

@Mysterion:FuzzyQueryはなぜ機能していませんか?それは試してみた= "who is johnn"〜0.2 – iNikkz

2

あなたが書く:「私はパークウェイとパークウェイにマッチしたかった」

をパークウェイパークウェイは、3の編集距離を持っています。最初のレスポンスから "〜2"を "〜3"に下げることでこれを達成できますが、パフォーマンス上の理由からSolrファジーマッチングは2より大きい値には推奨されません。

あなたの問題にアプローチする最も良い方法は、類義語のコンテキスト固有の辞書を生成し、クエリ時の展開を行うことでしょう。