Репликация поискового индекса - PullRequest
2 голосов
/ 20 марта 2012

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

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

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

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

1 Ответ

4 голосов
/ 21 марта 2012

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

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

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

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

...