如何在 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
}
}
}
让它发挥作用:
{"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..
我正在尝试使用 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
}
}
}
让它发挥作用:
{"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..