0

我有一个 Ruby on Rails 站点,它使用 Thinking sphinx 来搜索 postgres 数据库。

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

用一个例子来充分说明:
我的网站是为那些开发自己的黑白电影的人准备的。
我有一张食谱表,人们在上面描述他们如何开发电影。该表有一个名为“stand_ Developed”的布尔列(一种显影胶片的方法)。
当用户搜索“stand”一词时,我想返回该字段为真的结果。

我已经浏览了sphinx 文档,但如果可能的话,我并没有真正找到。

我想我可以通过解析查询术语并添加条件来破解我的控制器方法中的某些内容,但是有没有更简洁的方法呢?

4

3 回答 3

1

This is what I've done as far as searching on boolean fields using ThinkingSphinx. Pass stand_developed as a URL parameter along with your query_string in the following ways:

  1. URL for a general query without search on stand_developed will be http://yoursite.com/search?q=your_query_string
  2. URL for query with stand_developed == TRUE will be http://yoursite.com/search?q=your_query_string&stand_developed=1
  3. URL for query with stand_developed == FALSE will be http://yoursite.com/search?q=your_query_string&stand_developed=0

Then, in your controller, you would do this:

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
于 2010-01-31T05:38:16.467 回答
1

您可以测试 params[:search] 是否包含文本“stand”,然后从那里完成搜索。您不需要在表中添加额外的列,这只是不需要的开销。

if params[:search].downcase.include?('stand')
  Model.search params[:search], :with => {:stand_developed => true}
else
  Model.search params[:search]
end
于 2010-10-27T03:52:30.720 回答
0

我现在想出了一个解决方案。

我尝试了我在问题中提到的“hack”——解析“stand”这个词并明确地搜索它(Paul Davis 的答案的一个变体),但效果不是很好。

我没有在我的问题中解释这一点(在我问的时候没有意识到全部含义)但是如果用户在他们的食谱描述中也使用了“立场”这个词,我也需要它来匹配。

所以,我试图让 sphinx 添加一个条件,如“如果stand_develop 为真或注释包含'stand'”,但我似乎找不到正确的语法。它还必须处理任何其他搜索文本。

最后,我在我的食谱表中添加了一个名为“search_tags”的额外列,如果用户在添加食谱时选择“stand_ Developed”,我会在其中添加“stand”一词。然后我让 Sphinx 索引该字段以及我的其他字段,并且一切正常。

于 2010-02-05T09:43:30.250 回答