インデックスに単純なレコードがあります
CharacterId=847
- クエリは結果を返します(とを別々
CharacterId=8に検索するようですCharacterId8 - クエリ
CharacterId=は結果を返します - クエリ
CharacterId=*は何も返さない - クエリ
Character*は結果を返します - クエリ
CharacterId=8*は何も返さない
インデックスに単純なレコードがあります
CharacterId=847
CharacterId=8に検索するようですCharacterId8CharacterId=は結果を返します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。これらのため、レコードは返されません。
これが必要な動作でない場合は、このフィールドをまったく分析しないか、小文字のアナライザーのみを使用することを検討してください。