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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM