[英]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.