可以在ElasticSearch中对嵌套文档进行排序吗?
可以说我有以下映射:
"site": { "properties": {
"title": { "type": "string" },
"description": { "type": "string" },
"category": { "type": "string" },
"tags": { "type": "array" },
"point": { "type": "geo_point" }
"localities": {
type: 'nested',
properties: {
"title": { "type": "string" },
"description": { "type": "string" },
"point": { "type": "geo_point" }
}
}
}
}
然后,我对父文档进行“ _geo_distance”排序,并能够对“ site.point”上的文档进行排序。但是,我还希望嵌套位置在父文档中按“
_geo_distance”排序。
这可能吗?如果是这样,怎么办?
回答:
不幸的是,没有(至少现在还没有)。
ElasticSearch中的查询仅标识与该查询匹配的文档以及它们的匹配程度。
要了解嵌套文档的用途,请考虑以下示例:
{ "title": "My post",
"body": "Text in my body...",
"followers": [
{
"name": "Joe",
"status": "active"
},
{
"name": "Mary",
"status": "pending"
},
]
}
上面的JSON一旦在ES中建立索引,在功能上就等同于以下内容。注意该followers
字段是如何展平的:
{ "title": "My post",
"body": "Text in my body...",
"followers.name": ["Joe","Mary"],
"followers.status": ["active","pending"]
}
搜索:followers with status == active and name == Mary
将与该文档匹配…不正确。
嵌套字段使我们可以解决此限制。如果该followers
字段声明为类型nested
而不是类型,object
则其内容将在内部创建为单独的(不可见的)子文档。这意味着我们可以使用嵌套查询或嵌套过滤器将这些嵌套文档作为单独的文档进行查询。
但是,嵌套查询/过滤子句的输出仅告诉我们主要文档是否匹配以及匹配程度。它甚至没有告诉我们哪个嵌套文档匹配。为了弄清楚这一点,我们必须在应用程序中编写代码,以根据搜索条件检查每个嵌套文档。
有一些尚待解决的问题要求添加这些功能,但这并不是一个容易解决的问题。
实现所需目标的唯一方法是将子文档索引为单独的文档,并对其进行独立查询和排序。在主文档和这些单独的子文档之间建立父子关系可能会很有用。(请参阅父类型映射,索引api
docs的父项和子项以及
top-children和has-
child查询。
此外,ES用户已将有关他们当前正在fork中使用的新has_parent
过滤器的邮件通过邮件列表发送。但是,这在主要的ES库中尚不可用。
以上是 可以在ElasticSearch中对嵌套文档进行排序吗? 的全部内容, 来源链接: utcz.com/qa/413122.html