Хранить исторические атрибуты в одном документе 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 для поиска.

Другие вопросы по тегам