elasticsearch 筛选器未按预期为Elastic搜索工作

dgjrabp2  于 2023-06-29  发布在  ElasticSearch
关注(0)|答案(1)|浏览(136)

我的Elastic搜索文档看起来像这样:

{
    "_index": "terms",
    "_type": "_doc",
    "_id": "30028861",
    "_version": 36,
    "_seq_no": 338988,
    "_primary_term": 6,
    "found": true,
    "_source": {
        "title": {
            "value": "Credit Card Number",
            "is_changed": false
        },
        "node_id": 30028861,
        "domain_id": 30028838,

        "node_name": "Credit Card Number",
        "parent_id": 30028839,
        "term_name": "Credit Card Number",
        "account_id": 30028807,
       
        "published_status": "Published",
        "published_status_id": "PUB",
        "node_sub_type": "TRM",
    }
}

我尝试添加Filter子句,条件为must_not
我的问题是:

{
   "from":0,
   "size":10,
   "track_total_hits":true,
   "query":{
      "bool":{
         "must":[
            {
               "match":{
                  "account_id":30028807
               }
            }
         ],
         "filter":[
            {
               "bool":{
                  "should":[
                     {
                        "terms":{
                           "domain_id":[
                              30119066,
                              30123338
                           ]
                        }
                     },
                     {
                        "terms":{
                           "parent_id":[
                              30028839
                           ]
                        }
                     }
                  ]
               }
            },
            {
               "bool":{
                  "must_not":[
                     {
                        "terms":{
                           "published_status_id":[
                              "PUB"
                           ]
                        }
                     },
                     {
                        "terms":{
                           "published_status":[
                              "Published"
                           ]
                        }
                     }
                  ]
               }
            }
         ],
         "must_not":{
            "terms":{
               "published_status.raw":[
                  "Disabled"
               ]
            }
         }
      }
   },
   "_source":[
      "node_type",
      "node_id",
      "parent_name",
      "table_name"
   ]
}

所以As In must_not mentioned,如果PUB中的published_status_id和Published文档中的published_status不应该返回,但它会返回包含两者的所有文档。使用过滤器子句的整个意图是找到domain_id和parent_id,published_status_id不在PUB中,published_status不在Published中。但它返回的状态与酒吧

gpnt7bae

gpnt7bae1#

我看到你有published_status.raw,它可能是一个keyword,因此,published_status可能是一个text字段。鉴于此,must_not中的子句可能应该是

add this
                 {                        |
                    "terms":{             v
                       "published_status.raw":[
                          "Published"
                       ]
                    }
                 }

另外,请确保检查可能遇到相同问题的published_status_id,您可能需要使用published_status_id.raw才能进行精确的terms匹配。

相关问题