Репликация поискового индекса

Я разрабатываю приложение, которое требует, чтобы индекс CLucene создавался в настольном приложении, но реплицировался для поиска (только для чтения) на устройствах iOS и эффективно обновлялся при обновлении индекса.

Помимо простой повторной загрузки всего индекса, когда он меняется, какие у меня есть варианты? CLucene не поддерживает репликацию сама по себе, но Solr (которая построена поверх Lucene) поддерживает, так что это вполне возможно. Кто-нибудь знает, как Solr делает это и как можно подходить к реализации аналогичной функциональности?

Если это невозможно, существуют ли какие-либо (не основанные на Java) реализации полнотекстового поиска, которые бы лучше соответствовали моим потребностям, чем CLucene?

Запрашивать настольное приложение не вариант - мобильные приложения должны иметь возможность поиска в автономном режиме.

1 ответ

Решение

Индекс Lucene основан на однократном чтении множества сегментов. Это означает, что когда новые документы были добавлены в индекс Lucene, все, что вам нужно для извлечения:

  • новые сегменты,
  • объединенные сегменты (старые сегменты, которые были объединены в один сегмент, если есть),
  • файл сегментов (в котором хранится информация о текущих сегментах).

Как только все эти новые файлы были загружены, файлы сегментов, которые были объединены, могут быть безопасно удалены. Чтобы принять изменения во внимание, просто откройте IndexReader.

Solr имеет реализацию Java для этого, но, учитывая простоту, использование инструмента синхронизации, такого как rsync, также поможет. Кстати, именно так Solr репликация работала до Solr 1.4, вы все еще можете найти некоторую документацию в вики о репликации rsync.

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