创建高级搜索选项

时间:2014-11-14 21:15:42

标签: ruby-on-rails

使用思维sphinx gem有人知道如何设置高级搜索表单吗?

我有单个搜索表单查询工作,但我也可以选择让用户从高级搜索框中选择选项。

以下是正常的标准单行搜索框代码:

        = form_tag searches_path, method: :get do
          span.secrch_box_bg
            input.text_input name='search' type="text" placeholder="e.g (female), likes dogs, has a job)"
            input.find_btn type="submit" value="Find" /

我想要做的是从下拉菜单中提供预选选项。用户可以选择性别(男性或女性),种族(白人,黑人,亚洲人,西班牙裔等),宗教(基督徒,无神论者,犹太人等)以及“用户”表中的其他属性。

有人可以举例说明如何做到这一点吗?感谢

我正在摆脱我的自定义高级搜索表单,我想在其位置使用Thinking Sphinx。

                 .search_box
        h1 Search and find a mate.
        = form_tag searches_path, method: :get do
          span.secrch_box_bg
            input.text_input name='search' type="text" placeholder="e.g (female), likes dogs, has a job)"
            input.find_btn type="submit" value="Find" /
      h4
        | or use our
        a.adv_search href="#" 
          = image_tag "adv_link.png"
          span Advanced Search
      .advanced_search_div.hide
      = form_tag searches_path, method: :get do
          .form_container
            .row style='padding-top:20px;'
              .col
                label I am a
                select.large
                  option male
                  option female
              .select2
                .col.col2 style='width:300px;'
                  label Seeking
                  select.large
                    option female
                    option male
              .select1
                .col.col3.col33 style='width:175px;'
                  label Ages
                  = select_tag :min_age, options_for_select((18..65),18), {class: 'small'}

              .select5
                .col.col4
                  label to
                  = select_tag :max_age, options_for_select((20..65),65), {class: 'small'}

              .select4
                .col.col7 style='margin-left: 10px;width:233px;'
                = select_tag :ethnicity, options_for_select(['Asian', 'Black', 'Biracial', 'Indian', 'Hispanic/Latin', 'Middle Eastern', 'Native American', 'Pacific Islander', 'White', 'Other']), prompt: 'ethnicity/race'

            .row style='padding-top:20px;'
              .col.col5 style='margin-right:18px;'
                label Near
                = text_field_tag :zip_code, nil, placeholder: "enter zip here", class: 'text_input'

              .col.col.col30 style='width:190px;'
                = select_tag :children, options_for_select(['I want kids now','I want one someday']), prompt: 'child preference'

              .select5
                .col.col3.col31 style='width:100px;'
                  = select_tag :religion, options_for_select(['Agnostic', 'Atheist', 'Christian', 'Catholic', 'Buddhist', 'Hindu', 'Jewish', 'Muslim', 'Other']), prompt: 'religion'
            .btm_sec style='margin-top:20px;'
              ul.form_list
                li
                  a href="#" 
                    = image_tag "form_icon1.png"
                    span.color Save this Search
                li
                  a href="#" 
                    = image_tag "form_icon2.png"
                    span Load
                li
                  a href="#" 
                    = image_tag "form_icon3.png"
                    span Reset
              input.find_btn type="submit" value="Find" /
          .btm_search_detail
            a.simple_search href="#" 
              = image_tag  "simple_search_icon.png" 
              span Simple Search

指数:

ThinkingSphinx::Index.define :location, :with => :active_record do 
  indexes city 

  has "RADIANS(locations.latitude)",  :as => :latitude,  :type => :float
  has "RADIANS(locations.longitude)", :as => :longitude, :type => :float
end 

ThinkingSphinx::Index.define :user, :with => :active_record do 
  indexes name, :as => :user, :sortable => true 
  indexes religion, birthday, about_me, height, career, feet, inches, sexuality, children, user_smoke, user_drink, politics, gender, ethnicity, education, username
  has created_at, updated_at 
  has "RADIANS(locations.latitude)",  :as => :latitude,  :type => :float
  has "RADIANS(locations.longitude)", :as => :longitude, :type => :float
  has(:id, :as => :user_id)
  has(:zip_code, :as => :zip_code, :type => :integer)
  set_property :wordforms => 'lib/word.txt'
  join location
end 

1 个答案:

答案 0 :(得分:1)

您可以随意设置表单。关键是你需要将表单参数转换为搜索选项Hash以传递给ThinkingSphinx。

例如,对于索引,您将指定条件:

User.search(query, :conditions => { :ethnicity => params[:ethnicity], :religion => params[:religion] })

对于'有'您要指定的属性:作为搜索选项。此外,您可能应该将年龄添加为“年龄”。属性,所以你可以使用Sphinx进行最大计算:

User.search(query, :with => { :age => 20..65 })

另请参阅:http://pat.github.io/thinking-sphinx/searching.html