Я сопоставил связанное поле как мультиполе. Я установил свойство «имя» для анализа с помощью анализатора снежного кома и «точное» как не анализируемое. Я также могу искать в этом поле и фильтровать. Я не могу сортировать по этому полю. При попытке сортировки эластичный возвращает ошибку «Не удается отсортировать строковые типы с более чем одним значением на документ или более чем с одним токеном на поле».
Я попытался создать дополнительное поле под названием «сырой», похожее на точное, и это тоже не сработало. Ниже приведено мое сопоставление и то, как я пытаюсь выполнить сортировку с помощью драгоценного камня шины:
mapping do
indexes :sectors, :type => 'object',
:properties => { :name => { :type => 'multi_field',
:fields => {
:name => { :type => 'string', :analyzer => 'snowball' },
:exact => { :type => 'string', :index => 'not_analyzed' , :include_in_all => false }
}
}
}
end
def to_indexed_json
to_json( :include => {
...
:sectors => { :only => ["name"] },
...
})
end
def self.search(params)
tire.search(:load => true, :page=>params[:page], :per_page => 12) do
if params[:query].present?
query { string params[:query], :default_operator => "OR" }
else
query { all }
end
filter :term, "sectors.name.exact" => params[:sector] if params[:sector].present?
sort { by 'sectors.name.exact','asc' } if !params[:sort][:sector].blank?
end
end