gpt4 book ai didi

ElasticSearch - NEST - 如何组合 AND 和 OR 语句

转载 作者:行者123 更新时间:2023-12-04 07:33:31 25 4
gpt4 key购买 nike

我是 ElasticSearch - NEST API 的新手。

我们正在尝试使用 AND/OR 子句准备多个条件。例如 - (条件 1 OR 条件 2) AND (条件 3)

目前我们正在尝试通过连接查询条件。

谁能提供使用 NEST API 的更好示例?

最佳答案

好吧,有一个东西叫做 Bool Query在 Elasticsearch 中。匹配文档匹配其他查询的 bool 组合(AND、OR、NOT)的查询。它是使用一个或多个 bool 子句构建的,每个子句都有一个类型化的出现。出现类型是:

必须: (AND)子句(查询)必须出现在匹配的文档中。

应该:(或)子句(查询)应该出现在匹配文档中。在没有 must 子句的 bool 查询中,一个或多个 should 子句必须与文档匹配。可以使用 minimum_should_match 参数设置要匹配的 should 子句的最小数量。

must_not:(NOT)子句(查询)不得出现在匹配文档中。

因此对于您给出的示例,您将得到以下查询:

bool 
should
condition 1
condition 2
bool
must
condition 3

在 ElasticSearch 中,代码将如下所示:

"filter": {
"bool": {
"should": [
{"term": {"tag": value1}},
{"term": {"tag": value2}}
],
"bool": {
"must":{"term": {"tag": "value3"}}
}
}
}

在 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))
)
)
)

根据NEST documentation您可以使用 NEST 的位运算符,而不是编写如此繁琐和冗长的查询,这很简单。

.Query((q=>q.Term(tag, value1) || q.Term(tag, value2)) && q.Term(tag, value3))

关于ElasticSearch - NEST - 如何组合 AND 和 OR 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28700963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com