2016-11-08 10 views
0

親ドキュメントに2つの子ドキュメントがあるという要件があります。たとえば、インデックスが作成されドキュメントはここで、このように名前をSolr - ネストされた子ドキュメントの照会

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

に見える - ニシンは別々の場所や路上で2つのつの子文書を持っています。私の要件は、特定の場所や通りを持つすべての親を照会することです。 blrとベーカリーを言うことができます。私が(blrとbakery)と言っているクエリを起動した場合、結果は返されません。私はblrやベーカリーを使うべきではないので、私は親文書を欲しいので、blrやベーカリーを使うことはできません。どのように私はこれを達成するのですか?

+0

回答が見つかる:http://stackoverflow.com/questions/35003195/solr-block-join-parent-query-with-many-children-constraints – redeemed

答えて

0

あなたの目標を達成する最良の方法は、Block Join Parser機能です。

少し変更する必要があります - 親ドキュメントのマーカーを導入することです。 Solr用語集では、 "親フィルタ"に必要です。

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

は心に留めてください、あなたがする必要がありますので、それぞれの親ドキュメントと仮定すると、あなたのようなBJQ(クエリをブロック-参加)で、すべての親文書を見つけることができるでしょう(単なる例のために)content_type:parentDocumentを持っていますSolr wikiに記載されているように(同じブロック内で)親子ドキュメントを索引付けします(ただし、すでに行っているのを見れば分かります)。

+0

これは基本的に単一の子ドキュメントベーカリーやそれに対応する親として返されます。私が必要とするのは、場所と通りの両方がblrまたはbakeryである両親です。これは、blrが別の子ドキュメントの1つの子ドキュメントとベーカリーに表示されることを意味します。それを短くするために、私は2人の息子がいる場合のみ、私は親が必要です。例:AbelとCainを検索するとAdamだけが得られるはずですが、Adam1とAdam2にはAbelまたはCainがあり、両方ではありません – redeemed

+0

申し訳ありませんが、その部分を逃しました。私はSolrにすぐに使えるプラグインがないと確信しています。私の提案は、偽の子供を作り、そこにすべてのフィールド値を入れようとしています。醜いと思う、私は知っているが、それは動作します。 –

+0

基本的には、各フィールドの値を配列としてまとめると、親あたり1つの子ドキュメントのみが存在します。それはこれを解決するだろうが、それはフィールド間の相関を取り除くだろう、このようなものを考えていた、q =(Abel OR Cain)&facet = true&facet.field = parent_id&facet.mincount = 2。これは、アベルとカインを子として持つすべてのparent_idsを私に与えるでしょう。そして、プログラムでは、返されたファセット配列の要素数を数えることができます。それは理にかなっていますか? – redeemed

関連する問題