2015-11-27 15 views
3

有一个存储数组的字段。我想根据该字段的数组长度对文档进行排序。根据elasticsearch中数组的长度排序

样本文件

document 1 = { 
"countryCodes" : ["US","UK","UA","IN"] 
} 

document 2 ={ 
"countryCodes" : ["FR","SU","UG","UK","US"] 
} 

于是,同比排序,结果应该显示文档2,然后再记录1.

回答

3

这里有两个选项。

  1. 在映射中使用令牌计数类型作为多字段 - 这样另一个字段将存储为具有数组长度的多字段字段。你可以了解更多关于它here
  2. 脚本 - 同样可以使用脚本来实现。

    { “排序”:{ “_script”:{ “脚本”: “DOC [ 'countryCodes'] values.size()” } } }

2

这样做,这将是最简单的方法也index包含另一场数组的长度,然后在该字段上排序。

另一种方法是使用script-based sorting并使用groovy返回数组的长度。

{ 
    "query": { 
    "match_all": {} 
    }, 
    "sort": { 
    "_script": { 
     "script": "doc.countryCodes.values.size()" 
    } 
    } 
} 

此外请务必登录enable dynamic scripting才能正常工作。