Хранить исторические атрибуты в одном документе SOLR
Я строю кластер SOLR, где каждый документ solr соответствует данным о компании. Например, отслеживаются следующие атрибуты:
1. name
2. size
3. location
4. awards
5. profit
Моя проблема в том, что я также хочу отслеживать исторические данные для атрибутов, которые могут измениться (например, размер / награды). Я знаю, что простой способ сделать это - иметь документ в SOLR для каждого временного диапазона. Так что, если я хотел получить все компании, которые были ниже 50 с 2012 по 2013 год, это простой запрос SOLR. Однако я имею дело с почти 20 миллионами компаний. А использование описанной выше стратегии означает, что каждый раз, когда изменяется один атрибут, мы дублируем этот документ, что значительно увеличивает количество документов в кластере 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. Кроме того, атрибуты (поля) являются динамическими, поскольку я использую схему динамического решения. Поэтому мне не обязательно знать, что это за атрибуты.
Есть идеи?
1 ответ
Дублирование данных может не иметь большого значения, если вы используете Solr только для поиска и не сохраняете содержимое поля, а только индексируете его. Индексированные значения, даже если они отображаются в 20 документах, сохраняются один раз, а затем перечисляются только те документы, которые их содержат.
Таким образом, вы можете иметь свой основной источник данных со всеми полями где-то еще и использовать Solr для поиска.