一个领域的搜索匹配多个列在数据库
问题描述:
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