サブ要素を含むsolrドキュメントを作成することはどういうわけか可能ですか?
たとえば、次のようなものをどのように表現しますか。
<person first="Bob" last="Smith">
<children>
<child first="Little" last="Smith" />
<child first="Junior" last="Smith" />
</children>
</person>
この問題を解決する通常の方法は何ですか?
検索/ファセットのニーズに応じて、さまざまな方法でこれをモデル化できます。通常、複数値または動的フィールドを使用します。次の例では、フィールドタイプ、インデックス付きフラグ、および格納フラグを省略します。
<field name="first"/>
<field name="last"/>
<field name="child_first" multiValued="true"/>
<field name="child_last" multiValued="true"/>
子の姓と名を関連付けるのはあなた次第です。または、両方を1つのフィールドに入力することもできます。
<field name="first"/>
<field name="last"/>
<field name="child_first_and_last" multiValued="true"/>
もう1つ:
<field name="first"/>
<field name="last"/>
<dynamicField name="child_first_*"/>
<dynamicField name="child_last_*"/>
ここでは、フィールド 'child_first_1'、 'child_last_1'、 'child_first_2'、 'child_last_2'などを格納します。ここでも、値を相互に関連付けるのはあなた次第ですが、少なくともインデックスはあります。いくつかのコードを使用すると、これを透過的にすることができます。
結論: Solr wiki のように:「Solrは1つのテーブルを提供します。通常、セットのデータベーステーブルをインデックスに格納するには、いくつかのテーブルを非正規化する必要があります。非正規化を回避しようとすると、通常は失敗します。」検索のニーズに応じてデータを非正規化するのはあなた次第です。
更新:バージョン4.5以降、Solrはネストされたドキュメントを直接サポートします: https://cwiki.Apache.org/confluence/display/solr/Other+Parsers#OtherParsers-BlockJoinQueryParsers
Solr 4.7および4.8以降、Solrはネストされたドキュメントをサポートします。
{
"id": "chapter1",
"title" : "Indexing Child Documents in JSON",
"content_type": "chapter",
"_childDocuments_": [
{
"id": "1-1",
"content_type": "page",
"text": "ho hum... this is page 1 of chapter 1"
},
{
"id": "1-2",
"content_type": "page",
"text": "more text... this is page 2 of chapter 1"
}
]
}
詳細は Solrリリースノート を参照してください。
子供用に個別のフィールドがあると、誤検知の一致につながります。連結フィールドはある意味で機能しますが、それは本当に限られたアプローチです。 http://blog.griddynamics.com/2011/06/solr-experience-search-parent-child.html でブログに掲載されている同様のタスクで多くの経験があります。