【发布时间】:2015-07-31 02:05:15
【问题描述】:
我正在建立一个 Elasticsearch 索引,并希望它以某种方式运行(返回结果)。我已经建立了父/子关系。
curl -XPUT 'http://127.0.0.1:9200/parent/' -d '
{
"mappings": {
"parent": {},
"child": {
"_parent": {
"type": "parent"
}
}
}
} '
我已经用一些“父”文档和一堆“子”文档填充了它,它们的父设置正确。
当我使用普通搜索查询搜索内容时,我当然会取回所有匹配的文档。父子文件,但两者之间没有联系。如果我使用 has_child 过滤器搜索内容,它会正确搜索子文档并将匹配的父文档返回给我:
curl -XGET 'http://127.0.0.1:9200/parent/_search' -d '
{
"query": {
"has_child": {
"type": "child",
"query": {
"match": {
"detail": "Stuff I Want To Match"
}
}
}
}
}'
问题是,我想搜索孩子并在一个文档中取回父母和孩子。有没有办法做到这一点?是不是亲子关系搞错了?
【问题讨论】:
-
通过更新,我只是在查看嵌套对象,我似乎也遇到了同样的问题,除非我弄错了。
-
不,你不能。您将返回您搜索的对象类型。时期。如果您使用嵌套对象,您可以搜索具有匹配嵌套查询的嵌套属性的顶级文档;您将返回顶级文档,包括嵌套文档的所有,而不仅仅是匹配的文档。你想用一个嵌套的孩子取回父文档类型吗?您必须为父母拥有的每个孩子索引父母+孩子文档。 Elasticsearch 不执行“连接”。
-
格伦 - 你完全正确。我试图避免每次向其中添加子/嵌套文档时都需要重新索引整个文档......这就是为什么父/子关系起初看起来很有吸引力的原因。我将使用嵌套文档。
标签: json elasticsearch pyelasticsearch