gpt4 book ai didi

Elasticsearch 复杂过滤逻辑

转载 作者:行者123 更新时间:2023-12-02 22:20:55 26 4
gpt4 key购买 nike

如果有人可以发布如何执行此操作的示例,它将回答我对 Elasticsearch 中过滤如何工作的几乎所有问题。

假设 A、B、C、D、E 等是字段,a1、a2、...、b1、b2、...等是这些字段的可能值。还假设这些字段中的任何一个都可以有多个值。

我将如何使用以下逻辑执行过滤:

A=a1 AND (B=b1 OR C=c1) AND ((D=d1) OR (D=d2)) AND (((E=e1) OR (E=e2)) AND (F=f1)) OR (((G=g1) AND (G=g2)) AND (H=h1))

这不是我要编写的实际查询,但是它包含我想编写的所有查询。

我知道如何做 A=a1 和 (B=b1 或 B=b2)。例如,下面我在 CustomerID=113 AND (TypeID=91 OR TypeID=70) 的文档中搜索术语“要搜索的东西”。

{
"query": {
"filtered": {
"query": {
"query_string": {
"query": "something to search"
}
},
"filter": {
"and": [
{
"term": {
"CustomerID": "113"
}
},
{
"or": [
{
"terms": {
"TypeID": [
91,
70
]
}
}
]
}
]
}
}
}
}

然而,我正在努力弄清楚如何组合这些过滤器的其余部分。

一个完整的例子会很棒!

最佳答案

要走的路基本上就是您在代码段中显示的内容。您将使用 AND filtersOR filters以嵌套的方式。例如,考虑:A=a1 AND (B=b1 OR C=c1) .你会有:

{
"query": {
"filtered": {
"query": {
"query_string": {
"query": "something to search"
}
},
"filter": {
"and": [
{
"term": { "A": "a1" }
},
{
"or": [
{
"term": { "B": "b1 }
},
{
"term": { "C": "c1 }
}
]
}
]
}
}
}
}

我假设您正在以编程方式构建这些 JSON,因此,鉴于复杂的逻辑,在 JSON 中构建等效过滤器并不难。

如果问题是如何转换输入 文字查询喜欢 "A=a1 AND (B=b1 OR C=c1)"到逻辑内存中的相应表示,那么您最好只使用 query filterquery_string查询。您可能不想手动解析逻辑。

关于Elasticsearch 复杂过滤逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16362240/

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