一、must查询
使用must查询可以筛选出同时符合多个条件的文档,相当于逻辑上的“与”操作。下面是一个例子:
POST /_search { "query": { "bool": { "must": [ { "match": { "title": "elasticsearch" }}, { "match": { "content": "search" }} ] } } }
上述查询的意思是,要同时匹配”title”字段中包含”elasticsearch”和”content”字段中包含”search”的文档,才会被返回。
此外,must查询还可以用于排除一些文档。例如,我们可以使用must_not来筛选出不包含指定关键词的文档:
POST /_search { "query": { "bool": { "must": { "match": { "content": "elasticsearch" } }, "must_not": { "match": { "title": "logstash" } } } } }
上述查询的意思是,要匹配”content”字段中包含”elasticsearch”并且”title”字段中不包含”logstash”的文档才会被返回。
二、should查询
使用should查询可以查找同时符合多个条件之一的文档,即逻辑上的“或”操作。下面是一个例子:
POST /_search { "query": { "bool": { "should": [ { "match": { "title": "elasticsearch" }}, { "match": { "content": "search" }} ] } } }
上述查询的意思是,要匹配”title”字段中包含”elasticsearch”或”content”字段中包含”search”的文档,都会被返回。
在should查询中,我们也可以指定一个minimum_should_match参数,表示至少要匹配多少个查询条件才会被返回。例如:
POST /_search { "query": { "bool": { "should": [ { "match": { "title": "elasticsearch" }}, { "match": { "content": "search" }} ], "minimum_should_match": 1 } } }
上述查询的意思是,要匹配”title”字段中包含”elasticsearch”或”content”字段中包含”search”的文档,但至少要满足一个条件才会被返回。
三、must和should联合查询
在实际应用场景中,我们经常需要同时筛选出满足多个条件之一的文档,同时排除一些不符合要求的文档。这时候,就可以使用must和should联合查询,如下所示:
POST /_search { "query": { "bool": { "must": { "match": { "content": "elasticsearch" } }, "should": [ { "match": { "title": "logstash" }}, { "match": { "title": "kibana" }} ], "must_not": [ { "match": { "title": "redis" }} ] } } }
上述查询的意思是,要匹配”content”字段中包含”elasticsearch”并且”title”字段中至少满足一个条件,同时不匹配”title”字段中包含”redis”的文档才会被返回。
四、总结
在ES中,使用must查询可以筛选出同时符合多个条件的文档,而使用should查询可以查找同时符合多个条件之一的文档。两者结合使用,可以更加精细地组合查询条件,满足不同的实际需求。
原创文章,作者:KDNMA,如若转载,请注明出处:https://www.506064.com/n/361166.html