【问题标题】:PostgreSql Search JSON And Match Whole TermPostgreSql 搜索 JSON 并匹配整个术语
【发布时间】: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 包含nikon50mm 但也可能包含其他单词的行?他们必须按这个顺序来吗?即 nikkor 50mm f/1.4 ai-s nikon 也应该匹配吗?
  • 我只想搜索匹配“nikon ai-s”、“nikon 50mm”、“nikkor 50mm”等内容的记录。我猜这是一个模糊匹配?
  • 是的,查看扩展名pg_trgm。否则,您可以使用带有通配符的正则表达式或LIKE,如@Kaushik Nayak 的回答。
  • 请查看我的答案,如果您发现答案有用,请考虑accepting,这样它也可以帮助其他人。另请阅读this

标签: postgresql


【解决方案1】:

您可以将ANY 与数组一起使用以进行多重比较。

 LIKE ANY(ARRAY['%nikon%ai-s%', 'nikon%50mm%', '%nikkor%50mm%'])

【讨论】:

  • 传入的字符串来自搜索查询,因此我无法控制该字符串是什么。
猜你喜欢
  • 2014-06-02
  • 2012-06-08
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 2014-11-25
  • 2014-08-17
  • 1970-01-01
  • 2023-01-13
相关资源
最近更新 更多