Skip to content

Commit 10cb12f

Browse files
chapter12_part3: /080_Structured_Search/10_compoundfilters.asciidoc
fix: 1) 换行问题 2) 结合构成 -> 结合成 这样是否跟通顺? 3) Line 19: 此处应该用中文标点 4) Line 48: 括号里的非是否多余?
1 parent 27bc2c2 commit 10cb12f

File tree

1 file changed

+13
-30
lines changed

1 file changed

+13
-30
lines changed

080_Structured_Search/10_compoundfilters.asciidoc

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
[[combining-filters]]
22
=== 组合过滤器
33

4-
前面的两个例子都是单个过滤器(filter)的使用方式。((("structured search", "combining filters")))((("filters", "combining"))) 在实际应用中,我们
5-
很有可能会过滤多个值或字段。比方说,怎样
6-
用 Elasticsearch 来表达下面的 SQL ?
4+
前面的两个例子都是单个过滤器(filter)的使用方式。((("structured search", "combining filters")))((("filters", "combining"))) 在实际应用中,我们很有可能会过滤多个值或字段。比方说,怎样用 Elasticsearch 来表达下面的 SQL ?
75

86
[source,sql]
97
--------------------------------------------------
@@ -13,14 +11,12 @@ WHERE (price = 20 OR productID = "XHDK-A-1293-#fJ3")
1311
AND (price != 30)
1412
--------------------------------------------------
1513

16-
这种情况下,我们需要 `bool` (布尔)过滤器。((("filters", "combining", "in bool filter")))((("bool filter"))) 这是个 _复合过滤器(compound filter)_ ,
17-
它可以接受多个其他过滤器作为参数,并将这些过滤器结合构成各式各样的
18-
布尔(逻辑)组合。
14+
这种情况下,我们需要 `bool` (布尔)过滤器。((("filters", "combining", "in bool filter")))((("bool filter"))) 这是个 _复合过滤器(compound filter)_ ,它可以接受多个其他过滤器作为参数,并将这些过滤器结合成各式各样的布尔(逻辑)组合。
1915

2016
[[bool-filter]]
2117
==== 布尔过滤器
2218

23-
一个 `bool` 过滤器由三部分组成:
19+
一个 `bool` 过滤器由三部分组成
2420

2521
[source,js]
2622
--------------------------------------------------
@@ -42,18 +38,14 @@ WHERE (price = 20 OR productID = "XHDK-A-1293-#fJ3")
4238
`should`::
4339
至少有一个语句要匹配,与 `OR` 等价。
4440

45-
就这么简单!((("should clause", "in bool filters")))((("must_not clause", "in bool filters")))((("must clause", "in bool filters"))) 当我们需要多个过滤器时,只须将它们置入
46-
`bool` 过滤器的不同部分即可。
41+
就这么简单!((("should clause", "in bool filters")))((("must_not clause", "in bool filters")))((("must clause", "in bool filters"))) 当我们需要多个过滤器时,只须将它们置入 `bool` 过滤器的不同部分即可。
4742

4843
[NOTE]
4944
====
50-
一个 `bool` 过滤器的每个部分都是可选的(例如,我们可以只有一个 `must` 语句),
51-
而且每个部分内部可以只有一个或一组过滤器。
45+
一个 `bool` 过滤器的每个部分都是可选的(例如,我们可以只有一个 `must` 语句),而且每个部分内部可以只有一个或一组过滤器。
5246
====
5347

54-
用 Elasticsearch 来表示本部分开始处的 SQL 例子,将两个 `term` 过滤器
55-
置入 `bool` 过滤器的 `should` 语句
56-
内,再增加一个语句处理 `NOT` (非)的条件:
48+
用 Elasticsearch 来表示本部分开始处的 SQL 例子,将两个 `term` 过滤器置入 `bool` 过滤器的 `should` 语句内,再增加一个语句处理 `NOT` 非的条件:
5749

