elasticsearch - 对包含所有查询词的文档给予更高的分数
问题描述
我在弹性搜索中得分有问题。当用户输入一个包含 3 个词的查询时,有时一个包含两个词的文档会超过包含所有三个词的文档。例如,如果用户输入“elasticsearch query tutorial”,我希望包含所有这些单词的文档得分高于其中包含大量“tutorial”和“elasticsearch”术语的文档。
PS:我在查询中使用了 minimum should match 和 shingls。他们也让排名变得更好,他们并没有完全解决这个问题。我需要 lucene 的实用评分功能中的查询协调之类的东西。BM-25有弹性吗?
解决方案
可能的解决方案之一是使用函数 score:
{
"query": {
"function_score": {
"query": { "match_all": {} },
"functions": [
{
"filter": { "match": { "title": "elasticserch" } },
"weight": 1
},
{
"filter": { "match": { "title": "tutorial" } },
"weight": 1
}
],
"score_mode": "sum"
}
}
}
在这种情况下,对于匹配更多的文档,您显然会有更好的位置。但是,这将完全忽略 TF-IDF 或任何其他参数。
推荐阅读
- r - 使用带有多面板图的插图(基本图)
- php - 原生 PHP 会话值在 Codeigniter 中丢失
- html - 如何以角度设置标签的宽度?
- python - 不明白'if product & 1'
- clojure - 为什么这个程序不能在 Cursive 中运行?
- php - 从 MySql 获取 BLOB 图像到 CSS 内联样式
- android - 使用 Room 从 ChildActivity 中单击按钮后,如何从数据库中从数据库中加载的 RecyclerView 中删除对象列表
- jms - 根据用户属性使用 wlst 删除消息
- python - 使用 pandas 比较两个具有不同行值和坐标的 Excel 电子表格
- javascript - 如何将字符串转换为打字稿中的对象