我有一个 Solr4 索引,表示具有以下相关字段的内容之间的子->父关系:
- item_id
- im_endpoints_source_node$nid
- im_endpoints_target_node$nid
其中item_id是关系 id,im_endpoints_source_node$nid是父文档 id 的多值字段,im_endpoints_target_node$nid是子文档 id 的多值字段。
每个文档可能有几个孩子和几个父母。
我想选择特定文档的所有祖先或后代关系。
假设我有这样的结构:
1 > 30
1 > 11
11 > 121
11 > 126
126 > 134
我可以通过以下选择查询获得所有直接父关系:
/select?fq=im_endpoints_source_node$nid:1
这给出了以下结果:
{
"response": {
"numFound": 2,
"start": 0,
"docs": [
{
"id": "child_relation_index-9",
"index_id": "child_relation_index",
"item_id": "9",
"is_rid": 9,
"bs_field_relation_inactive": false,
"ss_search_api_language": "und",
"im_endpoints_source_node$nid": [
1
],
"im_endpoints_target_node$nid": [
30
],
"timestamp": "2013-09-24T13:03:44.739Z"
},
{
"id": "child_relation_index-13",
"index_id": "child_relation_index",
"item_id": "13",
"is_rid": 13,
"bs_field_relation_inactive": false,
"ss_search_api_language": "und",
"im_endpoints_source_node$nid": [
1
],
"im_endpoints_target_node$nid": [
11
],
"timestamp": "2013-09-24T13:03:44.739Z"
}
]
}
}
以及具有以下选择查询的第二级祖先关系(祖父母关系):
/select?fq={!join from=im_endpoints_target_node$nid to=im_endpoints_source_node$nid}im_endpoints_source_node$nid:1
这给出了以下结果:
{
"response": {
"numFound": 2,
"start": 0,
"docs": [
{
"id": "child_relation_index-18",
"index_id": "child_relation_index",
"item_id": "18",
"is_rid": 18,
"bs_field_relation_inactive": false,
"ss_search_api_language": "und",
"im_endpoints_source_node$nid": [
11
],
"im_endpoints_target_node$nid": [
121
],
"timestamp": "2013-09-24T13:03:44.739Z"
},
{
"id": "child_relation_index-19",
"index_id": "child_relation_index",
"item_id": "19",
"is_rid": 19,
"bs_field_relation_inactive": false,
"ss_search_api_language": "und",
"im_endpoints_source_node$nid": [
11
],
"im_endpoints_target_node$nid": [
126
],
"timestamp": "2013-09-24T13:03:44.739Z"
}
]
}
}
有没有办法在一个查询中获取文档的所有祖先(从级别 1 到级别 N)?
仅供参考:这个索引是使用 Drupal 的 Search API Solr 模块和 Relation 模块创建的。它包含约 500k 个文档的 300k 多个关系。
任何帮助将不胜感激。