[ "tag1", "tag2", ], "name" => "Example 1" } { "-6ren">
gpt4 book ai didi

arrays - Elasticsearch 数组属性必须包含给定的数组项

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

我有如下文件:

{
"tags" => [
"tag1",
"tag2",
],
"name" => "Example 1"
}

{
"tags" => [
"tag1",
"tag3",
"tag4"
],
"name" => "Example 2"
}

我现在想要的是进行术语搜索,其中给定的数组可能如下所示:
[tag1, tag3]

预期命中应该是:
{
"tags" => [
"tag1",
"tag3",
"tag4"
],
"name" => "Example 2"
}

但是,当我执行以下查询时:
GET _search
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"terms": {
"tags": [
"tag1",
"tag3"
]
}
}
]
}
}
}
}
}

因为示例 1 和示例 2 都包含 tag1 或 tag3,所以我得到了“示例 1”和“示例 2”作为命中。通过查看条款的文档,我发现条款实际上是一个包含查询。

在这种情况下,我如何确保示例 2 是使用 tag1 和 tag3 进行查询时的唯一命中?

最佳答案

您需要设置 execution mode “和”通过添加 "execution": "and"terms过滤,以便所有术语都必须包含在文档中才能被视为匹配

GET _search
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"terms": {
"tags": [
"tag1",
"tag3"
],
"execution": "and"
}
}
}
}
}

这实际上与构建 bool must 相同。过滤所有术语的连接,但形式更紧凑。

关于arrays - Elasticsearch 数组属性必须包含给定的数组项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31916523/

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