7

全文検索を行うレストランのデータベースがあります。コードは次のようになります。

SELECT * FROM restaurant WHERE restaurant.search_vector @@ plainto_tsquery(:terms);

そしてsearch_vector、次のように定義されています。

alter table restaurant add column search_vector tsvector;
create index restaurant_search_index on restaurant using gin(search_vector);
create trigger restaurant_search_update before update or insert on restaurant
    for each row execute procedure
    tsvector_update_trigger('search_vector',
    'pg_catalog.english','title');

さて、この検索で​​注目すべき問題は、バーベキューという言葉です。BBQ、バーベキュー、BBQ、BBQ、BBQ など、さまざまな方法で綴ることができます。誰かがこれらのいずれかを検索する場合、これらすべての用語でレストランを検索する必要があります。

私がオンラインで読んだことから、辞書を変更する必要があるようです (それはpg_catalog.englishですよね?) が、これについてどうすればよいかわかりません。

4

2 に答える 2

4

あなたがやりたいことはあなたの英語の辞書の前に同義語辞書を追加することのように聞こえます。ただし、これは1つの単語でのみ機能するため、3つの別々のトークンとして解析されるとBBQで問題が発生する可能性があります。

postgresql.orgドキュメントの同義語辞書

于 2012-08-07T19:55:16.713 に答える
1

似たような問題にぶつかったとき、Query Rewrites のオプションに出会いました。http: //www.postgresql.org/docs/8.3/static/textsearch-features.htmlを参照してください。

これは、書き換えテーブルに新しいルールを挿入するだけで書き換えルールを即座に拡張できるため、辞書に取り組むよりも簡単なアプローチです。

于 2012-08-07T20:00:56.947 に答える