EAVやダイナミックファセット属性のためのスキーマ設計
(The bot translated the original post https://lists.apache.org/thread/gktfrztzgtdxlczzkldxpqy8zmw8jnhq into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)
こんにちは皆さん、
私たちは、任意の属性と値を持つドキュメントに対してファセット検索を提供するスキーマを作成しようとしています。RDBMSモデルでは、これは通常、Entity Attribute Value(EAV)スキームと呼ばれます。
以下は一種類のドキュメントの例です。trait_typeにはVariant、Rank、Chest、Face、Handsなどがあります。
{
"name": "ここに名前が入ります。",
"description": "ここにテキストが入ります。",
"attributes": [
{
"trait_type": "Variant",
"value": "Service Unit"
},
{
"trait_type": "Rank",
"value": 5861
},
{
"trait_type": "Chest",
"value": "Robe",
"occurrence": 10.0
},
{
"trait_type": "Face",
"value": "Shades",
"occurrence": 9.8
},
{
"trait_type": "Hands",
"value": "Handheld Console",
"occurrence": 2.6
}
]
}
上記のような「ドキュメントタイプ」のドキュメントが1万件あります。
別の「ドキュメントタイプ」では異なる特性を持つかもしれません。
上記のドキュメントに関して、以下のようなファセットブラウザを希望しています:
Variant
- Service Unit (122)
- Combat Unit (100)
- Other (231)
Chest
- Robe (122)
- Amber (231)
- Diamond (100)
Face
- Shades (123)
- VR (23)
Hands
- Handheld Console (23)
- Sword (87)
- Gun (12)
この実験として、これらのドキュメントを「スキーマレス」および「管理されたスキーマ」コアにインポートしました。その結果得られたSolrドキュメントは以下の通りです:
{
"name": ["ここに名前が入ります"],
"description": ["ここに説明が入ります..."],
"attributes.trait_type": [
"Variant",
"Rank",
"Antenna",
"Chest",
"Face",
"Head",
"Hands"
],
"attributes.value": [
"Automaton",
"309",
"Boosted Signal",
"Gold",
"Glowering",
"Baseball Cap",
"Baseball Bat"
],
"attributes.occurrence": [8.7, 3.4, 9.6, 4.7, 4.7],
"id": "4a972d2a-df0b-4112-90f2-eef8d153d874",
"_version_": 1723919631435956224
}
以下は古いStackoverflowの質問とその回答ですが、類似の問題を説明しています:
https://stackoverflow.com/questions/7512392/facet-dynamic-fields-with-apache-solr/14529566#14529566
ただし、他にどんなアプローチが考えられるか、ご意見や提案があれば教えていただけますでしょうか?私たちが持つドキュメントタイプは非常に多くないため、完全に「汎用化」された解決策が必要なわけではないかもしれません。つまり、インデックス化する際にvariant、chest、face、handsなどの既知のフィールドにドキュメントを「正規化」することができます(必要に応じて新しいフィールドを作成し、その後、ドキュメントタイプでフィルタリングします)。
ご意見や提案をお待ちしております。
よろしくお願いします。
Tony
トピックへ返信するには、ログインが必要です。