bool过滤器的理解
Understanding of bool filter
根据 http://www.elastic.co/guide/en/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
filter:
的正确理解
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
相同,它总是会是真的!
这导致以不同的方式看待它:
must_not
可译为(not (E or F))
换句话说,如果任何过滤器不匹配,则文档不匹配。这导致组合版本的稍微简化的版本:
(A and B) and (C or D) and (not (E or F))
根据 http://www.elastic.co/guide/en/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
filter:
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
相同,它总是会是真的!
这导致以不同的方式看待它:
must_not
可译为(not (E or F))
换句话说,如果任何过滤器不匹配,则文档不匹配。这导致组合版本的稍微简化的版本:
(A and B) and (C or D) and (not (E or F))