zoukankan      html  css  js  c++  java
  • ElasticSearch权威指南学习(排序)

    排序方式

    1. 相关性排序

      • 默认情况下,结果集会按照相关性进行排序 -- 相关性越高,排名越靠前。
      • 相关性分值会用_score字段来给出一个浮点型的数值,所以默认情况下,结果集以_score进行倒序排列。
    2. 字段值排序

      • 使用 sort 参数进行排序:
      GET /_search
      {
          "query" : {
              "filtered" : {
                  "filter" : { "term" : { "user_id" : 1 }}
              }
          },
          "sort": { "date": { "order": "desc" }}
      }
      
      • 你会发现这里有两个不同点:
      "hits" : {
          "total" :           6,
          "max_score" :       null, // 没有最高分了
          "hits" : [ {
              "_index" :      "us",
              "_type" :       "tweet",
              "_id" :         "14",
              "_score" :      null, // 没有分了
              "_source" :     {
                   "date":    "2014-09-24",
                   ...
              },
              "sort" :        [ 1411516800000 ] //排序条件时间转成了毫秒
          },
          ...
      }
      
    3. 默认排序

      • 指定要排序的字段名称:
      "sort": "number_of_children"
      

      字段值默认以顺序排列,而 _score 默认以倒序排列。

    4. 多级排序

      • 如果我们想要合并一个查询语句,并且展示所有匹配的结果集使用第一排序是date,第二排序是 _score:
      GET /_search
      {
          "query" : {
              "filtered" : {
                  "query":   { "match": { "tweet": "manage text search" }},
                  "filter" : { "term" : { "user_id" : 2 }}
              }
          },
          "sort": [
              { "date":   { "order": "desc" }},
              { "_score": { "order": "desc" }}
          ]
      }
      
      • 结果集会先用第一排序字段来排序,当用用作第一字段排序的值相同的时候, 然后再用第二字段对第一排序值相同的文档进行排序,以此类推。
    5. 字符串参数排序

      • 字符查询也支持自定义排序,在查询字符串使用sort参数就可以:
      GET /_search?sort=date:desc&sort=_score&q=search
      
    6. 为多值字段排序

      • 在为一个字段的多个值进行排序的时候, 其实这些值本来是没有固定的排序的-- 一个拥有多值的字段就是一个集合, 你准备以哪一个作为排序依据呢?
      • 对于数字和日期,你可以从多个值中取出一个来进行排序,你可以使用min, max, avg 或 sum这些模式。
      • 比说你可以在 dates 字段中用最早的日期来进行排序:
      "sort": {
          "dates": {
              "order": "asc",
              "mode":  "min"
          }
      }
      

    相关性

    1. 查询语句会为每个文档添加一个 _score 字段。评分的计算方式取决于不同的查询类型
    2. 理解评分标准
      • ElasticSearch 在 每个查询语句中都有一个explain参数,将 explain 设为 true 就可以得到更详细的信息
      GET /_search?explain //xplain 参数可以让返回结果添加一个 _score 评分的得来依据。
      {
         "query"   : { "match" : { "tweet" : "honeymoon" }}
      }
      

    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
    如果,您希望更容易地发现我的新博客,不妨点击一下【关注我】。

    我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【老梁】!

  • 相关阅读:
    数据库知识点
    hibernate5--主键生成策略
    hibernate5学习知识点小结
    hibernate5小案例讲解
    hibernate5新手跳过的坑
    strut2_struts.xml文件配置知识点汇集
    在使用ElementUI的JSP项目中,集成富文本编辑器QuillEditor
    如何在JSP中使用VUE/elementUI
    Java定时任务--Timer和TimerTask
    SecureFX的破解问题
  • 原文地址:https://www.cnblogs.com/sky-chen/p/9964105.html
Copyright © 2011-2022 走看看