Postgres全文搜索多列

时间:2014-11-14 04:17:38

标签: postgresql laravel postgresql-9.3 laravel-5

我正在使用Postgres 9.3 w / Laravel 5,我已经设置了以下迁移:

DB::statement("ALTER TABLE users ADD COLUMN searchtext TSVECTOR");
DB::statement("UPDATE users SET searchtext = to_tsvector('english', first_name || ' ' || last_name || ' ' || email)");
DB::statement("CREATE INDEX searchtext_gin ON users USING GIN(searchtext)");
DB::statement("CREATE TRIGGER ts_searchtext BEFORE INSERT OR UPDATE ON users FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger('searchtext', 'pg_catalog.english', 'first_name', 'last_name', 'email')");

如果我有第一个名字" Christopher"的条目,我运行以下查询我没有结果

return User::whereRaw("searchtext @@ to_tsquery('Chris')")->get();

如果我搜索" Christopher"我得到了记录。为了能够使用部分匹配进行搜索,我需要做什么?

1 个答案:

答案 0 :(得分:1)

english词典并不会阻止昵称。

regress=> SELECT to_tsvector('english', 'Christopher'), to_tsquery('english', 'Chris');
  to_tsvector  | to_tsquery 
---------------+------------
 'christoph':1 | 'chris'
(1 row)

您还需要覆盖一个映射昵称的字典,因此christopher可以限制为chris