1

私のインデックスでは、「full_name」という名前のフィールドフィールドがあるとしましょう。私は次のクエリを実行しています:

{
"query":{
    "bool":{
        "must":[
            {
                "wildcard":{
                    "full_name":"ab*"
                }
            }
        ]
    }
},
"size":50
}

そして、それは正確に適合する値を返します、例えば:

"full_name" : "abrakadabra"

しかし、私は次のようなものも受け取ります:

"full_name" : "kad abra"

Wildacrd "ab *"は単語"abra"に適合しているため、 "full_name":"kadabra"があります。どうすればそれを回避し、最初の単語のプレフィックスのみを検索できますか?

4

1 に答える 1

3

デフォルトで文字列に適用される標準アナライザーは、各単語の用語を生成します。したがって、「kad abra」は、「kad」と「abra」の2つの用語としてインデックス付けされ、クエリで2番目の用語が検出されます。full_nameを常にフレーズとして検索する場合は、キーワードトークナイザーと小文字フィルターを使用したカスタムアナライザーでインデックスを作成する必要があります。または、大文字と小文字が区別される場合は、このフィールドにnot_analyzedとしてインデックスを付けることができます。

于 2012-04-04T13:57:44.933 に答える