【发布时间】:2013-08-17 11:45:33
【问题描述】:
我正在尝试在基于 elasticsearch+tire 的 Rails 中构建搜索功能,从而可以搜索具有关联对象及其值的过滤的人员。一个人有_many 个对象,一个对象有_many 个值。
我已经设法使对象名称 (params[:object]) 上的过滤起作用,但不适用于对象+值。我应该如何为值和映射构造范围过滤器,以便值依赖于对象?
人员控制器
mapping do
indexes :objects do
indexes :_id
indexes :object_values do
indexes :value
end
end
indexes :name, type: 'string', analyzer: 'snowball'
end
def self.search(params)
tire.search do
query do
boolean do
must { string params[:query]} if params[:query].present?
end
end
filter :term, {"objects._id" => params[:object]} if params[:object].present?
filter :range, “objects.object_values.value” => {from: params[:value] } if params[:value].present?
end
end
def to_indexed_json
{
:name => name,
:objects => objects.map { |o| {
:_type => 'object',
:_id => o.id,
:object_values => o.object_values.map {|ov| {
:_type => 'object_value',
:_id => ov.id,
:value => ov.value } },
} }
}.to_json
end
【问题讨论】:
标签: ruby-on-rails elasticsearch tire