我对 PostgreSQL 中的模糊搜索和三元组相当陌生。我在数据库中有几十万个产品,我希望能够选择名称最接近另一个产品名称的产品。
经过几个小时的试验和研究,我安装了pg_trgm
扩展并创建了一个三元索引,如下所示:
CREATE INDEX simpleproduct_name_lowercase
ON simpleproduct
USING gist(lower(name) gist_trgm_ops);
以下查询在大约 0.07 秒内执行,目前令人满意:
SELECT 'coffee' <-> lower(name) as distance, gtin, name
FROM simpleproduct
ORDER BY distance
LIMIT 10
问题是,我需要进一步指定要搜索的产品类型。我想如果我这样做,它会比以前更快,因为我不是模糊搜索整个数据库,而是只搜索一组特定的产品。但是,由于某种原因,如果我执行以下操作:
SELECT 'coffee' <-> lower(name) as distance, gtin, name
FROM simpleproduct
WHERE id < 10000
ORDER BY distance
LIMIT 10
...执行时间大约翻了一番。谁能解释为什么会这样?另外,如果您在这方面有经验,您会建议不要使用 PostgreSQL 并使用 Elastic 吗?