gpt4 book ai didi

elasticsearch - 基于3个不同的Elasticsearch查询汇总结果

转载 作者:行者123 更新时间:2023-12-03 02:17:29 25 4
gpt4 key购买 nike

我有3个来自不同来源的不同搜索查询,我想将这些查询聚合到一个查询中,该查询将返回这3个查询的并集结果(对查询执行OR操作)
例如:
查询1:

query: {
bool: {
filter: [
{ terms: { tags.keyword: ['apple', 'banana'] }},
{ terms: { language.keyword: ['en'] }},
]
}
}
查询2:
query: {
bool: {
filter: [
{ terms: { tags.keyword: ['orange', 'mango'] }},
{ terms: { language.keyword: ['it'] }},
{ terms: { source.keyword: ['Royal Garden'] }},
]
}
}
查询3:
query: {
bool: {
filter: [
{ terms: { owner.keyword: ['Dan Chunmun'] }},
{ terms: { language.keyword: ['en'] }},
{ terms: { source.keyword: ['Royal Garden'] }},
]
}
}
我得到的搜索结果是:

Result = Query 1 OR Query 2 OR Query 3 (Union of all 3 queries)


我当时在看 How to combine multiple bool queries in elasticsearch问题,但没有解释如何合并查询。
我尝试使用 should子句,但到目前为止无法获得预期的结果。
我尝试结合上面查询的 bool部分,例如:
const boolTerms: any = [];

Queries.map(q => {
return boolTerms.push(q.query);
});

// combined query
filter : {
bool: {
should: boolTerms
}
}

最佳答案

组合查询有两种方法

  • 查询字符串查询仅适用于这些用例。在查询字符串查询中,您可以将每个查询以字符串格式
  • 编写

    让我们定义一个子句A = 标签。关键字:['apple','banana']
    现在,您可以组合多个的方式是这样
    {
    "query": {
    "query_string": {
    "query": "(A and B) OR (D and E and F) or(G and H and E)"
    }
    }
    }
    这里A和B都是查询1的子句。
  • 但是,由于查询字符串查询是全文查询,并且分析器将应用于查询词,因此对于您而言,将使用bool查询,在其中您可以将ternt查询与
  • 组合在一起

    这是一个示例
    {
    "query": {
    "bool": {
    "should": [
    {
    "bool": {
    "must": [
    {
    "terms": {
    "tags.keyword": ["apple", "banana"]
    }
    },
    {
    "terms": {
    "language.keyword": ["en"]
    }
    }
    ]
    }
    },
    {
    "bool": {
    "must": [
    {
    "terms": {
    "tags.keyword": ["orange", "banana"]
    }
    },
    {
    "terms": {
    "language.keyword": ["it"]
    }
    }
    ]
    }
    }
    ]
    }
    }
    }

    关于elasticsearch - 基于3个不同的Elasticsearch查询汇总结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63250861/

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