我有一个通过PHP客户端(版本8.3)实现的ElasticSearch,如下所示:github。
目前我使用sort函数首先根据ElasticSearch本身提供的相关性分数对结果进行排序,然后根据某条记录的受欢迎程度进行排序。但这并不能给予想要的结果。目前排序是这样进行的:
[
"index" => "products"
"body" => [
"query" => [
"bool" => [
"should" => [
0 => [
"match" => [
"title" => [
"query" => "audi a22"
"fuzziness" => "2"
"minimum_should_match" => "1"
]
]
]
]
]
]
"sort" => [
"_score" => [
"order" => "desc"
]
"popularity" => [
"order" => "desc"
]
]
]
]
我在考虑创建某种运行时字段,它会考虑相关性(via _score)和受欢迎程度,并根据该值对它们进行排序。这似乎过于复杂,但ElasticSearch是否提供了另一种更好的解决方案?
我尝试了上面的查询,并使用PHP对结果进行了提升和排序,但我觉得ElasticSearch应该有我想要的东西。查询本身给出了最相关的结果,但通常是非常不受欢迎的结果。
1条答案
按热度按时间a0zr77ik1#
你可以尝试使用Function Score Query和流行度字段作为字段值因子,这样你就可以用流行度值来影响查询结果的得分。谁更流行,谁就更相关。