Java Solr 4.0如何连接子文档
我注意到Solr4.0有一个连接函数,我想用它连接子文档 差不多Java Solr 4.0如何连接子文档,java,solr,solrj,Java,Solr,Solrj,我注意到Solr4.0有一个连接函数,我想用它连接子文档 差不多 <book> <bookid>1</bookid> <Title>This book is epic</title> </book> <page> <bookid>1</bookid> <number>1</number> <pagecontent>this is the first p
<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>
1.
这本书是史诗
1.
1.
这是这本史诗书的第一页
1.
2.
这是史诗书的第二页
如何加入这些子文档?
我想像q=text:second那样查询这个问题。
其中text是一个copyfield,其中包含所有其他字段
结果应该是第二页和它的书。我有一个更复杂的模式,而不仅仅是书本和页面。还有父id为book的其他类型的子文档
在Solr3.6中,我将所有这些子文档存储为多值字段,并检查是否存在与concatation字段的组合。这不是一个好方法,需要大量的编码+它依赖于Java的Strings.contains。我希望solr 4.0加入能够帮助我。但我不知道如何编写正确的查询,以及如何检索结果,比如带有页面列表的书
我也读过关于为每个子文档类型使用多个索引的文章,但我不知道这会如何影响文档评分等
编辑:
这里他们说他们只把内部查询的结果放在最终结果中。我是否应该在id已更改的情况下执行两次查询,然后合并结果?这对我来说也很糟糕…新答案:为父-子索引并使用blockjoin查询。看 下面的答案很古老。新的solr版本支持blockjoin,无需编写插件等 我使用了lucenequerytimejoin(这个连接在子文档上有评分选项),为solr创建了一个queryparserplugin 这个链接解释了我所做的一些事情: 这里由lucene开发人员之一解释quertimejoin: 此解决方案不支持多核。(中继solr连接具有此功能)