0

Postgres 9.1 购物车包含产品表

create table products (
  id char(30) primary key,
  name char(50),
  description text );

购物车有搜索字段。如果在其中输入了某些内容,则自动完成下拉菜单必须显示按与此标准匹配的产品数量排序的最佳匹配产品。

如何在 postgres 9.1 中实现这样的查询?搜索应按产品表中的名称和描述字段执行。使用子字符串匹配就足够了。不严格要求具有复杂文本匹配的全文搜索。

更新

Word joote 可以是产品名称或描述的一部分。

例如,图像文本中的第一个匹配可能包含

.. See on jootetina ..

和其他产品

Kasutatakse jootetina tegemiseks ..

另一个大写

Jootetina on see ..

在这种情况下,查询应该返回单词 jootetina 和匹配计数 3。如何让它像在谷歌浏览器地址栏中输入搜索词时发生的自动完成一样工作?

如何实施?

或者如果这很困难,如何从所有与搜索词 joote 匹配的文本中返回单词 jootetina ?

4

2 回答 2

1

首先,不要使用数据类型char(n)。这是一个误解,你想要varchar(n)或只是text。我建议text

修复后,您需要一种基于索引的智能方法,否则这将是一场性能噩梦。原始列上的 trigram GIN 索引或text_pattern_ops单个单词的物化视图上的 btree 索引(带计数)。

对于单词之间的多次重复,MV 方法可能更胜一筹。

于 2016-09-30T12:29:56.100 回答
1
select word, count(distinct id) as total
from (
    select id,
        regexp_split_to_table(name || ' ' || description, E'\\s+') as word
    from products
) s
where position(lower('joote') in lower(word)) > 0
group by word
order by 2 desc, 1
于 2016-09-29T20:34:11.177 回答