Sql 如何使用URL slug在Postgres中执行查询?
假设我有一个URL,如下所示:Sql 如何使用URL slug在Postgres中执行查询?,sql,postgresql,Sql,Postgresql,假设我有一个URL,如下所示: www.somewebsite.com/dinning/caseys+grill 我在Postgres中有一个business\u listings表,其中包含一列business\u name。我在表格中有一条记录,上面写着“凯西格栅” 如何查询'caseys+grill'与'Casey's grill' 我需要使用全文搜索吗?我该怎么做呢?既然你不是在搜索普通单词,而是在搜索专有名称,而且你可能还想找到拼写相似的结果,那么你应该使用GIN索引和相似性搜索。既然
www.somewebsite.com/dinning/caseys+grill
我在Postgres中有一个business\u listings
表,其中包含一列business\u name
。我在表格中有一条记录,上面写着“凯西格栅”
如何查询'caseys+grill'
与'Casey's grill'
我需要使用全文搜索吗?我该怎么做呢?既然你不是在搜索普通单词,而是在搜索专有名称,而且你可能还想找到拼写相似的结果,那么你应该使用GIN索引和相似性搜索。既然你不是在搜索普通单词,而是在搜索专有名称,而且你可能还想找到拼写相似的结果,你应该使用GIN索引和相似性搜索。这个问题起初看起来很简单,但它是一堆蠕虫 该解决方案应该考虑所有的用例:这仅仅是删除/重写特殊字符的问题吗?你需要考虑拼写错误(是代码>凯西格雷尔)吗?你是否需要考虑与众不同的标记(是<代码>凯西的格栅2?<代码>相同)?你需要考虑缩写(<代码> N-Grie< /代码>与<代码>纽约GRILL < /代码>相同吗?)你是否需要考虑数字(是<代码>第一AV GRILL < /代码>与<代码>第一大道GRILL < /代码>)? 如果是数据库+网站,最简单的方法是直接记录/比较URL段塞 否则,或者如果您不控制URL(如它是搜索框的结果),则可能需要存储/比较解析后的名称。使用DB title和URL slug,可以将名称转换为公共元素。例如,您将常用缩写更改为全文,删除所有特殊字符,删除/添加空格,如果您的语言有重音,您可以删除它们,标准化大小写等。只有您可以找到并应用适当的转换
然后,您可以使用任何合适的比较方法(三角图、简单相等,如查询等)来比较两个已解析的名称。这个问题一开始看起来很简单,但它是一堆蠕虫 该解决方案应该考虑所有的用例:这仅仅是删除/重写特殊字符的问题吗?你需要考虑拼写错误(是代码>凯西格雷尔)吗?你是否需要考虑与众不同的标记(是<代码>凯西的格栅2?<代码>相同)?你需要考虑缩写(<代码> N-Grie< /代码>与<代码>纽约GRILL < /代码>相同吗?)你是否需要考虑数字(是<代码>第一AV GRILL < /代码>与<代码>第一大道GRILL < /代码>)? 如果是数据库+网站,最简单的方法是直接记录/比较URL段塞 否则,或者如果您不控制URL(如它是搜索框的结果),则可能需要存储/比较解析后的名称。使用DB title和URL slug,可以将名称转换为公共元素。例如,您将常用缩写更改为全文,删除所有特殊字符,删除/添加空格,如果您的语言有重音,您可以删除它们,标准化大小写等。只有您可以找到并应用适当的转换 然后,您可以使用任何合适的比较方法(三元组、纯相等,如查询等)比较两个已解析的名称。我假设您实际上希望在
business\u name
中使用一段文本值,并且希望这是此特定业务的唯一标识符
您可以创建一个附加列business\u name\u slug
,并在此列上创建一个
然后,您可以在插入或更新之前创建一个,将从business\u name
创建的slug写入此列
棘手的部分是创建一个逻辑
- 生成企业名称的url友好版本(在博客文章、Githuhib Gists等中应该有一些示例)
- 避免命名冲突,以便在插入/更新时唯一约束不会引发错误
我假设您实际上想要业务名称中的一段文本值,并且希望它成为该特定业务的唯一标识符
您可以创建一个附加列business\u name\u slug
,并在此列上创建一个
然后,您可以在插入或更新之前创建一个,将从business\u name
创建的slug写入此列
棘手的部分是创建一个逻辑
- 生成企业名称的url友好版本(在博客文章、Githuhib Gists等中应该有一些示例)
- 避免命名冲突,以便在插入/更新时唯一约束不会引发错误
用例搜索caseys+grill
并查找“caseys Griller”和“caseys Griller”-或者在slug“caseys+grill”时始终查找唯一的“caseys Griller”“已使用?在最终的“/”之前,您想对该部分做什么?我有一个主意…如果我有一列url slug本身该怎么办?用例也可以搜索caseys+grill
并找到“caseys Griller”和“caseys Griller”-或者在slug为“caseys+grill”时始终找到唯一的“caseys Griller”“已使用?在最终“/”之前,您想对该部分做什么?我有个主意…如果我为url段塞本身设置了一个列,该怎么办?