0

我有要搜索的字段“ 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它为弹性搜索创建上述查询,所以我没有太多控制权在弹性搜索查询字符串上。我可以更改的是该字段的弹性搜索分析器或其类型。

4

1 回答 1

0

您需要让query_string 解析器知道您将使用正则表达式,因此将整个内容包装起来/.../并转义正斜杠:

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

或者,您也可以使用regexp查询

{
  "query": {
    "regexp": {
      "xyz": "a/b/c/.*"
    }
  }
}
于 2021-03-29T12:29:35.770 回答