如何使用ElasticSearch同时对多个字段进行排序?

68bkxrlz  于 2022-11-28  发布在  ElasticSearch
关注(0)|答案(1)|浏览(273)

我有一个通过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应该有我想要的东西。查询本身给出了最相关的结果,但通常是非常不受欢迎的结果。

a0zr77ik

a0zr77ik1#

你可以尝试使用Function Score Query和流行度字段作为字段值因子,这样你就可以用流行度值来影响查询结果的得分。谁更流行,谁就更相关。

相关问题