Sam*_*ukh 2 elasticsearch nest
我是 ElasticSearch - NEST API 的新手。
我们正在尝试使用 AND/OR 子句准备多个条件。例如 - (条件 1 OR 条件 2) AND (条件 3)
目前我们正在尝试通过连接查询条件。
任何人都可以使用 NEST API 提供更好的示例吗?
ElasticSearch 中有一个叫做Bool Query的东西。匹配与其他查询的布尔组合(AND、OR、NOT)匹配的文档的查询。它是使用一个或多个布尔子句构建的,每个子句都有一个类型化的出现。发生类型有:
must:(AND)子句(查询)必须出现在匹配的文档中。
应该:(或)子句(查询)应该出现在匹配的文档中。在没有 must 子句的布尔查询中,一个或多个 should 子句必须匹配一个文档。可以使用 minimum_should_match 参数设置要匹配的最少数量的 should 子句。
must_not: (NOT) 子句(查询)不得出现在匹配文档中。
因此,对于您给出的示例,您将获得以下查询:
bool
should
condition 1
condition 2
bool
must
condition 3
Run Code Online (Sandbox Code Playgroud)
在 ElasticSearch 中,代码如下所示:
"filter": {
"bool": {
"should": [
{"term": {"tag": value1}},
{"term": {"tag": value2}}
],
"bool": {
"must":{"term": {"tag": "value3"}}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在 NEST 中,它看起来像:
Filter(f=>f
.Bool(b=>b
.Should(
o=>o.Term(t=>t.Tag, Value1),
o=>o.Term(t=>t.Tag, Value2)),
o=>o.Bool(bo=>bo
.Must(a=>a.Term(t=>t.Tag, Value3))
)
)
)
Run Code Online (Sandbox Code Playgroud)
根据NEST 文档,您可以使用 NEST 的 Bitwise 运算符,而不是编写如此繁琐和冗长的查询,这很简单。
.Query((q=>q.Term(tag, value1) || q.Term(tag, value2)) && q.Term(tag, value3))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6465 次 |
| 最近记录: |