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