我正在尝试在以下文档中对数组的第一个对象内的字段进行排序 每个文档都有一个数组,我想检索按其首个对象排序的文档,然后按城市名称让其命名。在以下结果中,我想首先获取第三个文档,因为城市名称以“ L”开头(伦敦'),然后是第二个“ M”(“莫斯科”),然后是第三个“ N”(“ NYC”)
该结构是一个记录,该记录:
我想按第一个地址对文档进行排序。城市
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select>
<option class="lorem">1</option>
<option class="lorem">2</option>
</select>
这就是我索引的文档
get hello/_mapping
{
"hello": {
"mappings": {
"jack": {
"properties": {
"houses": {
"type": "nested",
"properties": {
"address": {
"properties": {
"city": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
}
}
}
}
答案 0 :(得分:0)
尝试一下(当然,如果字段可以为空,请在脚本中添加一些测试。请注意,这可能会非常慢,因为弹性不会为该值编制索引。添加主地址字段会更快(实际上更快))肯定并且是这样做的好方法。
{
"sort" : {
"_script" : {
"script" : "params._source.houses[0].address.city",
"type" : "string",
"order" : "asc"
}
}
}
您必须使用_source而不是doc [yourfield],因为您不知道按女巫顺序弹性存储数组。
编辑:测试字段是否存在
{
"query": {
"nested": {
"path": "houses",
"query": {
"bool": {
"must": [
{
"exists": {
"field": "houses.address"
}
}
]
}
}
}
},
"sort": {
"_script": {
"script" : "params._source.houses[0].address.city",
"type": "string",
"order": "asc"
}
}
}