2016-09-06 2 views

答えて

3

これは、同義語をいつ展開するかによって異なります。クエリ時に展開している場合は、インデックスを再作成することなく更新が表示されますが、インデックス時に展開する場合(推奨される方法)、インデックスに含まれる新しい同義語を取得するためにインデックスを再作成する必要があります。

時間を照会するために比較して、インデックス時の膨張を推薦背後にある理由はdescribed in the old wiki次のとおりです。

問合せ時にarriseできる2つの潜在的な問題があるので、これは次のとおりです。

はLuceneのQueryParserは白をトークン化アナライザにテキストを入力する前にスペースを空けておく必要があります。そのため、アナウンサーは単語sea biscitを検索すると「sea」と「biscit」という単語が別々に与えられ、同義語と一致することはわかりません。

QueryParserは文字列全体をアナライザに渡しますが、SynonymFilterがシノニムを展開するように設定されている場合は、QueryParserが結果のトークンリストを元に戻しますアナライザを使用すると、目的の効果を持たないMultiPhraseQueryが作成されます。これは、アナライザが、2つの用語が同じ位置を占めることを示すためのメカニズムが限られているためです。「フレーズ」が用語と同じ位置を占めることを示す方法はありません。私たちの例では、結果として得られるMultiPhraseQueryは、 "シービスケット"の単純なケースと一致しない "(​​sea | sea | seiscusuit)(biscuit | biscit)"となるでしょう。

マルチ-word synonyms、idfの違いはまだインデックス時間の同義語を良い考えにします。

クエリ時にSynonymFilterをシノニムTV、Televesion、およびexpand = "true"と使用するインデックス "text"フィールド付きのインデックス "text:TV"という用語を含む数千ものドキュメントが、 「テキスト:テレビ」という用語を含む数百のドキュメント テキストのクエリ:TVは(テキスト:テレビテキスト:テレビ)に展開され、テキストの下位のdocFreq:テレビは「テレビ」によく似たドキュメントを提供しますより高い得点を得て、それに匹敵する「TV」と一致するドキュメントを作成します。これは、クライアントにとってやや直感的です。索引時間の拡張(または短縮)は、元のテキストがどの用語に含まれていたかにかかわらず、すべての文書について同じidfになります。

Better synonym handling in Solrで実際に何が起こっているのかについて実際に詳細な説明があります。

これらの問題とトレードオフを認識している限り、クエリ時間の同義語を使用するとうまくいく可能性がありますが、クエリに対してテストして結果を期待してください落とし穴に気づく

+0

ありがとうございます。何百万ものレコードを再索引付けするには時間がかかりますが、時間を節約できますか? –

+2

あなたの同義語の影響を受ける文書を再インデクシングします:-) –

+0

@MatsLindh文書に出てくる "seabiscuit"の単純なケースとは一致しないこの行 "sea | seabiscuit(biscuit | biscit)"を理解できませんでした。 MultiPhraseQueryには "seabiscuit"が存在するためです。 – user2478236

関連する問題