elasticsearch子串查询的一个特例
A particular case of elasticsearch substring query
我想使用 elasticsearch 在文档列中搜索子字符串。文档列包含恰好 255 个字符长的字符串。在该列中,我想搜索指定位置内出现的子字符串。例如我想搜索位于字符串的字符位置 5-7 的子字符串“ABC”。因此 xxxxABCxxxxx... 是一个有效答案,但 xxABCxxxxx... 不是(考虑索引从 1 开始)。
通配符查询可以搜索子串,但不能搜索指定的固定位置。
{
"query": {
"wildcard": {
"String Name": {
"value": "*ABC*"
}
}
}
}
如何在 python 中制定此查询?
您可以使用 regexp
过滤器来实现这一点吗?
from elasticsearch import Elasticsearch
es = Elasticsearch(...)
resp = es.search(
index="index-name",
body={
"query": {
"regexp": {
"String Name": {
"value": "^.{4}ABC"
}
}
}
}
)
print(resp)
您必须启用 search.allow_expensive_queries
才能启用 regexp
过滤器。
<披露:我是 Python Elasticsearch 客户端的维护者并受雇于 Elastic>
我想使用 elasticsearch 在文档列中搜索子字符串。文档列包含恰好 255 个字符长的字符串。在该列中,我想搜索指定位置内出现的子字符串。例如我想搜索位于字符串的字符位置 5-7 的子字符串“ABC”。因此 xxxxABCxxxxx... 是一个有效答案,但 xxABCxxxxx... 不是(考虑索引从 1 开始)。
通配符查询可以搜索子串,但不能搜索指定的固定位置。
{
"query": {
"wildcard": {
"String Name": {
"value": "*ABC*"
}
}
}
}
如何在 python 中制定此查询?
您可以使用 regexp
过滤器来实现这一点吗?
from elasticsearch import Elasticsearch
es = Elasticsearch(...)
resp = es.search(
index="index-name",
body={
"query": {
"regexp": {
"String Name": {
"value": "^.{4}ABC"
}
}
}
}
)
print(resp)
您必须启用 search.allow_expensive_queries
才能启用 regexp
过滤器。
<披露:我是 Python Elasticsearch 客户端的维护者并受雇于 Elastic>