我一直在试图弄清楚如何使用轮胎进行使用嵌套对象的混合布尔搜索。我发现的所有简单示例都不包含更复杂的查询(在搜索其他属性时)。
我的搜索涉及找到一个“需要”特定类型人员的团队。当试图建立一支足球队时,球队需要在名单上填充特定体重级别的某些类型的球员,可以选择排除一个或另一个。
其他参数,例如“地区”或“种类”,与球队的比赛地点以及球队的类型(休闲、竞技等)有关。
我目前的设置:
mapping do
indexes :region, index: :not_analyzed
indexes :kind, index: :not_analyzed
indexes :role_requirements do
indexes :need, type: 'boolean'
indexes :weight_class_id, type: 'integer'
indexes :role_id, type: 'integer'
end
.
.
.
end
def self.search(params)
team_params = params[:team_search]
tire.search(page: params[:page], per_page: 10) do
query do
boolean do
must { string team_params[:query], default_operator: "AND" } if team_params[:query].present?
must { term :kind, team_params[:kind] } if team_params[:kind].present?
must { term :region, team_params[:region] } if team_params[:region].present?
if team_params[:weight_class_id].present? || team_params[:role_id].present?
must { term 'role_requirements.need', true }
end
must { term 'role_requirements.weight_class_id', team_params[:job_id].to_i } if team_params[:weight_class_id].present?
must { term 'role_requirements.role_id', team_params[:role_id].to_i } if team_params[:role_id].present?
.
.
.
end
end
end
end
我尝试了多种方法,但通常似乎存在问题,要么是 ElasticSearch 无法解析事物,要么是轮胎没有该范围内的方法:
通过这个实现,这里是生成的 to_json:https ://gist.github.com/8a615e701eb31ff2e250
目前没有给我任何结果。
我尝试过的所有不同方式:https ://gist.github.com/907c9571caa0e87bad27
没有人能真正给我完整的结果。