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

时间:2020-06-22 04:34:21

标签: python elasticsearch substring elasticsearch-dsl elasticsearch-query

我想使用elasticsearch在文档列中搜索子字符串。文档列包含的字符串长度恰好为255个字符。在该列中,我想搜索指定位置内子字符串的出现。例如我想搜索位于字符串的字符位置5-7的子字符串“ ABC”。因此xxxxABCxxxxx ...是有效答案,而xxABCxxxxx ...不是(考虑索引从1开始)。

通配符查询可以搜索子字符串,但不能在指定的固定位置进行搜索。

{
    "query": {
        "wildcard": {
           "String Name": {
              "value": "*ABC*"
           }
        }
    }
}

如何在python中制定此查询?

1 个答案:

答案 0 :(得分:1)

您可以使用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>雇用