在elasticsearch中使用带有术语的通配符

时间:2018-02-27 14:37:33

标签: elasticsearch

我想模拟SQL的IN,所以我使用了术语过滤器,但术语不支持通配符,例如在" * egypt *"中添加astrisck。

那么如何实现以下查询?

PS:我正在使用elastica

{
  "query": {
    "bool": {
      "should": [
        {
          "terms": {
            "country_name": [
              "*egypt*",
              "*italy*"
            ]
          }
        }
      ]
    }
  },
  "sort": [
    {
      "rank": {
        "order": "desc"
      }
    }
  ]
}

1 个答案:

答案 0 :(得分:1)

terms查询不支持通配符。您可以改为使用matchwildcard查询。如果您的问题是要过滤的多个值,则可以在should内组合查询,因此它看起来像这样

{
  "query": {
    "bool": {
      "should": [
        {
          "wildcard": {
            "country_name": "*egypt*"
          }
        },
        {
            "wildcard": {
                "country_name": "*italy*"
            }
        }
      ]
    }
  },
  "sort": [
    {
      "rank": {
        "order": "desc"
      }
    }
  ]
}