2010-01-24 81 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 
相關問題