gpt4 book ai didi

sorting - 如何按score + boost + field对 Elasticsearch 结果进行排序?

转载 作者:行者123 更新时间:2023-11-29 02:51:29 26 4
gpt4 key购买 nike

给定一个包含标题、作者和描述的书籍索引,我希望搜索结果按以下方式排序:

  1. 所有符合标题的图书按下载量排序(一个数值)
  2. 所有与作者匹配的书籍按下载量排序
  3. 所有符合描述的书籍按下载量排序

我使用下面的搜索查询,但问题是每个条目都有不同的分数,因此按下载量排序无关紧要。

例如当搜索词是“排序”时 - 标题:“ Elasticsearch 中的排序”将比标题:“postgresql 排序很棒”得分更高(因为单词位置)。

query = QueryBuilders.multiMatchQuery(queryString, "title^16", "author^8", "description^4")

elasticClient.prepareSearch(Index)
.setTypes(Book)
.setQuery(query)
.addSort(SortBuilders.scoreSort())
.addSort(SortBuilders.fieldSort("downloads").order(SortOrder.DESC))

我如何构造我的查询以便获得所需的图书排序?

我使用标准分析器,我需要分析搜索查询,我还必须处理多词搜索查询字符串。

谢谢。

最佳答案

您在这里需要的是一种基于三个加权字段和一个数字字段计算分数的方法。排序将从两者获得的分数求和,因此如果其中一个太大,它将取代另一个。因此,更好的方法是使用匹配获得的分数进行多次下载。所以我会推荐功能分数查询 -

{
"query": {
"function_score": {
"query": {
"multi_match": {
"query": "sorting",
"fields": [
"title^16",
"author^8",
"description^4"
]
}
},
"function": [
{
"field_value_factor": {
"field": "downloads"
}
}
],
"boost_mode": "multiply"
}
}
}

这将根据所有三个字段计算分数。然后将该分数与下载字段中的值相乘以获得最终分数。 multiply boost_mode 决定如何将函数计算的值与查询计算的分数组合在一起。

关于sorting - 如何按score + boost + field对 Elasticsearch 结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27702978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com