ElasticSearch 复合查询 Boolean Query
目录
?
复合查询 Boolean Query
布尔查询是一个或多个查询子句的组合。子查询的组合方式有:
- must:必须匹配每个子查询,类似“与
- should:选择性匹配子查询,类似“或”
- must not:必须不匹配,不参与算分,类似“非
- filter:必须匹配,不参与算分
利用bool查询实现功能
案例:搜索名字包含“如家”,价格不高于400,在坐标31.21121.5周围10km范围内的酒店
GET? ?/hotel/_search
{
????????"query" : {
????????????????"bool" : {
????????????????????????"must" : [
? ? ? ? ? ? ? ? ? ? ? ? ?????????{
????????????????????????????????"match": {"name":"如家"}? ? ? ? ? ? ? ? ? ? ? ? ????????}
????????????????????????],
????????????????????????"must_not" : [? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
????????????????????????????????"range": {?"price": { "gt" : 400 }}? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ],
????????????????????????"filter" : [
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
????????????????????????????????????????"geo_distance" : {????????????????????????????????????????????????"distance":"10km" ,
????????????????????????????????????????????????"location": "lat": 31.21 , "lon": 121.5}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ]
? ? ? ? ? ? ? ? }
? ? ? ? }?
}
?总结
bool查询有几种逻辑关系?
- must:必须匹配的条件,可以理解为 "与"
- should:选择性匹配的条件,可以理解为 "或"
- must_not:必须不匹配的条件,不参与打分
- filter:必须匹配的条件,不参与打分
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!