无法在 ElasticSearch 搜索 api 中获得所需的搜索结果

问题描述

我有搜索的字段“xyz”。字段类型为关键字。字段“xyz”的不同值是 -

  • a/b/c/d
  • a/b/c/e
  • a/b/f/g
  • a/b/f/h

现在进行以下查询 -

{
    "query": {
        "query_string" : {
            "query" : "(xyz:(\"a/b/c\"*))"
        }
    }
}

我应该只得到这两个结果-

  • a/b/c/d
  • a/b/c/e

但我得到了所有四个结果 -

  • a/b/c/d
  • a/b/c/e
  • a/b/f/g
  • a/b/f/h

编辑 - 实际上我不是直接在 ElasticSearch 上查询,我使用的是这个 API https://atlas.apache.org/api/v2/resource_DiscoveryREST.html#resource_DiscoveryREST_searchWithParameters_POST,它为elasticsearch 创建了上面提到的查询,所以我对elasticsearch query_string 没有太多控制。我可以更改的是该字段的 elasticsearch 分析器或其类型。

解决方法

您需要让 query_string parser 知道您将使用正则表达式,因此将整个内容包装在 /.../ 中并避开正斜杠:

{
  "query": {
    "query_string": {
      "query": "xyz:/(a\\/b\\/c\\/.*)/"
    }
  }
}

或者,您也可以使用 regexp query

{
  "query": {
    "regexp": {
      "xyz": "a/b/c/.*"
    }
  }
}