【问题标题】:Sphinx search with optional params带有可选参数的 Sphinx 搜索
【发布时间】:2023-04-08 08:28:01
【问题描述】:

我想使用带有可选参数的搜索(Thinking Sphinx)。

在我的控制器中,我有 3 个参数:

params[:model_id], params[:engine_id], params[:city_id]

控制器

  def search  
    @search = Car.search :conditions => {
      :model_id => params[:model_id],
      :engine_id => params[:engine_id],
      :city_id => params[:city_id]
      }
  end

型号

define_index do
    indexes model_id
    indexes city_id
    indexes area_id
    indexes engine_id
    indexes mileage
  end

当其中一个参数为 nil 时,我得到一个错误:

提取的源代码(第 4 行附近):

1: Result:
2: %br
3: %br
4:   = render :partial => "search_item", :collection => @search, :as => :item

index car_core: syntax error, unexpected TOK_FIELDLIMIT near '  @engine_id  @city_id'

UPD1:

我的表格

= form_tag search_adverts_path, :method => :get, :id => 'admin_quick_filter' do
  %label
    = t('form.mileage')
  = text_field_tag :min_mileage, params[:min_mileage]
  = text_field_tag :max_mileage, params[:max_mileage]
  %br
  = select_tag :model_id, options_for_select(Model.all.collect{|c| [c.name, c.id]} , params[:model_id]), :include_blank => true
  %br
  = select_tag :engine_id, options_for_select(Engine.all.collect{|c| [c.name, c.id]} , params[:engine_id]), :include_blank => true
  %br
  = select_tag :city_id, options_for_select(City.all.collect{|c| [c.name, c.id]} , params[:city_id]), :include_blank => true
  %br
  %br
  = submit_tag t('form.search')


= render "search_result"

【问题讨论】:

  • 也许我应该使用 sphinx_scope ?

标签: ruby-on-rails ruby-on-rails-3 search sphinx thinking-sphinx


【解决方案1】:

在搜索时,当您提供 :conditions 时,ThinkingSphinx 会在您的查询中附加 @filedname 以将搜索范围扩展到该字段。并且 sphinx 不处理nil values。因此,您应该在将 nil 值传递给 search() 方法之前检查它。

请记住,Sphinx 不支持 SQL 比较 运算符——它有自己的查询语言。 :conditions 选项必须 是一个散列,每个键是一个字段,每个值都是一个字符串

【讨论】:

    【解决方案2】:
    define_index do
      indexes name
    
      has mileage
    end
    

    Car.search :with => {:mileage => 100..150000}

    工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 2015-01-29
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      相关资源
      最近更新 更多