Полнотекстовый поиск в кластере

Коллеги, подскажите, пожалуйста, есть ли рекомендации по настройке полнотекстового поиска в кластере, когда развернуто несколько нод с приложением. При стандартной настройке полнотекстовый индекс хранится в локальной файловой системе. Первое, что приходит на ум - это хранить индекс на сетевой файловой системе, доступной со всех нод, но это не очень производительное решение. Есть ли другие варианты?

Добавлю. Возможно ли хранить полнотекстовый индекс в ElasticSearch? Он вроде как позволяет построить полноценный кластер.

Аддон FTS для CUBA работает только с библиотекой Lucene, индексы хранятся в файловой системе.
В Jmix данный аддон был переработан и как раз работает с Elasticsearch.

Да, рекомендации есть. Схема такая:

  • На каждом узле кластера индекс Lucene хранится локально в файловой системе. Индексы поддерживаются независимо друг от друга.
  • При подключении нового узла нужно будет проинициализировать индекс на этом узле (или просто скопировать файлы из папки ftsindex с другого узла).
  • Нужно настроить систему, чтобы индексация срабатывала на всех узлах.
  1. Выставить свойство fts.indexingHosts (com.haulmont.fts.global.FtsConfig#getIndexingHosts), в нем список узлов кластера, на которых должна происходить индексация, разделенный вертикальной чертой.
    Например fts.indexingHosts = app1:8080/app-core|app2:8080/app-core|app3:8080/app-core
  2. Настроить задачу для индексирования (https://doc.cuba-platform.com/fts-7.2-ru/qs_indexing.html), чтобы выполнялась в кластере.
    cuba_FtsManager - processQueue - должна выполняться на всех узлах кластера. Настройки например такие:
  • Singleton = false
  • Log Start, Log Finish = true
  • Permitted Servers - либо пустое значение, либо перечисление всех томкатов с app-core (через запятую), например app2:8080/app-core,app1:8080/app-core.
  • Period = 5 или 10 секунд
  • Active = true
  1. На всех узлах кластера выполнить переиндексацию (https://doc.cuba-platform.com/fts-7.2-ru/reindex.html), или скопировать индекс с одного узла.

Александр, спасибо огромное за подробную инструкцию! :handshake: Будем пробовать настроить.