gpt4 book ai didi

elasticsearch - 如何在 ElasticSearch 的数组中查询同一个元组中的两个字段?

转载 作者:行者123 更新时间:2023-11-29 02:55:09 32 4
gpt4 key购买 nike

假设我的索引中有一些文档如下所示:

{
"category":"2020",
"properties":[
{
"name":"foo",
"value":"2"
},
{
"name":"boo",
"value":"2"
}
]
},
{
"category":"2020",
"properties":[
{
"name":"foo",
"value":"8"
},
{
"name":"boo",
"value":"2"
}
]
}

我想以某种方式查询索引,只返回那些匹配 "foo":"2" 但不匹配 "boo":"2" 的文档>。

我试图编写一个同时匹配 properties.name properties.value 的查询,但我得到了误报。我需要一种方法来告诉 ElasticSearch 名称和值必须是相同属性元组的一部分。

我该怎么做?

最佳答案

您需要将 properties 映射为 nestedtype .所以你的映射看起来类似于:

{
"your_type": {
"properties": {
"category": {
"type": "string"
},
"properties": {
"type": "nested",
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
}
}
}

然后,您要匹配在同一元组中具有 "foo=2" 但在同一元组中不具有 "boo=2" 的文档的查询将需要使用nested query因此,如下所示。

{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "properties",
"query": {
"bool": {
"must": [
{
"match": {
"properties.name": "foo"
}
},
{
"match": {
"properties.value": "2"
}
}
]
}
}
}
}
],
"must_not": [
{
"nested": {
"path": "properties",
"query": {
"bool": {
"must": [
{
"match": {
"properties.name": "boo"
}
},
{
"match": {
"properties.value": "2"
}
}
]
}
}
}
}
]
}
}
}

关于elasticsearch - 如何在 ElasticSearch 的数组中查询同一个元组中的两个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30570921/

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