インデックスに単純なレコードがあります
CharacterId=847
- クエリは結果を返します(とを別々
CharacterId=8
に検索するようですCharacterId
8
- クエリ
CharacterId=
は結果を返します - クエリ
CharacterId=*
は何も返さない - クエリ
Character*
は結果を返します - クエリ
CharacterId=8*
は何も返さない
インデックスに単純なレコードがあります
CharacterId=847
CharacterId=8
に検索するようですCharacterId
8
CharacterId=
は結果を返しますCharacterId=*
は何も返さないCharacter*
は結果を返しますCharacterId=8*
は何も返さないあなたの質問は「なぜelasticsearchがそうするのですか」だと思いますか?この質問に答えるには、レコードがどのように索引付けされたかを調べる必要があります。デフォルトのアナライザーを使用していたと仮定すると、レコードが 2 つの用語characterid
ととしてインデックス化されていることがわかり847
ます。
$ curl "localhost:9200/twitter/_analyze?pretty=true" -d 'CharacterId=847'
{
"tokens" : [ {
"token" : "characterid",
"start_offset" : 0,
"end_offset" : 11,
"type" : "<ALPHANUM>",
"position" : 1
}, {
"token" : "847",
"start_offset" : 12,
"end_offset" : 15,
"type" : "<NUM>",
"position" : 2
} ]
}
次に、クエリを見てみましょう。
$ curl "localhost:9200/twitter/_validate/query?explain=true&pretty=true" -d '{
"query_string": {"query":"CharacterId=8"}
}'
{
"valid" : true,
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"explanations" : [ {
"index" : "twitter",
"valid" : true,
"explanation" : "_all:characterid _all:8"
} ]
}
おっしゃる通り、このクエリは用語characterid
または用語を検索しています8
。用語はレコードの最初の用語characterid
と一致し、結果が返されます。
2 番目のクエリも同様の効果がありますが、1 つの用語のみを検索しますcharacterid
。
$ curl "localhost:9200/twitter/_validate/query?explain=true&pretty=true" -d '{
"query_string": {"query":"CharacterId="}
}'
...
"explanation" : "_all:characterid"
...
3 番目のクエリは、ワイルドカード クエリとして処理されます。
$ curl "localhost:9200/twitter/_validate/query?explain=true&pretty=true" -d '{
"query_string": {"query":"CharacterId=*"}
}'
...
"explanation" : "_all:characterid=*"
...
ご覧のとおり、文字で始まるすべての用語が検索されますcharacterid=
。あなたのインデックスにはそのような用語がないため、何も見つかりません。
4 番目のクエリは、ワイルドカード クエリとして再び処理されます。
$ curl "localhost:9200/twitter/_validate/query?explain=true&pretty=true" -d '{
"query_string": {"query":"Character*"}
}'
...
"explanation" : "_all:character*"
...
ただし、今回は で始まる用語を検索するため、用語character
に一致しcharacterid
ます。
最後のクエリは 3 番目のクエリに似ています。
$ curl "localhost:9200/twitter/_validate/query?explain=true&pretty=true" -d '{
"query_string": {"query":"CharacterId=8*"}
}'
...
"explanation" : "_all:characterid=8*"
...
で始まる用語はありませんcharacterid=8
。これらのため、レコードは返されません。
これが必要な動作でない場合は、このフィールドをまったく分析しないか、小文字のアナライザーのみを使用することを検討してください。