如何根据分数对 ElasticSearch 文档进行排名

How to rank ElasticSearch documents based on scores

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

每个文档都有一组字段(is_verified:布尔值,国家:字符串,is_creator:布尔值),我还有另一个服务调用 ES 搜索来查找文档,我怎么能根据这些字段对检索到的文档进行排名?例如,具有匹配项的经过验证的用户应该比未经过验证的用户排在第一位。

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

我应该read/look了解如何在弹性搜索中排名。

谢谢

您可以考虑在搜索查询中使用排序 Api,在下面的示例中,我们使用字段国家/地区进行搜索并根据布尔字段 (is_verified) 对结果进行排序,您也可以在排序括号内添加其他布尔字段。

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

我想 Mikael 提到的排序功能非常简单,应该涵盖您的用例。检查 Elastic Doc 了解更多信息。

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

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

is there some kind of document scoring while indexing the documents ? if yes can i modify it based on my criteria ?

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

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