查询1
POST /bank/_search
{
"query": {
"bool": {
"must": {
"term": {
"firstname" : "Amber"
}
}
}
}
}
查询1执行得到结果1,找不到匹配结果
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 0,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
}
}
查询2
POST /bank/_search
{
"query": {
"bool": {
"must": {
"term": {
"firstname" : "amber"
}
}
}
}
}
查询3
POST /bank/_search
{
"query": {
"bool": {
"must": {
"term": {
"firstname.keyword" : "Amber"
}
}
}
}
}
查询2和查询3执行得到结果2
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 6.5032897,
"hits" : [
{
"_index" : "bank",
"_type" : "_doc",
"_id" : "1",
"_score" : 6.5032897,
"_source" : {
"account_number" : 1,
"balance" : 39225,
"firstname" : "Amber",
"lastname" : "Duke",
"age" : 32,
"gender" : "M",
"address" : "880 Holmes Lane",
"employer" : "Pyrami",
"email" : "amberduke@pyrami.com",
"city" : "Brogan",
"state" : "IL"
}
}
]
}
}
查询1找不到匹配结果,而查询2和查询3可以得到结果2,用下面的查询结果分析原因
查询分词结果:
Get /bank/_analyze
{
"field":"firstname",
"text":"Amber nihao wohao"
}
分词的结果:
{
"tokens" : [
{
"token" : "amber",
"start_offset" : 0,
"end_offset" : 5,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "nihao",
"start_offset" : 6,
"end_offset" : 11,
"type" : "<ALPHANUM>",
"position" : 1
},
{
"token" : "wohao",
"start_offset" : 13,
"end_offset" : 18,
"type" : "<ALPHANUM>",
"position" : 2
}
]
}
通过分词结果,可以看出,含有大写字母的Amber分词后,变成了amber,这也就是查询2可以匹配结果,而查询1匹配不到结果的原因。
最根本原因可以参考:https://segmentfault.com/q/1010000017312707