gpt4 book ai didi

java - Elasticsearch 匹配完整的术语数组

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

我需要将完整的术语数组与elasticsearch相匹配。仅应返回具有相同元素的数组的文档。文档数组中不应有更多元素或元素子集。元素的顺序并不重要。

示例:

 filter:
id: ["a", "b"]

documents:
id: ["a", "b"] -> match
id: ["b", "a"] -> match
id: ["a"] -> no match
id: ["a", "b", "c"] -> no match

最终我想使用 Java High Level REST Client 来实现查询,尽管 elasticsearch dsl 的示例也可以。

最佳答案

我想提出一些建议,以防止您在需求发生变化时维持一长串“必须”条件(例如,假设您有一个包含六个项目的数组需要匹配)。我将依赖于脚本查询,这可能看起来像是过度设计的,但可以很容易地用它创建一个搜索模板 ( https://www.elastic.co/guide/en/elasticsearch/reference/7.5/search-template.html )。

{
"query": {
"bool": {
"filter": {
"script": {
"script": {
"source": """
def ids = new ArrayList(doc['id.keyword']);
def param = new ArrayList(params.terms);
def isSameSize = ids.size() == param.size();
def isSameContent = ids.containsAll(param);
return isSameSize && isSameContent
""",
"lang": "painless",
"params": {
"terms": [ "a", "b" ]
}
}
}
}
}
}
}

这样,您唯一需要更改的就是 terms 参数的值。

关于java - Elasticsearch 匹配完整的术语数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59665399/

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