5

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にデプロイしてサンプルクエリ「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 ):

私が間違っている場所と、このエラーを修正するために何を見なければならないかについての提案はありますか? ありがとう。

4

1 に答える 1

14

の主な開発者ですpg_search。その問題に遭遇してすみません!現在、PostgreSQL 8.3 (Heroku のデフォルト) に対して検索をpg_search使用するとバグが発生します。:prefix

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 にアップグレードされます。私は彼らがそうしたいと思っていると信じていますが、彼らは明らかに、警告なしに全員を大規模にアップグレードすることはできません.

于 2011-10-05T16:03:42.493 に答える