2012-05-09 38 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'的空数组。无论如何,它现在工作,感谢帮助我追踪这件事! –