复杂的搜索我想要做的与思维狮身人面像一个复杂的搜索:与思考狮身人面像
搜索哪些用户: - >住在城市(city_id属性) - >或具有hability移动到一个城市(mobile_cities association) - >或者居住在距经纬度点最大距离处,每个用户的最大距离是不同的,并且设置在mobility_distance属性中。
现在我这样做,与3型动物进行搜索,我volontary设置一个大per_page号码,然后我合并单个阵列上的3个结果,一则分页此阵:
#users living in the @city
search_set_living = search_set.merge({:city_id => @city.id })
users_living = User.search :with => search_set_living.dup,
:page => 1, :per_page => 1000
#users declaring hability to move to the @city
search_set_mobile = search_set.merge({:mobile_cities_ids => @city.id })
users_mobile = User.search :with => search_set_mobile.dup, :page => 1, :per_page => 1000
#users living at a maximum distance from the origin point(custom distance for each user, max 30km)
search_set_around = search_set.merge({"@geodist" => 0.0..30_000.0})
users_around = User.search :geo => [@search_latitude * Math::PI/180 , @search_longitude * Math::PI/180],
:with => search_set_around.dup,
:page => 1, :per_page => 1000
users_around_filtered = users_around.dup.delete_if{|user| (user.mobility_distance * 1000)< user.sphinx_attributes['@geodist'] }
#merge the 3 results in a array
all_users = (users_mobile.flatten + users_around_filtered.flatten).uniq
#look for facets and paginate the array
@facets = User.facets :with => {:user_id => all_users.map(&:id)}
@users_to_display = all_users.paginate(:page => params[:page], :per_page => 10)
这是工作的罚款但我不满意: - 性能都不太好, -I要作为排序依据这样的多重属性的能力:为了=>“created_at DESC,@relevance DESC”
我想做的确切相同的搜索,但在一个狮身人面像的搜索。 我知道我应该使用"OR Logic with Attribute Filters" from the docs,但我不知道如何将它与一个geo_search调用... 我真的不知道该怎么做, 你们能帮我吗?
非常感谢,
太棒了!我只需要修改一下你的语法就可以使它工作: – alex 2012-08-05 15:12:01