Полнотекстовый поиск на Heroku с использованием гем pg_search

Я реализовал полнотекстовый поиск, используя гем pg_search для своего приложения Rails.

Моя миграция для создания индекса выглядит так

execute(<<-'eosql'.strip)
  CREATE index mytable_fts_idx
  ON mytable
  USING gin(
    (setweight(to_tsvector('english', coalesce("mytable"."name", '')), 'A') ||
    ' ' ||
    setweight(to_tsvector('english', coalesce("mytable"."description",'')), 'B')
    )
  )
eosql

И мой код контроллера выглядит так

pg_search_scope :full_text_search,
:against => [
  :name, :description],
:using => {
  :tsearch => {
    :prefix => true,
    :dictionary => "english",
    :any_word => true
  }
}

который отлично работает локально на Postgres 9.0.4. Однако, когда я развертываю то же самое на героку и ищу пример запроса «тест», он выдает ошибку

PGError: ERROR:  syntax error in tsquery: "' test ':*"

SELECT COUNT(count_column) FROM (SELECT  1 AS count_column FROM "mytable"  WHERE (((to_tsvector('english', coalesce("mytable"."name", '')) || to_tsvector('english', coalesce("mytable"."description", ''))) @@ (to_tsquery('english', ''' ' || 'test' || ' ''' || ':*')))) LIMIT 12 OFFSET 0) subquery_for_count ):

Любые предложения о том, где я ошибаюсь и что я должен посмотреть, чтобы исправить эту ошибку? Спасибо.


person membLoper    schedule 05.10.2011    source источник
comment
Это поиск 'test' с кавычками?   -  person rdvdijk    schedule 05.10.2011
comment
Нет, поисковый запрос был просто test   -  person membLoper    schedule 05.10.2011
comment
Можете ли вы сравнить свой локальный запрос и тот, который выполняется на героку (который вы уже опубликовали).   -  person rdvdijk    schedule 05.10.2011
comment
То же самое, характер к персонажу!   -  person membLoper    schedule 05.10.2011
comment
@membLoper может помочь devcenter.heroku.com/articles/   -  person Hishalv    schedule 05.10.2011


Ответы (1)


Я главный разработчик pg_search. Сожалеем, что вы столкнулись с этой проблемой! Прямо сейчас есть ошибка pg_search при использовании поиска :prefix в PostgreSQL 8.3 (по умолчанию для Heroku).

https://github.com/Casecommons/pg_search/issues/10

Сейчас это мой главный приоритет. Я все еще ищу лучший способ заставить набор тестов работать как с 8.x, так и с 9.x.

Обновление: к сожалению, поиск :prefix вообще не работает с PostgreSQL 8.3. Функциональность была представлена ​​в версии 8.4. Я выпустил pg_search 0.3.3, в котором улучшено сообщение об ошибке. Надеюсь, Heroku скоро обновится до 9.0 по всем направлениям. Я считаю, что они хотят это сделать, но они, очевидно, не могут просто обновить всех без предупреждения.

person Grant Hutchins    schedule 05.10.2011
comment
Спасибо за быстрый ответ. Ценить это. - person membLoper; 06.10.2011
comment
Просто хочу отметить, что описанный выше сценарий работает, как и ожидалось, с PostgreSQL 8.4 на моем локальном компьютере. - person kelly.dunn; 12.10.2011
comment
Спасибо за новость, Келли. Я обязательно проверю это, когда буду работать над этим вопросом. - person Grant Hutchins; 17.10.2011
comment
Я обновил свой ответ. К сожалению, это невозможно с PostgreSQL 8.3.11 от Heroku. - person Grant Hutchins; 23.10.2011
comment
Похоже, что heroku обновил postgres до версии 9.0: devcenter.heroku.com/articles/heroku-postgres -документация - person Chance; 30.12.2011
comment
@Chance Это документация для автономной службы PostgreSQL от Heroku (postgres.heroku.com), которая отличается от 8.3 вы получаете с обычным хостингом PostgreSQL. - person Grant Hutchins; 06.01.2012
comment
@nertzy где? Если вы нашли это где-то еще на их сайте, то, скорее всего, это неправильно. Это ясно указывает на 9.0.5 в ссылке, которую я разместил ранее, а также здесь: postgres.heroku.com/pricing - person Chance; 10.01.2012
comment
@nertzy ах, я неправильно понял твое заявление. Я считаю, что вы должны быть на кедре +, чтобы получить 9.x.x - person Chance; 11.01.2012
comment
@nertzy, шанс: новый план разработки аддона heroku-postgresql — это postgres 9.1, и он бесплатный. Этого не было, когда вы комментировали, но сейчас. - person Will; 30.07.2012