gpt4 book ai didi

python-3.x - 用于Elasticsearch的Python客户端的正则表达式支持有问题

转载 作者:行者123 更新时间:2023-12-02 22:27:49 25 4
gpt4 key购买 nike

用于Elasticsearch的python客户端无法与regexp一起正常工作。在附带单词“platform”的查询示例中,它可以正常工作。一旦添加了另一个词(例如“java platform”),它将返回0次匹配。大写字母的单词也一样。想知道python客户端是否正确支持regexp吗?可能是什么问题?

我在字符串之前和之后都尝试过。*,以检查编码是否有问题,但无济于事。我需要更复杂的regex表达式,但无法成功使这个琐碎的案例正常工作。

es = Elasticsearch([{'host': 'localhost', 'port': 9200}])
result = es.search(index="mydoc", body={"query": {"regexp" : {"Title" : "platform"}}})
result = es.search(index="mydoc", body={"query": {"regexp" : {"Title" : "java platform"}}})

没有错误。问题是简单情况下的命中率为0,例如在第二个示例中,其中索引文档包含字符串。

最佳答案

问题源于Elasticsearch中的两种搜索模式:对每个单词使用 token 的全文搜索,以及对整个字段值进行索引的关键字搜索。因此,要使用正则表达式跨单词搜索,我应该采用如下所示的关键字模式:

result = es.search(index='mydoc', size =34,body=
{
"query": {
"bool": {
"must": [
{ "match": { "Title": "java platform" }}
],
"filter": [
{ "regexp": { "Title.keyword": ".*[j,J]ava platform.*" }}
]
}
}
})

该匹配项只是为了加快搜索速度,因为正则表达式开头包含。*。匹配项还将匹配平台Java,并且之间有任意数量的单词,而regexp则匹配特定顺序,首先是Java,然后是平台(它们必须相邻)。

关于python-3.x - 用于Elasticsearch的Python客户端的正则表达式支持有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56207755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com