当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch显式排序得分

游安康
2023-03-14

我有一个字段(比如color),它可以有四个值(红色、蓝色、黄色和绿色)之一。我想对它们进行排序,这样红色将有一个1的分数,所以所有的红色将在顶部,其次是蓝色,分数为2,黄色,分数为3等等。

如何为ElasticSearch中的排序分配这些手动评分?

共有1个答案

管玉堂
2023-03-14

您可以使用function_score特性,该特性将提供自定义评分功能。您可以用所需的查询替换match_all查询。

{
  "query": {
    "function_score": {
      "boost_mode": "replace",
      "query": {
        "match_all": {}
      },
      "functions": [
        {
          "filter": {
            "term": {
              "color": "red"
            }
          },
          "weight": 1
        },
        {
          "filter": {
            "term": {
              "color": "blue"
            }
          },
          "weight": 3
        },
        {
          "filter": {
            "term": {
              "color": "yellow"
            }
          },
          "weight": 2
        }
      ]
    }
  },
  "size": 20,
  "from": 0
}
 类似资料:
  • 问题内容: 我希望能够以一定顺序返回预输入项。例如,搜索应返回: 1)以搜索词para开头的建议应在顶部并按字母顺序排列 2)其余项目应按字母顺序显示在下方 Elasticsearch有可能吗? 更新资料 如果我希望输出像这样: 因此,所有包含前缀的术语都位于顶部,其他所有术语均按字母顺序排列。 问题答案: 这是我的建议(同样,您需要启用脚本): 更新 对于您的更新问题, 即使我希望再发表一则文章

  • 我试图实现分页和排序的HTTP请求使用Spring的分页。一切正常,除了我想明确声明可排序的属性,即资源属性,,。默认实现允许用户调用HTTP请求和排序结果的所有属性。但是,我想限制排序仅列和。 下面是我当前代码的示例 显而易见的解决方案是从可分页对象中检索排序对象,并像这样手动验证属性 } 我的问题是,在Spring中是否存在一种仅通过显式定义的属性进行排序的更简单方法。

  • 问题内容: 我正在尝试在Elasticsearch中进行嵌套排序,但到目前为止没有成功。 我的数据结构: 我想根据文档中第一作者的姓氏对文档进行排序。 使用的映射: 使用SearchRequestBuilder(JAVA)进行排序: 这行得通,但没有给出想要的结果(例如,首先是“叫卖”,然后是“罗杰”)。 我错过了什么吗?有没有办法表明Elasticsearch访问数组authorList的ind

  • 问题内容: 我有ElasticSearch 5,我想根据字段值进行排序。想象一下,具有类别(例如流派)的文档可能具有科幻,戏剧,喜剧等值,并且在进行搜索时,我想对值进行排序,以便首先出现喜剧,然后是科幻和戏剧。然后,我当然会按照其他条件在小组内订购。有人可以指出我该怎么做吗? 问题答案: 使用手动排序进行Elasticsearch排序 在可以根据字段的特定值分配顺序的情况下,这是可能的。 我已经使

  • 我试图在Elasticsearch中进行嵌套排序,但到目前为止还没有成功。 我的数据结构: 我想根据文档中第一作者的姓氏对文档进行排序。 使用SearchRequestBuilder(JAVA)进行排序: 这是有效的,但不能给出想要的结果(例如,首先是“霍金”,然后是“罗杰”)。 我是不是漏掉了什么?是否有一种方法可以指示Elasticsearch访问数组authorlist的index=0?是否

  • 问题内容: 我想按top_hit的doc.score订购存储桶。我当前的实现如下。 这是错误的,因为存储桶是按其最高得分而不是其source_priority文档最高得分排序的。有办法解决这个问题吗? 问题答案: 我遇到了同样的问题,而解决问题的方法是在docs得分上引入子汇总。然后在我的外部聚合中,我按max_score聚合的名称排序。 我遵循了此链接上的指示: http://www.elast