如何启用:pg_search多搜索的tsearch词典?

时间:2012-05-09 08:43:10

标签: ruby-on-rails pg-search

我正在将pg_search添加到Rails应用程序中。我正在遵循github和railscast上的说明,但我遇到了问题。

我正在设置一个多模型搜索,我有一个基本的实现工作。但是我想扩展pg_seach来使用它的英语词典。

我已经有了初始化程序:

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

所以,从我读过的内容来看,添加词典似乎应该像

一样简单
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],

我已经尝试过替换花括号的方块,以及我能想到的所有其他语法排列,但没有运气。

这里的语法是什么?为什么我的尝试没有效果,因为我遵循了范围搜索的语法?

1 个答案:

答案 0 :(得分:10)

您发布的内容不是有效的Ruby语法。

你想要这样的东西:

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

原因是如果您想拥有键值对,则必须使用哈希值。基本上,pg_search允许2种语法:

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

表示“使用tsearch和trigram,两者都使用默认选项”

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

表示“使用来自optionsHash1的一些选项的tsearch,并使用来自OptionsHash2的一些选项的trigram”

如果有任何我可以做的澄清,请告诉我。这是非常基本的Ruby语法,但我理解pg_search接受这两种格式的事实可能会让那些不那么熟悉的人感到困惑。