Python 3.x elasticsearch的Python客户端在regexp支持方面存在问题
elasticsearch的python客户端与regexp的工作方式不同。在附带的带有单个单词“platform”的查询示例中,它运行良好。一旦我添加另一个单词,如“java平台”,它将返回0次点击。这同样适用于大写字母的单词。想知道python客户端是否正确支持regexp?有什么问题吗 我尝试过在字符串前后使用。*来检查编码是否有问题,但没有效果。我需要更复杂的正则表达式,但我没有成功地使这个琐碎的例子正常工作Python 3.x elasticsearch的Python客户端在regexp支持方面存在问题,python-3.x,elasticsearch,Python 3.x,elasticsearch,elasticsearch的python客户端与regexp的工作方式不同。在附带的带有单个单词“platform”的查询示例中,它运行良好。一旦我添加另一个单词,如“java平台”,它将返回0次点击。这同样适用于大写字母的单词。想知道python客户端是否正确支持regexp?有什么问题吗 我尝试过在字符串前后使用。*来检查编码是否有问题,但没有效果。我需要更复杂的正则表达式,但我没有成功地使这个琐碎的例子正常工作 es = Elasticsearch([{'host': 'localhost
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中的两种搜索模式:使用每个单词的标记进行全文搜索,以及对整个字段值进行索引的关键字搜索。因此,要使用regexp跨词搜索,我应该使用关键字模式,如中所示:
result = es.search(index='mydoc', size =34,body=
{
"query": {
"bool": {
"must": [
{ "match": { "Title": "java platform" }}
],
"filter": [
{ "regexp": { "Title.keyword": ".*[j,J]ava platform.*" }}
]
}
}
})
匹配只是为了加快搜索速度,因为regexp开头包含。*。匹配还将匹配平台java和任意数量的单词,而regexp将匹配特定顺序,首先是java,然后是平台(它们必须相邻)。请添加索引的映射。