2015-02-11 7 views
0

Я создаю кластер 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. Поэтому я не знаю, что все атрибуты.

Любые идеи?

+0

Собираетесь ли вы _searching_ через эти исторические данные? Если нет, это не должно быть в Solr. –

+0

@AlexandreRafalovitch Да. Я хотел бы иметь возможность искать и получать список всех компаний с определенным атрибутом, имеющим определенное значение между датой и датой. Используя приведенный выше пример, я хотел бы запросить SOLR и получить список всех компаний, которые были под размером 50 с 2012 по 2013 год – tknickman

ответ

0

Дублирование данных не может быть большой проблемой, если вы используете Solr только для поиска, и не магазин содержание в поле, но только проиндексируйте его. Индексированные значения, даже если они отображаются в 20 документах, сохраняются один раз, а затем перечисляются только содержащиеся в них документы.

Итак, вы можете использовать свой первичный источник данных со всеми полями в другом месте и использовать Solr для поиска.

+0

В идеале мы хотели бы хранить все наши данные в SOLR. – tknickman

+0

Вы не должны использовать Solr в качестве первичной базы данных. Он разработан и оптимизирован для поиска. Хотя он очень надежный, правильная архитектура все равно сохранит первичные данные где-то в другом месте. У вас есть другие варианты, чтобы избежать дублирования данных в Solr, включая родительские/дочерние объекты, внешние поля значений и т. Д. Но у всех есть еще более сложные компромиссы. Лучше всего сначала создать прототип и поэкспериментировать с воздействием на ваши конкретные данные. –

Смежные вопросы