如何解决出现通配符的弹性排序结果 “*查找*”字词的数量
弹性结果排序与布尔类型的查询(一种通配符)相结合,我遇到了令人讨厌的问题。
假设我们有包含“内容”字段的博客文章。 每个帖子都包含一些关于龙的信息。加上“dragonians..drago.minidragon.”这个词的所有组合。大量文字。
我们需要通过字符串 "*rago*"
搜索它。
理想情况下,这意味着我们需要匹配包含 *rago*
的所有组合的所有文档
我之前使用过 simple_query
“查询字符串”:{
"default_field": "内容",“查询”:"*rago*"
}
我对结果很满意。但排序......没有考虑发生的数量。
排序会忽略 "*rago*"
在每个文档的内容字段中出现的次数。
如何解决?
我花了几天时间在谷歌上搜索...术语向量...字段数据。脚本等,但无论如何似乎与问题无关。
例如,排序适用于匹配查询,但随后我需要搜索“dragon”而不是 "*rago*"
但是对于我们使用的建议搜索,我们需要能够通过输入字符串的任何部分进行搜索。
非常感谢任何形式的帮助。
解决方法
通配符查询默认重写为 constant_score
查询
这意味着 elasticsearch 为排名计算的匹配分数将忽略 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。