根据http://www.elastic.co/guide/zh-cn/elasticsearch/guide/master/combining- filters.html上的elasticsearch文档,布尔过滤器可以是以下内容:
{ "bool" : { "must" : [ A, B ], "should" : [ C, D ], "must_not" : [ E, F ], } }
在含义上,它等效于以下逻辑运算:
A and B and (C or D) and (not E) and (not F)
这样对吗?
谢谢!
正如Andrei在评论中指出的,这是对bool 过滤器 的正确理解:
bool
must
(A and B)
should
(C or D)
must_not
((not E) and (not F))
它们中的每一个都是独立的操作,但是可以完全按照您的显示进行组合。
(A and B) and (C or D) and ((not E) and (not F))
就布尔逻辑而言,之所以与众不同,(not (E and F))是因为与说相同((not E) or (not F))。如果E与说相同field == 5并且F与说相同field == 6,那么这与相同field != 5 or field != 6,这将永远是正确的!
(not (E and F))
((not E) or (not F))
E
field == 5
F
field == 6
field != 5 or field != 6
这导致以不同的方式看待它:
(not (E or F))
换句话说,如果任何过滤器不匹配,则文档不匹配。这导致合并版本的稍微简化的版本:
(A and B) and (C or D) and (not (E or F))