5850
[source,js]
5951
--------------------------------------------------
@@ -79,13 +71,10 @@ GET /my_store/products/_search
7971
// SENSE: 080_Structured_Search/10_Bool_filter.json
8072

8173
<1> 注意,我们仍然需要一个 `filtered` 查询将所有的东西包起来。
82-
<2> 在 `should` 语句块里面的两个 `term` 过滤器
83-
与 `bool` 过滤器是父子关系,两个 `term` 条件需要匹配其一。
84-
<3> 如果一个产品的价格是 `30` ,那么它会自动被排除,因为它
85-
处于 `must_not` 语句里面。
74+
<2> 在 `should` 语句块里面的两个 `term` 过滤器与 `bool` 过滤器是父子关系,两个 `term` 条件需要匹配其一。
75+
<3> 如果一个产品的价格是 `30` ,那么它会自动被排除,因为它处于 `must_not` 语句里面。
8676

87-
我们搜索的结果返回了 2 个命中结果,两个文档分别匹配了 `bool` 过滤器
88-
其中的一个条件:
77+
我们搜索的结果返回了 2 个命中结果,两个文档分别匹配了 `bool` 过滤器其中的一个条件:
8978

9079
[source,json]
9180
--------------------------------------------------
@@ -113,10 +102,7 @@ GET /my_store/products/_search
113102

114103
==== 嵌套布尔过滤器
115104

116-
尽管 `bool` 是一个复合的过滤器,可以接受多个子过滤器,需要
117-
注意的是 `bool` 过滤器本身仍然还只是一个过滤器。((("filters", "combining", "nesting bool filters")))((("bool filter", "nesting in another bool filter"))) 这意味着我们
118-
可以将一个 `bool` 过滤器置于其他 `bool` 过滤器内部,这为我们
119-
提供了对任意复杂布尔逻辑进行处理的能力。
105+
尽管 `bool` 是一个复合的过滤器,可以接受多个子过滤器,需要注意的是 `bool` 过滤器本身仍然还只是一个过滤器。((("filters", "combining", "nesting bool filters")))((("bool filter", "nesting in another bool filter"))) 这意味着我们可以将一个 `bool` 过滤器置于其他 `bool` 过滤器内部,这为我们提供了对任意复杂布尔逻辑进行处理的能力。
120106

121107
对于以下这个 SQL 语句:
122108

@@ -156,10 +142,8 @@ GET /my_store/products/_search
156142
--------------------------------------------------
157143
// SENSE: 080_Structured_Search/10_Bool_filter.json
158144

159-
<1> 因为 `term` 和 `bool` 过滤器是兄弟关系,他们都处于外层的
160-
布尔逻辑 `should` 的内部,返回的命中文档至少须匹配其中一个过滤器的条件。
161-
<2> 这两个 `term` 语句作为兄弟关系,同时处于 `must` 语句之中,所以
162-
返回的命中文档要必须都能同时匹配这两个条件。
145+
<1> 因为 `term` 和 `bool` 过滤器是兄弟关系,他们都处于外层的布尔逻辑 `should` 的内部,返回的命中文档至少须匹配其中一个过滤器的条件。
146+
<2> 这两个 `term` 语句作为兄弟关系,同时处于 `must` 语句之中,所以返回的命中文档要必须都能同时匹配这两个条件。
163147

164148
得到的结果有两个文档,它们各匹配 `should` 语句中的一个条件:
165149

@@ -187,5 +171,4 @@ GET /my_store/products/_search
187171
<1> 这个 `productID` 与外层的 `bool` 过滤器 `should` 里的唯一一个 `term` 匹配。
188172
<2> 这两个字段与嵌套的 `bool` 过滤器 `must` 里的两个 `term` 匹配。
189173

190-
这只是个简单的例子,但足以展示布尔过滤器可以
191-
用来作为构造复杂逻辑条件的基本构建模块。
174+
这只是个简单的例子,但足以展示布尔过滤器可以用来作为构造复杂逻辑条件的基本构建模块。

0 commit comments

Comments
 (0)