我尝试使用 boost_by_distance 通过 Searchkick 编写查询。但似乎最近的位置没有被提升。
我想找到距离城市 30 公里的任何地方,并将结果提高 20 公里。
但是,即使在距城市地理位置非常近的地理位置进行测试,也没有任何回报。
主文件
...
city = City.search(params[:city], fields: [{city: :word_start}])
...
@o = Organization.search("*",
boost_by_distance: {field: :loc, origin: [city[0].try(:latitude).to_f, city[0].try(:longitude).to_f], function: :gauss, scale: "20km", decay: 0.5},
where: {loc: {near: [city[0].try(:latitude).to_f, city[0].try(:longitude).to_f], within: "30km"}},
page: params[:page], per_page: 20)
...
组织.rb
class Organization
include Mongoid::Document
include Mongoid::Geospatial
searchkick index_name: "organization",
locations: ["loc"],
word_start: ['base']
def search_data
attributes.merge loc: [latitude, longitude]
{
base: base,
place: place
}
end
field :base, type: Srting
field :place, type: Srting
field :latitude, type: Float
field :longitude, type: Float
field :location, type: Point, spatial: true
index({ base: 1, place: 1, location: "2d" })
end
城市.rb
class City
include Mongoid::Document
include Mongoid::Geospatial
searchkick index_name: "city",
word_start: ['city']
def search_data
{
city: city,
}
end
field :city, type: String
field :latitude, type: Float
field :longitude, type: Float
end
我尝试了很多方法来编写search_data,因为可能自己的organization.rb search_data 不正确。此外,我在http://localhost:9200/_plugin/head/
的浏览器中检查了 loc FIELDS ,但没有输入字段。
请让我知道出了什么问题或如何检查实际发送的查询。