47

ElasticSearch アナライザーについて説明しているhttp://euphonious-intuition.com/2012/08/more-complicited-mapping-in-elasticsearch/を見ていました 。

異なる検索アナライザーとインデックス アナライザーを使用することに関する部分が理解できませんでした。カスタム マッピングの 2 番目の例は次のようになります。
-> インデックス アナライザーは edgeNgram
-> 検索アナライザーは次のとおりです。

"full_name":{
    "filter":[
        "standard",
        "lowercase",
        "asciifolding"
    ],
    "type":"custom",
    "tokenizer":"standard"
}

クエリ "Race" が、edgeNgram のために * ra *pport や * rac *ial などの結果を返さないようにしたい場合、そもそもなぜ edgeNgram でインデックスを作成するのでしょうか?

さまざまなアナライザーが役立つ例を挙げて説明してください。

4

2 に答える 2

100

通常、インデックス時とクエリ時の両方で同様の分析チェーンがあります。類似とはまったく同じという意味ではありませんが、通常、ドキュメントをインデックス化する方法は、ドキュメントをクエリする方法を反映しています。

ngrams の例は、インデックス時とクエリ時に異なるアナライザーを使用する主な理由の 1 つであるため、非常に適しています。

部分一致の場合、「elasticsearch」が (mingram 3 と maxgram 20 の場合) になるように、エッジ ngram でインデックスを作成します。

「ela」、「elas」、「elast」、「elasti」、「elastic」、「elastic」、「elasticse」、「elasticsea」、「elasticsear」、「elasticsearch」、および「elasticsearch」

作成したフィールドをクエリしてみましょう。「elastic」という用語をクエリすると、一致があり、期待される結果が返されます。基本的に、索引付けしたものを考慮して、上記の部分一致と呼んだものを完全一致にしました。クエリに ngram を適用する必要もありません。その場合、次のすべての用語を照会します。

「ela」、「elas」、「elast」、「elasti」、「elastic」

これにより、クエリがより複雑になり、奇妙な結果が得られることにもなります。同じフィールドの別のドキュメントで「elapsed」という用語にインデックスを付けたとします。次の ngram があります。

"ela"、"elap"、"elaps"、"elapse"、"elapsed"

「elastic」を検索してクエリに ngram を作成すると、用語「ela」もこの 2 番目のドキュメントに一致するため、「elastic」用語全体を含む用語がなくても、最初のドキュメントと一緒に取得できます。探していました。

分析 APIを見て、さまざまなアナライザーとそのさまざまな結果を試してみることをお勧めします。

于 2013-04-10T17:47:53.100 に答える