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

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

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

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

1 ответов


С mapping и to_indexed_json методы связаны, они служат двум различным целям, в действительности.

цель mapping метод заключается в определении картография свойства документа в индексе. Вы можете определить определенное свойство как "not_analyzed", поэтому он не разбивается на маркеры, или установить определенный анализатор для свойства, или (как вы упомянули) время индексирования boost фактор. Вы также можете определить multifield свойство, пользовательские форматы для дата типы и т. д.

этой картография затем используется например. когда шины автоматически создает индекс для вашей модели.

цель to_indexed_json метод определения сериализация JSON для документов/модели.

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

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

этот обычай MyModel#to_indexed_method обычно не заботится о картография определение и создает сериализацию JSON с нуля (используя ActiveRecord to_json, используя JSON builder, такой как на JBuilder, или просто строит простой старый хэш, а вызов Hash#to_json).

Итак, чтобы ответить на последнюю часть вашего вопроса, используя как mapping и to_indexed_json абсолютно не создать любые конфликты, и на самом деле требуется использовать дополнительные функции в решение Elasticsearch.

подведем итоги:

  1. использовать mapping метод определения отображения для ваших моделей для поисковой системы
  2. вы используете пользовательский to_indexed_json метод для определения того, как поисковая система видит ваши документы/модели.