Ответ 1
Хотя методы mapping
и to_indexed_json
связаны между собой, они фактически выполняют две разные цели.
Цель метода mapping
- определить отображение свойств документа в пределах индекса. Вы можете определить определенное свойство как "not_analyzed", поэтому оно не разбивается на токены или не задает определенный анализатор для свойства или (как вы упоминаете) коэффициент ускорения индексации. Вы также можете определить свойство multifield, настраиваемые форматы для типов дат и т.д.
Это отображение затем используется, например. когда Tire автоматически создает индекс для вашей модели.
Цель метода to_indexed_json
- определить сериализацию JSON для ваших документов/моделей.
метод по умолчанию to_indexed_json
использует определение вашего сопоставления, чтобы использовать только свойства, определенные в сопоставлении, - на том основании, что если вы заботитесь достаточно, чтобы определить отображение, по умолчанию Tire индексирует только свойства с определенным отображением.
Теперь, когда вам нужно жестко контролировать, как ваша модель фактически сериализована в JSON для elasticsearch, вы просто определяете свои собственные методы to_indexed_json
(как указано README).
Этот пользовательский MyModel#to_indexed_method
обычно не заботится о определении отображения и строит сериализацию JSON с нуля (используя ActiveRecord to_json
, используя построитель JSON, такой как jbuilder, или просто создайте простой старый хэш и позвонив Hash#to_json
).
Итак, чтобы ответить на последнюю часть вашего вопроса, использование как mapping
, так и to_indexed_json
абсолютно не создаст конфликтов, и на самом деле требуется использовать дополнительные функции в elasticsearch.
Подводя итог:
- Вы используете метод
mapping
для определения отображения для своих моделей для поисковой системы. - Вы используете собственный метод
to_indexed_json
, чтобы определить, как поисковая система видит ваши документы/модели.