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

标签 python elasticsearch elasticsearch-dsl elasticsearch-query

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

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

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

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

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

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

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

最佳答案

根据你的映射

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

你有default analyzer

让它工作:

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

使用小写。

Vi.* 不工作的原因:

regexp 是一个 term 查询。它不是全文搜索查询。

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

关于python - 如何在 python 中使用 elasticsearch 编写一个简单的正则表达式查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62527076/

相关文章:

python - 根据符号递增数字

elasticsearch - 带有 Elasticsearch 的 NoSQL(Mongo、DynaoDB)与单个 Elasticsearch

elasticsearch - Elasticsearch将一个数组与另一个数组匹配

python - 如何在 Python 中发送 xml 请求和接收 xml 响应?

python - 为什么这些 numpy 操作不等效,我该如何解决这个问题?

python - 添加记录器导致can't pickle _thread.RLock objects错误

elasticsearch - 如何在 Elasticsearch 中用空格分隔和不带空格进行搜索

elasticsearch - 在Google Cloud Kubernetes上运行elasticsearch以CrashLoopBackOff结尾

elasticsearch - Elastic Search DSL中扫描和执行功能之间的区别

elasticsearch - 当关键字类型为ElasticSearch中的文本时如何使用术语查询