gpt4 book ai didi

elasticsearch - Elasticsearch:如果任何嵌套对象字段与术语值匹配,则不返回文档

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

我很难编写一个查询,如果它的任何嵌套对象字段值与在查询中传递的术语值匹配,则不应返回文档。

文件样本:

 {
"id": 1,
"test": "name",
"rules": [
{
"id": 2,
"name": "rule3",
"questionDetailConditionalRules": [
{
"questionDetailId": 1
},
{
"questionDetailId": 2
}
]
},
{
"id": 3,
"name": "rule3",
"questionDetailConditionalRules": [
{
"questionDetailId": 4
},
{
"questionDetailId": 5
}
]
}
]
}
rule字段具有嵌套类型

我的嵌套搜索查询是:
{
"query": {
"nested": {
"path": "rules",
"query": {
"bool": {
"must_not": [
{
"terms": {
"rules.questionDetailConditionalRules.questionDetailId": [
1
]
}
}
]
}
}
}
}
}

预期结果:不应返回该文档
实际结果:返回文档。

我应该错过查询中的任何内容吗?

最佳答案

能够重现并解决您的问题,请逐步查找解决方案以使其正常运行。 ,您需要将nested移动到must_not块内,并对查询进行一些修改。

索引定义

{
"mappings" :{
"properties" :{
"rules" :{
"type" : "nested"
}
}
}
}

索引您的样本文档
{
"rules": [
{
"id": 2,
"name": "rule3",
"questionDetailConditionalRules": [
{
"questionDetailId": 1
},
{
"questionDetailId": 2
}
]
},
{
"id": 3,
"name": "rule3",
"questionDetailConditionalRules": [
{
"questionDetailId": 4
},
{
"questionDetailId": 5
}
]
}
]
}

搜索查询
{
"query": {
"bool": {
"must_not": [
{
"nested": {
"path": "rules", --> note `nested` is inside the `must_not` block.
"query": {
"bool": {
"filter": [
{
"term": {
"rules.questionDetailConditionalRules.questionDetailId": 1
}
}
]
}
}
}
}
]
}
}
}

搜索结果
"hits": {
"total": {
"value": 0,
"relation": "eq"
},
"max_score": null,
"hits": []
}

注意:您可以在 this链接中找到更多信息。

关于elasticsearch - Elasticsearch:如果任何嵌套对象字段与术语值匹配,则不返回文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61504212/

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