Elastic search DSL:用通配符过滤吗?

发布于 2021-02-01 12:02:02

我正在尝试使用术语过滤器过滤文档。我不确定如何在过滤器中引入通配符。我尝试过这样的事情:

"filter":{
  "bool":{
       "must":{
          "terms":{
             "wildcard" :  {
                "aircraft":[
                   "a380*"
                ]
             }
         }
      }
   }
}

但是我得到了SearchParseException。没有办法在过滤器框架内使用通配符?

关注者
0
被浏览
157
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    terms过滤器不支持通配符,查询做,虽然。试试这个查询

    {
      "query": {
        "bool": {
          "must": {
            "wildcard": {
              "aircraft": "a380*"
            }
          }
        }
      }
    }
    

    或者,如果您绝对需要使用过滤器,也可以尝试使用过滤regexp器:

    {
      "query": {
        "filtered": {
          "filter": {
            "bool": {
              "must": {
                "regexp": {
                  "aircraft": "a380.*"
                }
              }
            }
          }
        }
      }
    }
    

    更新

    在最新的ES版本中,由于filtered已删除,因此请使用以下查询:

    {
      "query": {
        "bool": {
          "filter": {
             "regexp": {
               "aircraft": "a380.*"
             }
          }
        }
      }
    }
    


推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看