如何在 python 中使用 elasticsearch 编写简单的正则表达式查询?

How to write a simple regexp query using elasticsearch in python?

我正在尝试使用 python 中的 elasticsearch 编写一个简单的正则表达式查询,但无法正常工作。谁能告诉我哪里出错了?

result = es.search(index="my-index", body={"query": {"regexp": {"Name": "Vi.*" }}})

索引文件是一个名字列表,其中也有我的名字 (Vitthal Bhandari)。当上面的查询应该 return 我的名字时,它总是产生空结果。该文档已正确编入索引,其他查询工作正常。例如匹配查询给出所需的结果。

result = es.search(index="my-index", body={"query": {"match": {"Name": "Vitthal" }}})

我正在编写的正则表达式查询有什么问题,它不会给出任何结果?有什么建议吗?

**编辑:** “名称”映射如下:

"Name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },

使用

{
  "query": {
    "regexp": {
      "Name": "vi.*"
    }
  }
}

{
  "query": {
    "regexp": {
      "Name.keyword": "Vi.*"
    }
  }
}

根据您的映射

"Name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }

你有default analyzer

让它发挥作用:

{"query": {"regexp": {"Name": "vi.*" }}}

使用小写。

Vi.* 不工作的原因:

regexp 是一个 term 查询。这不是 full text search 查询。

Unlike full-text queries, term-level queries do not analyze search terms. Instead, term-level queries match the exact terms stored in a field.

因此,它期望索引中以 Vi 开头的术语不正确,因为它被分析并存储为 vi..

Reference