2012-07-03 7 views
6

iはedgengramとアナライザを使用して(分= 3、最大= 7、フロント)+ term_vector = with_positions_offsetsElasticsearch - EdgeNgram +ハイライト+ term_vector =悪いハイライト

文書有するテキスト= "CouchDBの"

と私は

「couc」を検索すると

私のハイライトは「couc」


「COU」上ではなく私のハイライトは最低限のマッチングトークン「COU」ワットであると思われますhile私は正確なトークン(可能であれば)または少なくとも最長のトークンが見つかると予想します。

それはterm_vectorでテキストを解析することなく正常に動作します= with_positions_offsets

perfomancesためterm_vector = with_positions_offsetsの除去の影響は何ですか?

+0

with_positions_offsetsの影響についての回答や回答はありませんか? –

答えて

8

特定のフィールドにterm_vector=with_positions_offsetsを設定すると、ドキュメントごとに用語ベクトルを格納していることを意味します。

用語のハイライト表示では、標準のハイライターよりも高速なlucene高速ベクトルハイライターを使用できます。その理由は、インデックスには十分な情報(位置とオフセット)が含まれていないため、標準的なハイライターはハイライトするための速い方法がないからです。フィールドの内容を再解析し、オフセットと位置を傍受し、その情報に基づいてハイライトを作成するだけです。これにはかなりの時間がかかります。特に長いテキストフィールドの場合は特にそうです。

用語ベクトルを使用すると十分な情報が得られ、テキストを再分析する必要はありません。欠点は、インデックスのサイズであり、著しく増加します。私はLucene 4.2タームベクタが最適化された形でよりよく圧縮され格納されるので、それを追加しなければなりません。また、投稿リストにオフセットを格納する機能をベースにした新しいPostingsHighlighterもあります。これにはさらにスペースが必要です。

elasticsearchは、利用可能な情報に基づいてハイライト表示するための最良の方法を自動的に使用します。用語ベクトルが格納されている場合は、高速ベクトルハイライターを使用し、それ以外の場合は標準ベクトルを使用します。用語ベクトルなしで再インデックスした後は、標準のハイライターを使用して強調表示されます。それは遅くなりますが、インデックスは小さくなります。

ngramフィールドに関しては、高速ベクトルハイライターがngramフィールドのサポートを強化する必要があるため、記述した動作は奇妙です。したがって、私はまったく逆の結果を期待します。

+0

ありがとう、私は今パフォーマンスの影響を知っている。誰かがこの行動を説明できることを願っています。たぶんngramのロジックが検索クエリにも適用されるのではないのですが、そうではありませんか? –

+1

それについて考えるのではなく、それは意味があります。通常、ngramsの場合、クエリ時にはngramsのない別の分析チェーンがあります。そうしないと、クエリのnグラムも作成され、予想以上に奇妙な動作より多くの結果が得られます。 – javanna

+0

okありがとうございます;) –

4

私はこの質問が古いですけど、それはまだ完全に答えていなかった。

、このような奇妙な行動に与えることができる別のオプションがあります:

あなたがいる場合truerequire_field_matchを設定する必要があります他のドキュメントの結果が現在のドキュメントのハイライト表示に影響することは望ましくありません。http://www.elasticsearch.org/guide/reference/api/search/highlighting/

+0

require_field_matchはフィールド名についてのものですが、このケースには関係しないと思います。つまり、タイトルフィールドにクエリがあり、タイトルと説明を強調表示すると、説明フィールドの一致する用語は強調表示されず、デフォルトでは強調表示されます。 – javanna

関連する問題