2-5k
我有一个在具有这种通用格式的条目之间变化的人员列表:
firstname1 lastname1, firstname2 lastname2, firstname3 lastname3 ...
我有一个user_table
包含关于250-300k
带有firstname
和lastname
列的条目。我想要做的是让用户将该名称列表输入到一个字段中,并返回数据库中具有匹配名称的所有用户。我的第一个直觉是创建一个name_search
看起来像这样的视图 ->
create view name_search as (
select
id,
to_tsvector(concat(firstname, ' ', lastname)) as search_field
from user_table
)
然后我可以通过将逗号分隔列表中的所有名称转换为这样的字符串来搜索它
const queryString = "(firstname1 <-> lastname1) | (firstname2 <-> lastname2) | (firstname3 <-> lastname3) ..."
然后我可以将该字符串传递给这个查询
select
*
from name_search
where search_field @@ to_tsquery(queryString)
我省略了一些细节,比如转义字符串等,但我的问题是这非常慢。我想知道是否有人可以帮助我创建一个更快的解决方案。
我在这里看不到全文搜索的案例。
您可以按原样为此查询提供输入字符串:
(firstname, lastname)
当输入列表不太长时,索引应该有助于提高性能。对于检索超过百分之几的所有行,顺序扫描无论如何都会更快。有关的: