【问题标题】:Not able to get desired search results in ElasticSearch search api无法在 ElasticSearch 搜索 api 中获得所需的搜索结果
【发布时间】:2021-03-29 09:35:30
【问题描述】:

我有要搜索的字段“xyz”。字段的类型是keyword。字段“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 没有太多控制。我可以更改的是该字段的弹性搜索分析器或其类型。

【问题讨论】:

    标签: regex elasticsearch elasticsearch-query apache-atlas


    【解决方案1】:

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

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

    或者,您也可以使用regexp query

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

    【讨论】:

    • 实际上我不是直接在 ElasticSearch 上查询,我使用的是这个 API atlas.apache.org/api/v2/…,它为 elasticsearch 创建了上述查询,所以我对 elasticsearch query_string 没有太多控制。我可以更改的是该字段的弹性搜索分析器或其类型。
    • 据我所知。
    • 您也可以使用prefix query,但是当您对查询没有任何控制权时,这会很困难...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2021-07-02
    相关资源
    最近更新 更多