2016-11-08 185 views
0

我有一个要求,在父文档中有两个子文档。例如,它索引的文档看起来是这样的,Solr - 查询嵌套子文档

{ 
"id":123, 
"name":"nithin", 
"_childDocuments_":[ 
{ 
"id":"22" 
"place":"blr", 
"parent_id":123, 
"street":"inagar" 
}, 
{ 
"id":"23" 
"place":"tvm", 
"parent_id":123, 
"street":"bakery" 
} 
] 
} 

这里的名字 - 尼西具有鲜明的地方和街道两个子文件。我的要求是查询所有父母的具体地点和/或街道。 可以说blr和面包店。如果我点击一个查询(blr和面包店)它不会返回任何结果。我不能使用blr或面包店,因为我想要一个父文件,其中的儿童文件应该有blr和面包店。我如何实现这一目标?

+0

答案在http://stackoverflow.com/questions/35003195/solr-block-join-parent-query-with-many-children-constraints – redeemed

回答

0

我认为通过Block Join Parser功能实现您的目标的最佳方式。

你需要改变一点 - 是为父文档引入一些标记。在Solr词汇表中,它将需要“父过滤器”。因此,假设每个父文档将有content_type:parentDocument(只是举例的缘故),你就可以找到你的所有父文件与BJQ(块连接查询),如:

{!parent which="content_type:parentDocument"}(+place:blr +street:bakery) 

请记住,你需要将您的父母 - 子女文件索引在Solr wiki(与我看到你已经这样做,我猜这应该是件好事)的描述在一起(在同一个块)。

+0

找到答案这不会工作,因为这基本上查询单个子文档与面包房和相应的父母一起返回的地方为blr或街道。我需要的是父母的地方和街道都是blr或面包房,这意味着blr可以出现在另一个儿童文档中的一个儿童文档和面包房中。简而言之,只有当他有两个儿子时,我才需要父母。例如:如果我搜索亚伯和凯恩,我应该只得到亚当,尽管亚当1和亚当2可能有亚伯或该隐,而不是两个 – redeemed

+0

对不起,错过了那部分。我打赌Solr没有开箱即用的插件。我的建议是试图制造假小孩,并将所有字段值放在那里。似乎丑陋,我知道但它的作品。 –

+0

是的,基本上每个父母只有一个子文档,每个字段的值作为一个数组聚合在一起。这将解决这个问题,但是这将摆脱领域之间的相关性,正在考虑这样的事情,q =(Abel OR Cain)&facet = true&facet.field = parent_id&facet.mincount = 2。这会给我所有的阿贝尔和该隐作为孩子的parent_ids。在编程上,我可以计算返回的构面数组中元素的数量。是否有意义 ? – redeemed