使用pg_search gem在Heroku上进行全文搜索

mem*_*per 5 postgresql full-text-search ruby-on-rails heroku pg-search

我已经使用pg_search gem为我的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
Run Code Online (Sandbox Code Playgroud)

我的控制器代码看起来像

pg_search_scope :full_text_search,
:against => [
  :name, :description],
:using => {
  :tsearch => {
    :prefix => true,
    :dictionary => "english",
    :any_word => true
  }
}
Run Code Online (Sandbox Code Playgroud)

在Postgres 9.0.4上本地完全正常.但是,当我将其部署到heroku并搜索示例查询'test'时,它会引发错误

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 ):
Run Code Online (Sandbox Code Playgroud)

有关我错在哪里的建议以及我应该注意什么来解决这个错误?谢谢.

Gra*_*ins 13

我是主要的开发者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_search0.3.3,改进了错误信息.希望Heroku很快就会升级到9.0.我相信他们想要这样做,但他们显然不能在没有警告的情况下升级所有批发商.

  • @nertzy,偶然:heroku-postgresql插件的新开发计划是postgres 9.1并且是免费的.当你评论时,这不是现在,但现在. (5认同)