通过查询,should 是不生效的。 解决方案 解决方案一:加上"minimum_number_should_match": 1 这个设置should语句的满足条件值。 解决方案二:将should嵌在must语句中。 方案一: { "size":10000, "query":{ "bool":{ "must":[ { "range":{ "dateTime":{ ...
must(QueryBuilders.termsQuery("field4","444")); 但是发现must能生效,should过滤是不生效的,原因是这里should是or逻辑,没限定至少有一个should成功,需要加一句: minimumShouldMatch(1); 据说还有个方法是,把should嵌套到must里,但是我试的时候有问题,死循环了 //主查询对象 BoolQueryBuilder queryBuilder = ...
当使用should查询时,如果包含了must或者filter查询,那么should的查询语句就不是或者的意思了,而是有或者没有都行的含义。 那么第一种写法的含义就是: 性别必须为男,但是分数可以是70,也可以是80,也可以两者都不是。 如果没有filter和must查询的话,那么必须满足一个should中的条件。 除了上面提到的解决方案,还有一...
"must": [ {"term": {"sex": "男"}}, {"term": {"score": "80"}} ] } } ] } } } 第二种:在must中再嵌套一层bool来做should过滤 { "query": { "bool": { "must": [ {"term": {"sex": {"value": "男"}}}, { "bool": { "should": [ {"term": {"score": {"value"...
记一次Golang操作ES时Should与Must“纠纷” golang使用github.com/olivere/elastic/v7框架操作ES时,预想查询7天内且meaasge存在“成功”或“失败”的记录,尝试使用以下代码: nowTime := time.Now() endTime := nowTime startTime := endTime.AddDate(0, 0, -7)...
ES7之前失效,7之后的版本支持该写法 1. GET test/_search { "query": { "bool": { "must": [ {"term": { "sex": { "value":"男" } }} ], "should": [ {"term": { "score": { "value": 70 } }}, {"term": { "score": { ...
es中should查询使用注意 这篇博客中提出的第一个问题,为什么第一种写法should失效了。 经过查阅发现: 当使用should查询时,如果包含了must或者filter查询,那么should的查询语句就不是或者的意思了,而是有或者没有都行的含义。 那么第一种写法的含义就是: 性别必须为男,但是分数可以是70,也可以是80,也可以两者都不是...
就像我们定义一个计算长方形面积的方法,这个方法“must”接收长和宽这两个参数,不然这个方法就没办法正确计算出面积啦。这就好比你去面包店买面包,你“must”(必须)付钱才能拿走面包一样,不然面包店可不会让你把面包拿走哦。 再说说“should”,这个就有点像是一种建议性的要求。还是以那个长方形面积的方法为例...
这段代码的意思是有多个 bool 查询,每个 bool 查询都包含一个 must 查询和一个 should 查询。在 should 查询中,只需要匹配其中的一项就可以。所以,第一个 should 查询表示的是 sex 为 1 或 2,且颜色为 226 或 229。第二个 should 查询表示的是 sex 为 0 或 3,且颜色为 226。只有当所有的 must 查询...
must:与关系,相当于关系型数据库中的 and。 should:或关系,相当于关系型数据库中的 or。 must_not:非关系,相当于关系型数据库中的 not。 filter:过滤条件。 range:条件筛选范围。 gt:大于,相当于关系型数据库中的 >。 gte:大于等于,相当于关系型数据库中的 >=。 lt:小于,相当于关系型数据库中的 <。