2010-01-24 80 views
0

我有a Ruby on Rails site,它使用思维狮身人面像来搜索postgres数据库。在sphinx中将一个布尔型字段索引为一个字符串

我正在搜索的表中的一个字段是一个布尔值。 我希望能够在搜索查询中使用某个关键字时匹配该布尔值。

要充分说明一个例子:
我的网站是为开发自己的黑白电影的人。
我有一个配方表,人们描述他们如何开发电影。该表有一个名为“stand_developed”(开发电影的方法)的布尔列。
我想在用户搜索单词“stand”时返回该字段为true的结果。

我经历过的sphinx docs并没有真正发现,如果可能的。

我想我可以通过解析查询条件和增加的条件,但有没有做的更清洁的方式破解我的控制器方法里面的东西?

回答

0

,我想出了一个解决这个现在。

我尝试了“黑客”我在我的问题提到 - 解析词“站”,寻找明确它(从保罗·戴维斯回答的变化),但它并不能很好地工作。

我没有解释这在我的问题(不知道在我问当时的全部含义),但我需要它也匹配,如果用户在他们的食谱描述中使用的词“站”了。

因此,我试图让狮身人面像沿着“如果stand_developed为true或笔记包含'stand'的行添加条件”,但我似乎无法找到正确的语法。 它也必须处理任何其他搜索文本。

最后,我增加了一个额外的列到我的所谓的“search_tags”配方表和我加上“立”这个问题,如果添加配方,当用户选择“stand_developed”。 然后我得到狮身人面像索引该领域,以及我的其他领域,它都完美的作品。

1

这就是我使用ThinkingSphinx搜索布尔字段所做的。通过stand_developed与您QUERY_STRING通过以下方式沿着URL参数:

  1. URL上stand_developed没有搜索一般查询将http://yoursite.com/search?q=your_query_string
  2. URL与stand_developed == TRUE查询将http://yoursite.com/search?q=your_query_string&stand_developed=1
  3. 网址查询与stand_developed == FALSEhttp://yoursite.com/search?q=your_query_string&stand_developed=0

然后,在你的控制器,你可以这样做:

if params[:stand_developed] && params[:stand_developed].to_i == 1 
    # perform query search with stand_developed == true 
    @search_results = YourModel.search(params[:q], :with => {:stand_developed => true}) 
elsif params[:stand_developed] && params[:stand_developed].to_i == 0 
    # perform query search with stand_developed == false 
    @search_results = YourModel.search(params[:q], :with => {:stand_developed => false}) 
else 
    # perform general query search 
    @search_results = YourModel.search(params[:q]) 
end 
1

如果params [:search]包含文本'stand',然后从那里完成搜索,那么您可以刚测试一下。您不需要在表格中添加额外的列,这只是不需要的开销。

if params[:search].downcase.include?('stand') 
    Model.search params[:search], :with => {:stand_developed => true} 
else 
    Model.search params[:search] 
end 
相关问题