我试图在elasticsearch中对嵌套字段进行排序,但在按升序排序时,它总是在排序列表的顶部显示带有空值嵌套字段的文档。我希望排序(升序和降序),并希望空值嵌套字段文档出现在排序列表的末尾。
这是我正在使用的排序查询:
{
"query": {
"match_all": {}
},
"sort": {
"_script": {
"type": "string",
"order": "asc",
"script": {
"lang": "painless",
"source": "def val=params['_source'].tags; if(val==null){return '';}else{return params['_source'].tags} "
}
}
}
}
下面是我应用的与嵌套的“标记”字段相关的映射:
"tags": {
"type": "nested",
"properties": {
"tag": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
},
"analyzer": "index_analyzer",
"search_analyzer": "search_analyzer"
}
}
}
样品有效载荷:
"tags": [
{
"tag": "check"
},
{
"tag": "production"
},
{
"tag": "test"
}
]
由于标记是一个嵌套属性,您需要对其应用嵌套排序,并且要使没有标记的文档在结果列表中最后一个,您只需添加以使用缺少的属性。
注意:我们在标签的子字段关键字中排序,因为不需要分析排序关键字。
下面是示例查询:
{
"query": {
"match_all": {}
},
"sort": [
{
"tags.tag.keyword": {
"order": "asc",
"missing": "_last",
"nested": {
"path": "tags"
}
}
}
]
}
由于您是在多值文本字段上排序,我建议您查看有关排序模式的排序文档部分,以更好地了解elasticsearch在这种情况下的行为。
希望有帮助!
Sup社区。我有个问题。我正在使用Elasticsearch 6.4 我的数据结构的一部分: 我需要得到按成本排序的文档desc,我需要排序dirs字段中的值date_by字段与nulls-first。 如何对嵌套字段内的值进行排序,而不按此嵌套字段对文档进行排序?
问题内容: 我正在使用以下映射: 文件范例: 我的问题是如何检索此文档并按“日期”对嵌套对象“注释”进行排序?结果: 问题答案: 您需要在inner_hits上对进行排序。这将为您提供所需的输出 我使用的源过滤得到的只有作为将被检索里面,但你能避免,如果你想 是5,因为默认值为3,并且在给定的示例中我们有4个对象。 希望这可以帮助!
我将Elasticsearch 6与PHP结合使用。 我的文档有一个嵌套字段,如下所示: 基本上每个文档都有很多价格,但我知道每个文档只有一个价格与过滤器/查询匹配。 我用它来搜索和排序,改编自这里的教程:https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-sorting.html(对PHP数组格式表示抱歉): 我得
问题内容: 我有以下字典。 如何根据排序。因此,结果字典将如下所示。 问题答案: 从订购的项目元组列表构造一个: (假设Python 3,在Python 2中应该做同样的事情。)
问题内容: 我正在尝试在ElasticSearch中运行类似的字段查询: 意思是我正在尝试查找所有文档,其中产品名称在这种情况下是’milk’的子字符串。 我该怎么做? 问题答案: 我会使用一个使用ngrams的自定义分析器。首先创建一个像这样的索引: 然后,您可以索引一些数据: 最后,您可以像这样搜索: 然后您将获得前两个文档,
问题内容: 可以说我有以下映射: 然后,我对父文档进行“ _geo_distance”排序,并能够对“ site.point”上的文档进行排序。但是,我还希望嵌套位置在父文档中按“ _geo_distance”排序。 这可能吗?如果是这样,怎么办? 问题答案: 不幸的是,没有(至少现在还没有)。 ElasticSearch中的查询仅标识与该查询匹配的文档以及它们的匹配程度。 要了解嵌套文档的用途,