思维狮身人面像搜索中的条件“或”

时间:2011-04-11 16:58:08

标签: ruby-on-rails thinking-sphinx

使用RoR 2.3.8。

这是我的控制器代码:

class CitiesController < ApplicationController
  def show
    @city = City.find(params[:id])
    @shops = Shop.search @city.name, {
      :conditions => {:country => @city.country && (:city => @city.name || :state => @city.state)},
      :page => params[:page],
      :per_page => 100
      }
  end
end

:conditions => {:country => @city.country && (:city => @city.name || :state => @city.state)}显然不起作用,因为我只想解释我想要实现的目标。

:city:state将是Spots表中的列,而不是Cities表中的列。我希望结果返回其中一个满足条件。但不知道该怎么做。

感谢。

2 个答案:

答案 0 :(得分:8)

Tass说得对 - 通过你的TS搜索电话,看起来应该是这样的:

def show
  @city = City.find(params[:id])
  @shops = Shop.search "#{@city.name} @country #{@city.country} (@city #{@city.name} | @state #{@city.state})",
    :match_mode => :extended,
    :page       => params[:page],
    :per_page   => 100
    }
end

你会注意到我已经设置了匹配模式 - 如果你使用:conditions参数,Thinking Sphinx会自动执行此操作 - 但是在手动构建查询时,你需要自己设置它。

答案 1 :(得分:4)

将原始搜索放置到Sphinx - 您应该在TS文档中找到正确的方法。一个reference for raw search。你可能想要像

这样的东西
"@city_country #{@city.country} (@city_name #{@city.name} | @city_state #{@city.state})"

(我不确定TS如何命名索引。检查一下。)