1

lucene のアナライザーがどのように機能するかを理解しようとしていますか? 私の質問は、lucene が同義語をどのように処理するかです。状況は次のとおりです。単一の単語と複数の単語があります

シングル: foo = bar 複数の単語: foo bar = foobar

単語の場合:

  • lucene は索引付けされたレコードを拡張しますか? クエリに「foo」のような単語が含まれていると、クエリに「bar」も追加されると思います。インデックス作成で発生するかどうかわかりませんか?

複数の単語の場合:

  • lucene はクエリとインデックス作成の両方を拡張しますか? たとえば、「foo bar」がある場合、インデックス作成/クエリに foobar を追加しますか?

私の 2 番目の質問は次のとおりです。Lucene はトークンのストリームを使用し、それらを小文字フィルターなどのフィルターに渡します。私の質問は、lucene が複数の単語をどのように見つけるかです。「foo bar」が一緒になっている複数の単語であることをどのように見つけますか?

ありがとう

4

1 に答える 1

3

SynonymFilterは、オプションで、元の単語を保持し、keepOrig=trueを設定することによってトークンストリームに同義語を追加することもできます ( SynonymMap.Builder.add()を参照)。この動作により、PhraseQueries などで問題が発生する可能性があります。ドキュメントの最初のを参照してください。SynonymFilter

クエリとインデックス作成に同じものを使用している場合Analyzer、もちろん、インデックスに書き込まれたクエリとドキュメントの両方が同じように扱われます。 SynonymFilterwith keepOrigset to true は、クエリとインデックス作成の間でかなり頻繁に不調和に適用される数少ないものの 1 つですAnalyzersが、それは完全に実装次第です。

実装方法に関しては、ソース コードを利用できます。

于 2013-06-24T19:28:29.740 に答える