【发布时间】:2019-03-08 02:22:58
【问题描述】:
我有一个使用 JSON 存储的 Postgres 数据库。我有一张相机和镜头表,其中包含一个要搜索的属性,称为 BrandAndModel。相关的 JSON 部分如下所示,并存储在名为“data”的列中:
"BrandAndModel": "nikon nikkor 50mm f/1.4 ai-s"
我有一个针对这个品牌和型号字符串的 LIKE 查询,但它只返回字符序列匹配的结果。例如,上面确实得到了“nikkor 50mm”的结果,但没有得到“nikon 50mm”的结果。
我不是 SQL 专家,我不确定我需要使用什么来匹配更多可能的组合。
我的查询如下所示
SELECT * FROM listing where data ->> 'Product' ->> 'BrandAndModel' like '%nikon 50mm%'
我怎样才能让这个查询匹配“nikon 50mm”?
【问题讨论】:
-
澄清一下,您想过滤
BrandAndModel包含nikon和50mm但也可能包含其他单词的行?他们必须按这个顺序来吗?即nikkor 50mm f/1.4 ai-s nikon也应该匹配吗? -
我只想搜索匹配“nikon ai-s”、“nikon 50mm”、“nikkor 50mm”等内容的记录。我猜这是一个模糊匹配?
-
是的,查看扩展名
pg_trgm。否则,您可以使用带有通配符的正则表达式或LIKE,如@Kaushik Nayak 的回答。
标签: postgresql