python - Elasticsearch子字符串查询的一种特殊情况

标签 python elasticsearch substring elasticsearch-dsl elasticsearch-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雇用>

关于python - Elasticsearch子字符串查询的一种特殊情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62507506/

相关文章:

python - 在python中打印usb的挂载点时出现问题

python - 使用 pynacl (Ed25519) 导入私钥对文本进行签名

amazon-web-services - Logstash无法将日志推送到ES

node.js - 如何使用多个变量创建搜索并使它们不是必需的

asp.net - 子字符串的多个长度?

python - 如何从 Pandas DataFrame 的每一行中选择特定列?

python - django-pipeline - 页面加载真的很慢

elasticsearch - ElasticSearch-亲子关系是最好的方法吗?

java - 字符串索引越界? (Java,子串循环)

ios - NSString子字符串