Подтвердить что ты не робот

ElasticSearch & Tire: использование карт и to_indexed_json

При чтении документа Tire у меня создалось впечатление, что вы должны использовать методы mapping или to_indexed_json, поскольку (мое понимание было...) mapping используется для подачи to_indexed_json.

Проблема заключается в том, что я нашел несколько учебников, в которых используются оба метода. Почему?

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

4b9b3361

Ответ 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, чтобы определить, как поисковая система видит ваши документы/модели.