2012-05-09 33 views
4

我將pg_search添加到Rails應用程序中。我按照github上的說明和這個railscast,但我遇到了一個問題。如何啓用:用於pg_search多搜索的tsearch字典?

我正在建立一個多模型搜索,並且我有一個基本的實現工作。但是我想擴展pg_seach來使用它的英文字典。

我已經有一個初始化:

PgSearch.multisearch_options = { 
    :using => [:tsearch,:trigram], 
    :ignoring => :accents 
} 

所以,從我讀過的東西,它看起來像添加dictioary應儘可能簡單

PgSearch.multisearch_options = { 
    :using => [:tsearch => [:dictionary => "english"],:trigram], 
    :ignoring => :accents 
} 

但是,當我開始我的服務器

...config/initializers/pg_search.rb:2: syntax error, unexpected ']', expecting tASSOC (SyntaxError) 
    :using => [:tsearch => [:dictionary => "english"],:trigram], 

我試着換換大括號的花括號,和所有其他語法排列我可以不t蠢貨,但沒有運氣。

這裏的正確語法是什麼?爲什麼我的嘗試不成立,因爲我遵循範圍搜索的語法?

回答

10

你發佈的內容是無效的Ruby語法。

你想是這樣的:

PgSearch.multisearch_options = { 
    :using => { 
    :tsearch => { 
     :dictionary => "english" 
    }, 
    :trigram => {} 
    }, 
    :ignoring => :accents 
} 

的原因是,如果你想擁有鍵值對,你必須使用一個哈希。所以基本上,pg_search允許2個語法:

:using => someArray # such as [:tsearch, :trigram] 

這表示 「使用TSEARCH和卦,都使用默認選項」,意思是「用TSEARCH從一些選項

:using => someHash # such as {:tsearch => optionsHash1, :trigram => optionsHash2} 

optionsHash1,並使用從選項哈希2的一些選項trigram「

讓我知道是否有什麼我可以做澄清。這是非常基本的Ruby語法,但我明白,pg_search接受這兩種格式的事實可能會讓那些不熟悉的人感到困惑。

+0

謝謝@nertzy。我可以發誓我試過這個語法,儘管我在我的問題中發佈了一個不同的變體,試圖遵循這些指導原則。想想看,實際上我可能已經省略了':trigram'的空數組。無論如何,它現在工作,感謝幫助我追蹤這件事! –