1

boost_by_distance を使用して Searchkick でクエリを作成してみます。しかし、最も近い場所はブーストされていないようです。
そして、都市から 30km 以内の場所を見つけて、さらに 20km 以内に結果を上げたいと考えています。
しかし、都市のジオロケーションから非常に近いジオロケーションでテストしても何も返されません。

main.rb

...  
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   

独自の organization.rb search_data が正しくない可能性があるため、search_data の書き方をいろいろ試しました。また、ブラウザーでhttp://localhost:9200/_plugin/head/
の loc FIELDS をチェックしましたが、入力フィールドはありませんでした。 何が間違っているか、実際にクエリを送信していることを確認する方法を教えてください。

4

0 に答える 0