簡體   English   中英

ElasticSearch 排序數組大小不一致的結果

[英]ElasticSearch sort array size incoherent results

我正在嘗試按 ElasticSearch 7.1 中的數組大小排序。

我在沒有創建任何自定義映射的情況下索引了以下數據:

{
  "myarray": [{
    "field": {
      "value": "test"
    }
  }]
}

當我查看映射時,它給了我:

{
  "properties": {
    "myarray": {
      "properties": {
        "field": {
          "properties": {
            "value": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                }
              }
            }
          }
        }
      }
    }
  }
}

現在我想查詢索引並按myarray中最多的元素進行排序。 我試過做:

{
  "sort": {
    "_script": {
        "type": "number",
        "order": "desc",
        "script": "doc.containsKey('myarray.field.value') ? doc['myarray.field.value'].values.size() : 0"
    }
  }
}

這給了我一個錯誤,例如Fielddata is disabled on text fields by default.[...] Alternatively use a keyword field instead 所以我嘗試

{
  "sort": {
    "_script": {
        "type": "number",
        "order": "desc",
        "script": "doc.containsKey('myarray.field.value.keyword') ? doc['myarray.field.value.keyword'].values.size() : 0"
    }
  }
}

這給了我錯誤Illegal list shortcut value [values]. . 所以然后我嘗試了(刪除values關鍵字):

{
  "sort": {
    "_script": {
        "type": "number",
        "order": "desc",
        "script": "doc.containsKey('myarray.field.value.keyword') ? doc['myarray.field.value.keyword'].size() : 0"
    }
  }
}

它可以工作,但是我有一些排序很好的結果,突然一個應該在頂部的元素出現在中間。 那是因為它是按字符串的value的長度而不是myarray的長度排序的嗎?

這是因為文本類型映射不提供排序,要添加排序必須 map 帶有關鍵字類型的數組字段。 有關更多信息和語法,請參閱: https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-request-sort.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM