我正在构建一个SOLR集群,其中每个solr文档都对应一个公司的数据。例如,以下属性跟踪:将历史属性存储在一个SOLR文档中
1. name
2. size
3. location
4. awards
5. profit
我的问题是,我也想追踪历史数据可能改变(如大小/奖项)的属性。我知道这样做的简单方法是在每个时间范围内在SOLR中有一个文档。所以如果我想从2012年到2013年让所有小于50岁的公司成为一个简单的SOLR查询。但是,我正在处理近2000万家公司。使用上述策略意味着每当一个属性发生变化时,我们都会复制该文档 - 显着增加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模式时,属性(字段)是动态的。所以我不需要知道所有属性是什么。
任何想法?
你打算通过历史数据来搜索吗?如果不是,它不应该在Solr。 – 2015-02-11 04:40:07
@AlexandreRafalovitch是的。我希望能够搜索并获取具有特定属性的所有公司的列表,这些公司在某个日期与另一个日期之间具有特定值。使用上面的示例,我想查询SOLR,并获取2012年至2013年所有小于50的公司的列表。 – tknickman 2015-02-11 04:44:49