具有通配符的弹性排序结果。"*find*"条款的数量



我遇到了弹性结果排序与布尔型查询(一种通配符(相结合的严重问题。

比方说我们有一篇博客文章;内容";。每个帖子都包含一些关于龙的信息。所有这些单词的组合";龙人。。德拉戈。迷你龙&";。大量文本。

并且我们需要通过字符串"*rago*"来搜索它。

理想情况下,这意味着我们需要匹配所有文档,这些文档包含*rago*的所有组合

im在之前使用simple_query

"query_string":{"default_field":"内容";,"查询":"*rago*"}

我对结果很满意。但是排序。。。没有考虑出现的次数。排序忽略了"*rago*"在每个文档的内容字段中出现的次数。

如何解决?

我花了几天时间在谷歌上搜索。。。术语向量。。字段数据。脚本等,但无论如何,似乎没有任何问题。例如,排序适用于匹配查询,但随后我需要搜索";龙;不适用于"*rago*"

但是对于建议搜索,我们使用>我们需要能够通过输入字符串的任何部分进行搜索。

非常感谢您的帮助。

默认情况下,通配符查询被重写为constant_score查询

这意味着为排名计算的匹配分数弹性搜索将忽略term frequency(查询项在搜索字段中的出现次数(。

此外,elasticsearch并不匹配"*rago*",而是匹配通配符表达式的唯一索引术语列表(在您的案例中,在所有博客文章中(:

Pseudocode: MATCH ANY_OF("dragon", "dragonians", "minidragon", "drago", ...)

如果您想要一篇使用"dragon"两次的博客文章超过使用"minidragon"一次的博客帖子(对于查询"*rago*"(,那么将参数"rewrite": "scoring_boolean"添加到您的查询中。

请参阅此处的注意事项和其他重写选项:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-term-rewrite.html

相关内容

  • 没有找到相关文章

最新更新