问题描述
我正在尝试在查询的字段列表中返回带有父级的子文档字段。
在 Solr 7.7 版本中,我们必须指定 fl=*,[child parentFilter=type:account]
,它会正确返回所有父字段以及类型为 account
的关联子文档。
在 Solr 8.x 版中,随着 _nest_path_
的引入,情况发生了变化。我们在架构中正确地包含了 fieldType _nest_path_
和字段 _nest_path_
(它由 SolrJ 生成)。
<fieldType name="_nest_path_" class="solr.nestPathField" omitTermFreqAndPositions="true" omitnorms="true" maxCharsForDocValues="-1" stored="false"/>
<field name="_nest_path_" type="_nest_path_"/>
我们能够正确查询与父文档相关的子文档字段,但无法返回子文档字段。
在我的示例中,我有两个父文档(帐户),每个都有 3 个子文档(策略)。
这里是*:*
返回的扁平结构
{
"responseHeader":{
"zkConnected":true,"status":0,"QTime":25,"params":{
"q":"*:*","_":"1611069992439"}},"response":{"numFound":8,"start":0,"maxscore":1.0,"numFoundExact":true,"docs":[
{
"id":"policy-1","type":["policy"],"_version_":1689330740566687744},{
"id":"policy-2",{
"id":"policy-3",{
"id":"account-1","name":["Harvey John Birdman"],"type":["account"],{
"id":"policy-4","_version_":1689330740571930624},{
"id":"policy-5",{
"id":"policy-6",{
"id":"account-2","name":["Billy George Zane"],"_version_":1689330740571930624}]
}}
这是对q=type:account&fl=*,[child]
{
"responseHeader":{
"zkConnected":true,"QTime":28,"params":{
"q":"type:account","fl":"*,[child]","response":{"numFound":2,"maxscore":0.5822426,"docs":[
{
"id":"account-1","_version_":1689330740571930624}]
}}
如果我不返回任何父字段,我会得到空结果(没有子数据)
{
"responseHeader":{
"zkConnected":true,"QTime":29,"fl":"[child]","docs":[
{},{}]
}}
我在 SolrJ 上使用 Spring 的抽象,但是将 SolrJ 直接与 SolrInputDocument
一起使用会产生同样的结果。如果这些库中的任何一个存在任何已知错误,请提及这一点。
Solr 版本 = 8.5.2
SolrJ 版本 = 8.5.2
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)