0
ENV:Ruby on Rails的,Postgres的一個領域的搜索匹配多個列在數據庫
我收到挑戰是要進行搜索,將匹配服務,以及它的位置的名稱...
例如:「比薩在巴黎」
我相信這會形成SQL查詢之前需要語法分析器...
我只是想知道,如果有一種技術在那裏,我不知道的, ...是一些像我的數據庫的搜索引擎。
ENV:Ruby on Rails的,Postgres的一個領域的搜索匹配多個列在數據庫
我收到挑戰是要進行搜索,將匹配服務,以及它的位置的名稱...
例如:「比薩在巴黎」
我相信這會形成SQL查詢之前需要語法分析器...
我只是想知道,如果有一種技術在那裏,我不知道的, ...是一些像我的數據庫的搜索引擎。
在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
謝謝你的提示,這裏有很多信息要消化!這是@@運營商,它有什麼作用?並且我不知道在文檔 – zabumba 2013-03-10 22:37:45
中找到它的位置@@將搜索短語映射到tsv_vector,這裏有更簡單的示例http://linuxgazette.net/164/sephton.html,這只是一種方法以實現全文搜索,它對我很好 – DaveB 2013-03-10 22:46:46
這裏更多關於全文搜索的信息http://www.youlikeprogramming.com/2012/01/full-text-search-fts-in-postgresql-9-1/ THx再次戴夫,它工作得很好! – zabumba 2013-03-29 12:04:24