本文介绍了solr子查询的语法及实现原理, 并进行了查询复杂度的分析.
阅读之前建议先阅读ref中的官方文档或其他类似文档已对solr子查询有基本了解, 本文主要讲解子查询原理.
ref
https://lucene.apache.org/solr/guide/8_6/indexing-nested-documents.html
https://lucene.apache.org/solr/guide/8_6/searching-nested-documents.html
语法
索引
先索引一些测试数据.
[
{
"ID": "1",
"title": "solr release v1.0",
"_parent_": true,
"comments": [
{
"ID": "2",
"content": "SolrCloud supports it too!"
},
{
"ID": "3",
"content": "New filter syntax"
}
]
},
{
"ID": "4",
"title": "solr release v2.0",
"_parent_": true,
"comments": [
{
"ID": "5",
"content": "Lots of new features"
}
]
}
]
查询
根据子文档的条件查询父文档
query
{
"q": "{!parent which='_parent_:true' v=\"{!edismax qf='content' v='syntax'}\"}",
"start": 0,
"rows": 20,
"fl": "*,[child]"
}
resp
{
"responseHeader": {
"zkConnected": true,
"status": 0,
"QTime": 0
},
"response": {
"numFound": 1,
"start": 0,
"numFoundExact": true,
"docs": [
{
"ID": "1",
"title": [
"solr release v1.0"
],
"_parent_": [
"true"
],
"_version_": 1686656017889230848,
"_root_": "1",
"comments": [
{
"ID": "2",
"content": [
"SolrCloud supports it too!"
],
"_nest_path_": "/comments#0",
"_nest_parent_": "1",
"_root_": "1",
"_version_": 1686656017889230848
},
{
"ID": "3",
"content": [
"New filter syntax"
],
"_nest_path_": "/comments#1",
"_nest_parent_": "1",
"_root_": "1",
"_version_": 1686656017889230848
}
]
}
]
}
}