我在 Rails 中将轮胎宝石用于 ElasticSearch。
好的,所以我整天都在与这个作斗争,这就是我已经走了多远。我想让我的模型上的字段不可搜索,但它们仍然应该在 _source 中可用,以便我可以使用它们对搜索结果进行排序。
我的映射:
mapping do
indexes :created_at, :type => 'date', :index => :not_analyzed
indexes :vote_score, :type => 'integer', :index => :not_analyzed
indexes :title
indexes :description
indexes :tags
indexes :answers do
indexes :description
end
end
我的 to_indexed_json 方法:
def to_indexed_json
{
vote_score: vote_score,
created_at: created_at,
title: title,
description: description,
tags: tags,
answers: answers.map{|answer| answer.description}
}.to_json
end
我的搜索查询:
def self.search(term='', order_by, page: 1)
tire.search(page: page, per_page: PAGE_SIZE, load: true) do
query { term.present? ? string(term) : all }
sort {
by case order_by
when LAST_POSTED then {created_at: 'desc'}
else {vote_score: 'desc', created_at: 'desc'}
end
}
end
end
我现在要解决的唯一问题是如何使vote_score和created_at字段不可搜索,但在搜索时仍然设法使用它们进行排序。
我试过indexes :created_at, :type => 'date', :index => :no
了,但没有奏效。