Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Solr 4.0如何连接子文档_Java_Solr_Solrj - Fatal编程技术网

Java Solr 4.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

我注意到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 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连接具有此功能)