ruby-on-rails ruby elasticsearch elasticsearch-2.0

ruby on rails - NoMethodError(método no definido `resalte ''para#<Elasticsearch:: Model:: Response:: Result>



ruby-on-rails elasticsearch-2.0 (2)

Intentaría cambiar los campos a:

fields: { :"*" => {} }

Sólo para ver si eso se deshace del error. Consulte lo siguiente: https://github.com/elastic/elasticsearch-rails/issues/446

Voy a utilizar la búsqueda elástica para mi proyecto Ruby on Rails. Recibo este error cuando busco demasiado la palabra que se usa en mi artículo.

NoMethodError (undefined method `highlight'' for #<Elasticsearch::Model::Response::Result:0x007f062ed26708>)

Tengo esto en la producción de registro. esto es lo que todo lo que hice: en el controlador:

# POST /search/article def search render json: Article.search(params[:query]), each_serializer: ElasticsearchResultsSerializer end

Este es mi modelo de article.rb

#default_scope { order(''created_at DESC'') } scope :visible, -> { where(enabled: true) } after_commit on: [:create] do self.keywords = self.keywords.each {|str| str.force_encoding("UTF-8")} __elasticsearch__.index_document if self.enabled? end after_commit on: [:update] do self.keywords = self.keywords.each {|str| str.force_encoding("UTF-8")} __elasticsearch__.update_document if self.enabled? end after_commit on: [:destroy] do __elasticsearch__.delete_document end settings index: { number_of_shards: 1, number_of_replicas: 0 } mappings dynamic: ''false'' do indexes :content, type: "string", index_options: ''offsets'' indexes :title, type: "string" indexes :description, type: "string" indexes :category, type: "string" indexes :created_at, type: "date" indexes :keywords, type: "string" end def self.search(query) __elasticsearch__.search( { query: { multi_match: { query: query, fields: [''title^10'', ''content^5'', ''description^2'', ''keywords'', ''category''] } }, highlight: { pre_tags: [''<em>''], post_tags: [''</em>''], fields: { title: {}, content: {} } } } ) end def as_indexed_json(options={}) as_json( only: [:content, :title, :id, :category, :keywords, :description] ) end

y también usé serializador

class ElasticsearchResultsSerializer < ActiveModel::Serializer attributes :_id, :highlight, :_score, :_source def _source @article = object._index.singularize.capitalize.constantize.find(object._id) @serializer = "#{object._index.singularize.capitalize}Serializer".constantize @serializer.new(@article) end end


Tal vez sea una observación tonta, pero intentaste cambiar el valor

:highlight para :_highlight ?

class ElasticsearchResultsSerializer < ActiveModel::Serializer attributes :_id, :_highlight, :_score, :_source def _source @article = object._index.singularize.capitalize.constantize.find(object._id) @serializer = "#{object._index.singularize.capitalize}Serializer".constantize @serializer.new(@article) end end