searchkick在位置半径中找到

时间:2017-04-06 08:13:31

标签: ruby-on-rails ruby searchkick

我想知道解决这个问题的最佳方法是什么。我有一个搜索功能,如下所示:

  def search
    search_options = {
      misspellings: { edit_distance: 2 },
      fields: [:eventname, :date],
      order: { date: :asc, eventname: :asc },
      match: :word_start,
      suggest: true,
      page: params[:page],
      per_page: 20
    }
    if params[:date_from].present?
      datefrom = params[:date_from].to_datetime.strftime('%Y-%m-%d')
      dateto = params[:date_to].to_datetime.strftime('%Y-%m-%d')
      search_options[:where] =  { date: {gte: datefrom, lte: dateto} }
    end

    @events = Event.search params[:search], search_options
    if @events.results.any?
      render 'events/results'
    else
      @popevents = Event.limit(3).order('RANDOM()')
      render 'events/noresults'
    end
  end

现在我想要做的是添加搜索功能,允许人们搜索他们输入的邮政编码50英里内的事件。

我的事件表中有一个邮政编码字段,其中包含所有事件位置的邮政编码。

最好的方法是什么? (简单,如果可能的话,有点像握住你的手指导会很棒!)

萨姆

1 个答案:

答案 0 :(得分:0)

查看geocoder gem。数据库或Rails中不支持本机邮政编码搜索,但您可以使用地理编码服务获取您存储的每个地址的纬度和经度。这涉及将这些列添加到您的数据库中。

geocode有很好的文档,它可以帮助你进行地理编码(获取lat / lng)和按距离搜索(尽管你也可以使用searchkick