各solrドキュメントが会社に関するデータに対応するSOLRクラスターを構築しています。たとえば、次の属性が追跡されます。
1. name
2. size
3. location
4. awards
5. profit
私の問題は、変更される可能性のある属性 (サイズ/賞など) の履歴データも追跡したいということです。これを行う簡単な方法は、時間範囲ごとに SOLR にドキュメントを作成することです。したがって、2012 年から 2013 年までの規模が 50 未満のすべての企業を取得したい場合、それは単純な SOLR クエリです。しかし、私は2,000万社近くの企業と取引しています。上記の戦略を使用すると、1 つの属性が変更されるたびにそのドキュメントが複製され、solr クラスター内のドキュメントの数が劇的に増加します。
SOLR でフィールドを使用する賢い方法を考えようとしています。これにより、主要な会社のドキュメント内で非推奨の属性とその日付を追跡できます。しかし、私はそれを行うための良い方法を解決できないようです。この問題はSOLRが設計されたものではなく、この方法でデータを保存することは、適切に正規化されていないことを意味するためです。ただし、データの大規模な複製を避けるための良い方法を探しています。
主な使用例は、次のようなクエリを実行できるようにすることです。
select all companies that were under size 50 from 2012 to 2013
したがって、各属性は、値、有効な日付、および非推奨の日付フィールドにリンクする必要があります。また、属性値と日付は検索可能である必要があります。
私はこのようなことをしたい:
{
"size":[
{
"date_deprecated": None,
"date_valid":"2015-01-01",
"value":"100"
},
{
"date_deprecated":"2014-12-31",
"date_valid":"2014-01-01",
"value":"50"
},
{
"date_deprecated":"2013-12-31",
"date_valid":"2013-01-01",
"value":"25"
}
]
}
しかし、明らかにそれはSOLRではうまくいきません。また、動的な solr スキーマを使用しているため、属性 (フィールド) は動的です。したがって、すべての属性が何であるかを知る必要はありません。
何か案は?