【发布时间】:2015-02-11 13:04:58
【问题描述】:
我正在构建一个 SOLR 集群,其中每个 solr 文档对应于一家公司的数据。例如,跟踪以下属性:
1. name
2. size
3. location
4. awards
5. profit
我的问题是我还想跟踪可能更改的属性(例如大小/奖项)的历史数据。我知道做到这一点的简单方法是在 SOLR 中为每个时间范围创建一个文档。因此,如果我想获得从 2012 年到 2013 年规模小于 50 的所有公司,这是一个简单的 SOLR 查询。但是,我正在与近 2000 万家公司打交道。并且使用上述策略意味着每当一个属性发生变化时,我们都会复制该文档——极大地增加了 solr 集群中的文档数量。
我试图想出一种巧妙的方法来使用 SOLR 中的字段,以便我可以在 companies 主文档中跟踪已弃用的属性及其日期。但我似乎无法找到一个好的方法来做到这一点。我知道这部分是因为这个问题不是 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 中。
-
@AlexandreRafalovitch 是的。我希望能够搜索并获取具有特定属性的所有公司的列表,这些属性在一个日期和另一个日期之间具有特定值。使用上面的示例,我想查询 SOLR 并获取从 2012 年到 2013 年规模小于 50 的所有公司的列表
标签: date solr lucene schema historical-db