match在匹配时会对所查找的关键词进行分词,然后按分词匹配查找,而term会直接对关键词进行查找。一般模糊查找的时候,多用match,而精确查找时可以使用term。
举个例子说明一下:
{
“match”: { “title”: “my cat”}
}
{
“bool”: {
“should”: [
{ “term”: { “title”: “my” }},
{ “term”: { “title”: “cat” }}
]
}
}
match 会将关键词进行分词分成“my”和“cat”,查找时包含其中任一均可被匹配到。
term结合bool使用,不进行分词,但是有2个关键词,并且使用“或”匹配,也就是会匹配关键字一“my”或关键字“cat”,效果和上面的match是相同的。如果要想精确的匹配“my cat”而不匹配“my lovely cat”,则可以如下方式匹配:
{
“bool”: {
“should”: [
{ “term”: { “title”: “my cat” }}
]
}
}
是不是还挺简单的,有一点需要注意一下,term结合bool使用时:should是或,must是与,must_not是非(还有一种filter,不说了这个)
{
“match”: {
“title”: {
“query”: “my cat”,
“operator”: “and”
}
}
}
{
“bool”: {
“must”: [
{ “term”: { “title”: “my” }},
{ “term”: { “title”: “cat” }}
]
}
}
上面这两个查询就是等效的,match的与对应bool的must,也就是说my和cat需要都出现才算匹配上。
————————————————
版权声明:本文为CSDN博主「攻城狮阿楠」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tclzsn7456/article/details/79956625