postgresql 如何在postgres中通过匹配数量获得最佳匹配产品

oprakyz7  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(2)|浏览(92)

Postgres 9.1购物车包含产品表

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

字符串
购物车具有搜索字段。如果在其中输入了某些内容,则自动完成下拉列表必须显示按与此条件匹配产品数量排序最佳匹配产品
如何在posterre 9.1中实现这样的查询?应按产品表中的名称和说明字段执行搜索。使用子字符串匹配就足够了。不严格要求使用复杂文本匹配的全文搜索。

更新

单词joote可以是产品名称或描述的一部分。
例如,对于图像文本中的第一个匹配项,可以包含

.. See on jootetina ..


和其他产品

Kasutatakse jootetina tegemiseks ..


另一个是大写

Jootetina on see ..


在这种情况下,查询应返回单词jootetina和匹配计数3。如何让它像自动完成一样工作,当搜索词在谷歌Chrome地址栏中键入时会发生什么?
如何落实这一点?
或者如果这是困难的,如何返回单词jootetina形式的所有这些文本匹配搜索词joote?

0sgqnhkj

0sgqnhkj1#

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

字符串

yzuktlbb

yzuktlbb2#

首先,不要**使用char(n)数据类型。您需要varchar(n)text。我建议text。请参阅:

  • 使用数据类型“text”存储字符串有什么缺点吗?

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

MV方法对于单词之间的许多重复可能是上级的。

相关问题