[英]Solr 4.0 how to join subdocuments
我注意到solr 4.0具有联接功能,我想用它来联接子文档。
就像是
<book>
<bookid>1</bookid>
<Title>This book is epic</title>
</book>
<page>
<bookid>1</bookid>
<number>1</number>
<pagecontent>this is the first page of the epic book</pagecontent>
</page>
<page>
<bookid>1</bookid>
<number>2</number>
<pagecontent>this is the second page of the epic book</pagecontent>
</page>
如何加入这些子文档?
我想查询类似q=text:second .
其中text是一个复制字段,其中包含所有其他字段。
结果应该是第二页及其书。 我有一个更复杂的架构,然后才是书和页。 还有其他类型的子文档,其父ID为:book。
在Solr 3.6中,我将所有这些子文档存储为多值字段,并检查组合是否存在带隐含字段。 这不是一个好方法,需要大量编码,并且依赖于Java的Strings.contains。 我希望Solr 4.0加入可以对我有所帮助。 但是我不明白如何编写正确的查询以及如何检索像书一样带有页面列表的结果。
我还阅读了有关为每种子文档类型使用多个索引的信息,但我不知道这将如何影响文档评分等。
编辑:
在这里,他们说他们只将内部查询的结果放在最终结果中。 我应该用ID更改两次查询,然后合并结果吗? 这也让我感到难过...
新答案:索引父子并使用blockjoin查询。 查看blockjoin信息
下面的答案是旧的。 新的solr版本支持blockjoin,而无需编写插件等。
我通过为solr编写queryparserplugin,使用了lucenequerytimejoin(此连接在子文档上具有评分选项)。
该链接解释了我所做的一些事情: Querytimejoin Solr
lucene开发人员之一解释了quertimejoin: Blog QueryTimeJoin
此解决方案不支持多个核心。(主干solr连接具有此功能)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.