我正在使用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"我得到了记录。为了能够使用部分匹配进行搜索,我需要做什么?
答案 0 :(得分:1)
english
词典并不会阻止昵称。
regress=> SELECT to_tsvector('english', 'Christopher'), to_tsquery('english', 'Chris');
to_tsvector | to_tsquery
---------------+------------
'christoph':1 | 'chris'
(1 row)
您还需要覆盖一个映射昵称的字典,因此christopher
可以限制为chris
。