Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x elasticsearch的Python客户端在regexp支持方面存在问题_Python 3.x_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Python 3.x,elasticsearch" /> elasticsearch,Python 3.x,elasticsearch" />

Python 3.x elasticsearch的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

elasticsearch的python客户端与regexp的工作方式不同。在附带的带有单个单词“platform”的查询示例中,它运行良好。一旦我添加另一个单词,如“java平台”,它将返回0次点击。这同样适用于大写字母的单词。想知道python客户端是否正确支持regexp?有什么问题吗

我尝试过在字符串前后使用。*来检查编码是否有问题,但没有效果。我需要更复杂的正则表达式,但我没有成功地使这个琐碎的例子正常工作

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,然后是平台(它们必须相邻)。

请添加索引的映射。