Lucene でインデックスを作成してTestClassいるフィールドを含むHibernate アノテーション付きクラスがあります。List<String>次の例を検討してください。
"Foo Bar"と"Bar Snafu"は、特定のレコードのリスト内の 2 つのエントリです。ここで、ユーザーが TestClass で検索すると"Foo Snafu"、レコードが見つかります。これは、トークン Foo とトークン Snafu が両方ともList<String>このレコードのトークンであるためだと思います。
これを防ぐ方法はありますか?
実際の例は、原告と被告のリストを持つ裁判です。この事件で 2 人が起訴されているJoe Lewis BobとしRobert Clay Smithます。これらのユーザーは、訴訟記録の被告リストに保存されます。この被告のリストは、Lucene で索引付けされています。ここで、ユーザーが前述の 2 つの被告のいずれかを検索すると、その事件が見つかります。Lewis Smithただし、ユーザーが、 またはを検索した場合にもケースが見つかりますJoe Clay。
更新: Lucene IRC チャンネルで、多値フィールドを使用できる可能性があると言及されました。
更新 2: Solr IRC チャネルで、positionIncrementGap設定を使用schema.xmlして Solr でこれを実現できることが言及されました。どうやら、フレーズ クエリを (slop の有無にかかわらず) 使用すると、「インクリメント ギャップにより、同じフィールド内の異なる値が意図しない一致を引き起こさないことが保証されます」。