有没有办法在ElasticSearch中获得精确匹配

iibxawm4  于 2023-03-17  发布在  ElasticSearch
关注(0)|答案(2)|浏览(146)

查询参数中的match_phrase与字符串部分匹配。例如:如果我的match_phrase查询'状态'是'拒绝',那么它也匹配'拒绝的qc'.如下:

{
  "query": {
    "bool": {
      "should": [
         {
            "match_phrase": {
               "Status": "rejected"
            }
         }
      ],
      "minimun_should_match":1
    }
  }
}

对于上述查询,我得到的响应是状态为“拒绝”和“拒绝-QC”的两个值,但我只想要“拒绝”的一个-精确匹配。
如果我尝试使用'FILTER',则会引发如下错误:

"root_cause": [
   {
     "type": "parsing_exception",
     "reason": "unknown query [filter]",
     "line": 1,
     "col": 272
   }
],

以上错误的有效负载为:

{
  "query": {
    "bool": {
      "should": [
         {
            "filter": {
                "term": {
                   "Status": "rejected"
                }
            }
         }
      ]
    }
  }
}

有没有人能提出一个解决方案,我怎么才能匹配确切的字符串?谢谢:)

agyaoht7

agyaoht71#

你就快到了,就像这样:

{
  "query": {
    "bool": {
      "minimum_should_match": 1,
      "should": [
            {
                "term": {
                   "Status1": "rejected"
                }
            },
            {
                "term": {
                   "Status2": "rejected"
                }
            },
            {
                "term": {
                   "Status3": "rejected"
                }
            }
      ]
    }
  }
}
jw5wzhpr

jw5wzhpr2#

所有我必须做的匹配确切的字符串是追加'.keyword'后的'status'.像这样:

{
  "query": {
    "bool": {
      "should": [
         {
            "match_phrase": {
               "Status.keyword": "rejected"
            }
         }
      ],
      "minimun_should_match":1
    }
  }
}

而且它会完全匹配字符串,而不是部分匹配!

相关问题