Использование solr/pysolr с flask sqlalchemy

Я пытаюсь настроить solr для использования с postgres db, который я использую через flask sqlalchemy orm. Я нашел библиотеку pysolr для этой цели, но не ясно, как настроить хуки в моделях sqlalchemy для обновления индекса solr. Есть примеры?

pysolr предлагает вставлять документы вручную через solr.add, но неясно, как вы будете разделять индексы для разных таблиц базы данных.

после некоторых исследований я придумал следующий подход, мне интересно, правильно ли это:

  1. в моделях ORM перехватывать after_insert, after_update, after_remove и after_commit и вставлять/обновлять/удалять данные объекта в solr в этих событиях.

  2. для разделения данных разных моделей используйте имя таблицы в качестве префикса в поле «id» документов solr. solr_id = db_table_name + db_id

  3. когда вы выполняете поиск, получаете все результаты, вручную фильтруете те, которые соответствуют требуемой таблице базы данных, извлекаете идентификаторы, выполняете поиск базы данных по этим идентификаторам и используете эти результаты базы данных.

есть ли лучший способ сделать это? Спасибо.


person vrtx54234    schedule 18.02.2014    source источник


Ответы (1)


SQLAlchemy и Solr имеют разную структуру. Я думаю, что лучшим решением является реализация скрипта для синхронизации данных. Запустите скрипт для обновления, возможно, 30 минут или час для новых данных.

Связывание механизмов вставки/обновления/удаления/фиксации в модели не является хорошим способом. Потому что, если у ваших служб Solr возникнут какие-либо проблемы, это повлияет на ваш веб-сайт (о доступе к базе данных). Сохраняйте независимость сервисов различий.

person Puffin GDI    schedule 18.02.2014
comment
Я планировал запускать задачи сельдерея для событий модели, чтобы немного отдалить два сервиса. Я также могу попробовать использовать отдельный скрипт. можете ли вы прокомментировать разделение данных, принадлежащих разным таблицам, в solr? - person vrtx54234; 18.02.2014
comment
Когда данные добавляются в Solr, они становятся структурой документа для поиска. Я думаю, что вы можете получить любые данные из разных таблиц по вашему требованию, если это необходимо для поиска. - person Puffin GDI; 18.02.2014