我正在尝试在 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
}
}
}
让它工作:
{"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..
关于python - 如何在 python 中使用 elasticsearch 编写一个简单的正则表达式查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62527076/