Solr и MySQL, как сохранить обновленный индекс, и нужна ли БД, если это просто?

Я полный новичок с Solr, так что потерпите со мной. :)

в моем текущем проекте у меня есть очень простая таблица DB - just 1, которая содержит 4 поля: id, name, subject, msg.

насколько я понимаю, каждый раз, когда новая запись добавляется (или удаляется), мне нужно добавить эту запись в индекс, по существу выполняя две операции: вставляя запись в БД и добавляя ее в индекс.

Это стандартная процедура, или есть способ направить Solr автоматически переиндексировать таблицу БД либо с некоторым интервалом, либо при наличии обновлений?

кроме того, поскольку таблица настолько проста, имеет ли смысл хранить эту информацию в БД? Почему бы просто не сохранить его в индексе Solr, учитывая, что я хочу, чтобы записи были доступны для поиска по имени, теме и msg?

моя настройка-Java, Hibernate, MySQL и Solrj.

2 ответов


использование базы данных или нет на самом деле сводится к тому, как долго вы хотите сохранить и вырастить эти данные. Гораздо проще повредить весь индекс Solr (и потерять все ваши данные), чем повредить всю базу данных. Кроме того, Solr не имеет большой поддержки для изменения схемы без запуска со свежим индексом. Например, можно добавить другое поле, но нельзя изменить имя или тип поля, не уничтожив индекс.

Если вы идете с БД, вы можете настроить Solr для индексирования непосредственно из БД, используя DataImportHandler. Для вашей схемы это должно быть довольно просто, но это может стать болезненным быстро, поскольку ваша БД становится более сложной. Я думаю, что есть некоторое преимущество в использовании объектов Hibernate, которые у вас уже есть, и просто вставьте их с помощью Solrj. Другая болевая точка с DataImportHandler заключается в том, что она полностью контролируется с помощью http. Поэтому вам нужно управлять отдельными заданиями cron (или каким-либо другим кодом), чтобы обработка планирования с помощью wget или curl.


единственная причина, по которой я вижу, что DB может быть полезен, заключается в том, что он имеет лучшую поддержку транзакций. В любом случае lucene (базовый движок SOLR) может разрешить только один indexwriter, поэтому вы не можете легко испортить базовую запись параллельной модификацией.

Что касается меня, вам не нужен DB. SOLR справится со всем, что вам нужно.