• ElasticSearch中的sort排序和filedData作用


    • 默认情况下,ElasticSearch 会根据算分进行排序;
    • 可以使用 sort API 指定排序的规则;
    POST /kibana_sample_data_ecommerce/_search
    {
      "size": 5,
      "query": {
        "match_all": {
    
        }
      },
      "sort": [
        {"order_date": {"order": "desc"}}
      ]
    }

    在 Elasticsearch 中, 相关性得分 由一个浮点数进行表示,并在搜索结果中通过 _score 参数返回
    默认排序是 _score 降序

    有时,相关性评分对你来说并没有意义。例如,下面的查询返回所有 user_id 字段包含 1 的结果:

    多级排序

    排序条件的顺序是很重要的。结果首先按第一个条件排序,仅当结果集的第一个 sort 值完全相同时才会按照第二个条件进行排序,以此类推。

    GET /_search


    GET /_search
    {
        "query" : {
            "bool" : {
                "must":   { "match": { "tweet": "manage text search" }},
                "filter" : { "term" : { "user_id" : 2 }}
            }
        },
        "sort": [
            { "date":   { "order": "desc" }},
            { "_score": { "order": "desc" }}
        ]
    }

    字符串排序与多字段

    被解析的字符串字段也是多值字段, 但是很少会按照你想要的方式进行排序。
    如果你想分析一个字符串,如 fine old art , 这包含 3 项。
    我们很可能想要按第一项的字母排序,然后按第二项的字母排序,诸如此类,
    但是 Elasticsearch 在排序过程中没有这样的信息。。一个字符串如果进行分词之后,如果你对字符串进行排序的话,他的排序规则就不想日期、数字那样是固定的,如果想按照一个字符串作为一个整体进行排序,不进行分词之后的排序,可以做下面的操作

    一个简单的方法是用两种方式对同一个字符串进行索引,这将在文档中包括两个字段:
    analyzed 用于搜索,
    not_analyzed 用于排序

    "tweet": {
        "type":     "string",
        "analyzer": "english"
    }
    将上面的转为下面的格式
    "tweet": { 
        "type":     "string",
        "analyzer": "english",
        "fields": {
            "raw": { 
                "type":  "string",
                "index": "not_analyzed"
            }
        }
    }

    其中字段tweet字段进行查询操作会进行分词,tweet.raw字段不进行分词,作为sort操作,整个字符串不进行分词整个字符串进行排序,但是将文本字段用于聚合,排序需要开启fielddata字段

    https://segmentfault.com/a/1190000016645964

    tweet
  • 相关阅读:
    用require.js封装原生js轮播图
    最全状态码
    常用DOM结构方法总结
    CSS浮动、绝对、相对定位
    盒模型
    构造函数、原型和实例的关系
    Android测试网络是否连接
    Android第一天
    JQuery图片切换动画效果
    Hibernate增删查改语句
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/13021110.html
Copyright © 2020-2023  润新知