0

Env:Ruby on Rails、Postgres

サービスの名前とその場所に一致する検索を行うのが難しくなっています...

例:「パリのピザ」

これには、SQLクエリを作成する前に構文アナライザが必要になると思います...

私が気付いていない技術がそこにあるかどうか疑問に思っています...はい、私のデータベースの検索エンジンのようなものです。

4

1 に答える 1

1

PostgreSQLを使用すると、複数の列を参照するtsv_vector列をテーブルに作成し、そのテーブルの更新トリガーを追加して最新の状態に保ち、全文検索を使用してクエリを作成できます。

create table food(
    table_id serial primary key,
    food_type text not null,
    location text not null,
    food_tsv tsvector
);

テーブルトリガーの作成

CREATE TRIGGER tsvector_food_update BEFORE INSERT OR UPDATE ON food
FOR EACH ROW EXECUTE PROCEDURE 
tsvector_update_trigger(food_tsv, 'pg_catalog.english', food, location);
CREATE INDEX food_index_tsv ON food USING gin(food_tsv);

サンプルSQLクエリは、関連性順に並べられた結果を提供します

SELECT * FROM (
    SELECT DISTINCT ON (f.table_id) f.*, ts_rank_cd(f.food_tsv, query) AS rank FROM to_tsquery(searchTerm) AS query, food as f
    WHERE (f.food_tsv @@ query)
    ORDER BY f.table_id DESC LIMIT :limit OFFSET :offset
) AS sub ORDER BY rank DESC
于 2013-03-10T22:05:05.277 に答える