2016-11-08 97 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