【问题标题】:Full-text search on Heroku using pg_search gem使用 pg_search gem 在 Heroku 上进行全文搜索
【发布时间】:2023-04-10 04:06:02
【问题描述】:

我已经为我的 Rails 应用程序使用 pg_search gem 实现了全文搜索

我创建索引的迁移看起来像

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 上本地运行完全正常。但是,当我将其部署到 heroku 并搜索示例查询“测试”时,它会引发错误

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 ):

关于我哪里错了,我应该看什么来解决这个错误有什么建议吗?谢谢。

【问题讨论】:

  • 搜索'test' 包括引号吗?
  • 不,搜索查询只是 test
  • 你能比较一下你的本地查询和在 heroku 上运行的查询(你已经发布了)。
  • 字符到字符都是一样的!
  • @membLoper 可能会有所帮助 devcenter.heroku.com/articles/…

标签: ruby-on-rails postgresql heroku full-text-search pg-search


【解决方案1】:

我是pg_search 的主要开发者。很抱歉你遇到了这个问题!现在,当使用:prefix 搜索 PostgreSQL 8.3(Heroku 的默认值)时,会出现 pg_search 错误。

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。我相信他们想这样做,但他们显然不能在没有警告的情况下批发升级每个人。

【讨论】:

  • 感谢您的快速回答。欣赏它。
  • 只是在我的本地机器上使用 PostgreSQL 8.4 的上述场景按预期工作。
  • 感谢您的更新,凯莉。当我处理这个问题时,我会确保检查这一点。
  • @Chance 不,即使在 Cedar 上,您也不能免费获得 9.x。您必须从 Heroku 购买独立的 PostgreSQL 服务才能获得 9.x。事实上,您发布的链接是指向独立服务的postgres.heroku.com
  • @nertzy,机会:heroku-postgresql 插件的新开发计划是 postgres 9.1 并且免费。当您发表评论时,它不在,但现在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-06
  • 2011-04-14
  • 2023-04-08
  • 2012-07-29
  • 1970-01-01
  • 2023-03-02
  • 2010-11-11
相关资源
最近更新 更多