ElasticSearch排序数组大小不一致的结果



我正在尝试在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的长度?

这是因为text类型映射不提供排序,要添加排序,必须用关键字映射数组字段。类型。更多信息和语法请参考:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-request-sort.html

最新更新