【问题标题】:How to rank ElasticSearch documents based on scores如何根据分数对 ElasticSearch 文档进行排名
【发布时间】:2021-07-22 14:50:56
【问题描述】:

我有一个包含数千个文档的 Elastic 搜索索引,每个文档代表一个用户。

每个文档都有一组字段(is_verified: boolean, country: string, is_creator: boolean),我还有另一个服务调用 ES search 来查找文档,我如何根据这些字段对检索到的文档进行排名?例如,匹配的经过验证的用户应该比未经验证的用户排在第一位。

在索引文档时是否有某种文档评分?如果可以,我可以根据我的标准对其进行修改吗?

我应该阅读/查看什么以了解如何在弹性搜索中排名。

谢谢

【问题讨论】:

    标签: elasticsearch search tf-idf


    【解决方案1】:

    您可以考虑在搜索查询中使用 Sort Api,在下面的示例中,我们使用了字段 country 的搜索并根据布尔字段 (is_verified) 对结果进行排序,您还可以在排序括号内添加其他布尔字段.

    GET /yourindexname/_search
    {
        "query" : {
            "match" : {
                "country": "Iceland"
            }
        },
        "sort" : [
          {
          "is_verified": {
            "order": "desc"
          }
        }
        ]
    }

    【讨论】:

      【解决方案2】:

      我猜 Mikael 提到的排序功能非常简单,应该涵盖您的用例。有关更多信息,请查看Elastic Doc。

      但如果您想进行真正花哨的排序,也许您可​​以使用布尔查询和不同的提升值来为每个匹配的字段设置所需的相关性。它试图提出一个现实生活中的例子,但老实说没有找到。为了完整起见,他关注 sn-p 应该让您了解如何获得与 sort API 相似的结果(但我仍然更喜欢使用 sort)。

      GET /yourindexname/_search
      {
        "query": {
          "bool": {
            "must": [
              {
                "match": {
                  "name": "Monica"
                }
              }
            ],
            "should": [
              {
                "term": {
                  "is_verified": {
                    "value": true,
                    "boost": 2
                  }
                }
              },
              {
                "term": {
                  "is_creator": {
                    "value": true,
                    "boost": 2
                  }
                }
              }
            ]
          }
        }
      }
      

      在索引文档时是否有某种文档评分?如果可以,我可以根据我的标准对其进行修改吗?

      我不会在索引时为文档分配固定分数,因为分数应该取决于查询。但是,如果您坚持为每个文档预先定义相关性,理论上您可以添加一个具有该值的字段relevancy 进行排序并稍后在查询中使用它:

      GET /yourindexname/_search
      {
          "query" : {
              "match" : {
                  "name": "Monica"
              }
          },
          "sort" : [
            {
              "relevancy": {
                "order": "desc"
              },
              "_score"
            }
          ]
      }
      

      【讨论】:

        猜你喜欢
        • 2017-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-12
        • 1970-01-01
        相关资源
        最近更新 更多