2009-06-10 38 views
6

Luceneを使用している会社検索APIに取り組んでいます。その後、唯一の企業#2(すなわち国立バンコープが)である必要があり、国立・バンコープでのユーザーの種類場合 1.Abigailアダムス国立バンコープ社 2.NationalバンコープLucene検索APIを使用した完全一致の検索

: 私のLucene会社インデックスは2社を持っています返され、#1 .....ではない。完全一致のみが返されます。 この機能はどのように達成できますか?

読んでいただきありがとうございます。

+0

今後の検索人物:ルーネンインデックスサービスを検索しているだけの場合、Somonath Sabatによるアップアップのない回答は、少なくとも1つのインスタンスで正しいと思われます - フレーズを二重引用符で囲みます。 musicbrainzに対して確認済みです。 –

答えて

11

KeywordAnalyzerを使用して、このフィールドのインデックスと検索を行うことができます。キーワードアナライザは、文字列全体に対して1つのトークンのみを生成します。

+0

これにお答えください。 http://stackoverflow.com/questions/899542/problem-using-same-instance-of-indexsearcher-for-multiple-requests –

1

質問を正しく理解しているかどうかによって、要件を再検討することができます。私があなたを誤解した場合、私と一緒に裸にしてください。思考のための

ほんの少し食べ物:あなたが唯一の正確なマッチが、なぜあなたが最初の場所で検索された後、返された場合

  • ユーザーは、の完全一致を期待していますか?私は通常、検索エンジンが不足している単語に対応すると仮定して検索します。

  • 国立銀行しかし国立銀行はあなたのインデックスにはもはやいたため、ユーザーが検索されなかったとします。あなたはまだ欲しいですか?アビゲイルアダムスナショナルバンコープ、は正確には一致しなかったので、結果から除外されますか?

はこれを踏まえて、私はあなたがユーザーにすべて可能なマッチ(正確かどうか)を提示し、それらが彼らのために最も適切である自分自身のために決定させるために続けることをお勧め。あなたがすべてのユーザーと同じ方法を考えていない可能性があるので、これを単に言います。 Luceneは、最も近いマッチが結果の中で最高ランクになるようにして、より迅速な選択をするのを助けます。

1

これは、屋根板フィルタの使用を正当化する可能性のあるものです。このフィルタは、複数の単語をまとめてグループ化します。例えば、アビゲイル・アダムズ・ナショナル・バンコープは、3つのトークンのShingleFilterを持ち、[Abigail]、[Abigail Adams]、[Abigail Adams National]、[Adams National Bancorp]、[Adams National]、[Adams] 、[National]、[National Bancorp]、[Bancorp]などがあります。

National Bancorpの検索クエリを使用すると、National Bancorp自体の正確な一致が得られ、Abigail Adams National Bancorpのスコアの低い完全一致が得られます(これはフィールドにトークンが多いためidfを下げる)。このようなクエリで両方のドキュメントを返すのは理にかなっていると思います。

ユースケースによっては、クエリ時にもシングルフィルタを適用できます。

1

私は同じ問題のために何の助けを借りずにたくさんのことを捜しました。私の頭をしばらく掻いた後、私は解決策を見つけました。二重引用符で囲んだ文字列を検索すると、問題が解決されます。

National Bancorpは#1と#2の両方を返しますが、 "National Bancorp"は#2だけを返します。

関連する問題