Как включить словарь :tsearch для мультипоиска 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],

Я пытался заменить квадрат на фигурные скобки и все другие перестановки синтаксиса, которые я могу придумать, но безуспешно.

Какой здесь правильный синтаксис? И почему мои попытки недействительны, поскольку я следовал синтаксису поиска по области?


person Andy Harvey    schedule 09.05.2012    source источник


Ответы (1)


То, что вы опубликовали, не является допустимым синтаксисом Ruby.

Вы хотите что-то вроде этого:

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

Причина в том, что вы должны использовать хэш, если хотите иметь пары ключ-значение. По сути, pg_search допускает 2 синтаксиса:

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

что означает «использовать tsearch и trigram, оба с параметрами по умолчанию»

or

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

что означает "использовать tsearch с некоторыми параметрами из optionsHash1 и использовать триграмму с некоторыми параметрами из OptionsHash2"

Дайте мне знать, если я могу что-то уточнить. Это довольно простой синтаксис Ruby, но я понимаю, что тот факт, что pg_search принимает оба формата, может сбить с толку тех, кто не знаком с ним.

person Grant Hutchins    schedule 11.05.2012
comment
Спасибо @nertzy. Я мог бы поклясться, что попробовал этот синтаксис, хотя я опубликовал другой вариант своего вопроса, пытаясь следовать рекомендациям. Если подумать, на самом деле я мог пропустить пустой массив для :trigram. В любом случае, теперь это работает, спасибо, что помогли мне отследить это! - person Andy Harvey; 11.05.2012