0

我正在使用带有 Laravel 5 的 Postgres 9.3,并且我已经设置了以下迁移:

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”,我会得到记录。我需要做什么才能使用部分匹配进行搜索?

4

1 回答 1

1

字典不干english昵称。

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

您还需要覆盖一个映射昵称的字典,因此christopher可以将其提取为chris.

于 2014-11-14T04:44:13.657 回答