gpt4 book ai didi

sorting - 对嵌套数组进行排序,然后返回前10个弹性数组

转载 作者:行者123 更新时间:2023-12-02 22:19:12 26 4
gpt4 key购买 nike

我在 flex 索引中有一个嵌套的数据类型,并希望对所有返回结果进行升序排序。我尝试了以下方法:

GET indexname/_search
{
"_source" : ["m_iTopicID", "m_iYear", "m_Companies"],
"query": {
"terms":{
"m_iTopicID": [11,12,13]
}
},
"sort" : [
{
"m_Companies.value" : {
"order" : "asc",
"nested_path" : "m_Companies"
}
}
]
}

索引的映射如下:
{
"indexname": {
"mappings": {
"topicyear": {
"properties": {
"m_Companies": {
"type": "nested",
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"value": {
"type": "float"
}
}
},
"m_People": {
"type": "nested",
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"value": {
"type": "float"
}
}
},
"m_Places": {
"type": "nested",
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"value": {
"type": "float"
}
}
},
"m_Subtopics": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"m_fActivation": {
"type": "float"
},
"m_iDocBodyWordCnt": {
"type": "long"
},
"m_iNodeID": {
"type": "long"
},
"m_iTopicID": {
"type": "long"
},
"m_iYear": {
"type": "long"
},
"m_szDocID": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"m_szDocTitle": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"m_szGeo1": {
"type": "nested",
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"value": {
"type": "float"
}
}
},
"m_szSourceType": {
"type": "nested",
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"value": {
"type": "float"
}
}
},
"m_szSrcUrl": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"m_szTopicNames": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}

这将返回ID为11、12或13的所有主题以及m_Companies的列表...,但是列表不会按value字段升序排列。

然后,我只想返回每个列表的前10名。因此,列表不会像当前一样返回数百,而仅返回n。如果我无法实现此选项,那么我将使用javascript splice(0,10)在前端获得前10名,但是如果elastic可以为我做到这一点将很好。

提前致谢。

最佳答案

由于您在主/父级查询中提供了排序,因此将仅对父/根文档进行排序。正如您可能已经观察到的结果所示,文档以m_Companes.value的最小值排序。

要对每个文档的嵌套文档进行排序,您必须深入嵌套文档并应用排序,因为m_Companies是父文档中的子文档。您必须使用嵌套的inner_hits,然后对inner_hits进行排序。

这个github问题很好地说明了我试图解释的内容,因为这是如何基于嵌套文档中的值仅对父/根文档进行排序的。

由于您希望所有文档都嵌套,因此可以让嵌套查询使用match_all获取所有嵌套文档并根据值字段进行排序。

您可以使用以下查询

{
"_source": ["m_iYear", "m_Companies"],
"query": {
"bool": {
"must": [{
"terms": {
"m_iTopicID": [11, 12, 13]
}
},
{
"nested": {
"path": "m_Companies",
"query": {
"match_all": {}
},
"inner_hits": {
"sort": [{
"m_Companies.value": "asc"
}]
}
}
}
]
}
},
"sort": [{
"m_Companies.value": {
"order": "asc",
"nested_path": "m_Companies"
}
}]
}

希望这可以帮助,
谢谢

关于sorting - 对嵌套数组进行排序,然后返回前10个弹性数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43426444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com