SQL多属性排序(按一致性排序)

3
我有一个包含姓名和地址等属性的表格。在搜索字段中,我希望让系统用户输入他们所知道的关于这些人的信息,并将结果返回到一个表格中。显然,我希望最符合条件的结果排在前面。
以下是需要回答的问题:
  1. 排名应该在SQL命令中完成,还是有其他更好的方法?
  2. 是否有好的方法来根据最高符合度对结果进行排序/排名?基本上,我希望那个最符合搜索条件的人出现在前面。
您可以在这里看到一个例子: http://sqlfiddle.com/#!2/19e9ad 感谢您的帮助!
(我目前使用SQL Server,但任何帮助都将不胜感激。)

我只是用那个术语来更好地描述它。对我来说,这意味着在考虑到有5个属性需要检查的情况下,结果有多符合要求。 - JKau
1
看起来您要求一个字符串比较函数,例如Jaro-Winkler。这是Oracle中的内置函数(https://docs.oracle.com/cd/E18283_01/appdev.112/e16760/u_match.htm),我想许多其他关系数据库管理系统也有类似功能。 - Joel
也许你应该解释一下你想进行何种搜索。 - Juan Carlos Oropeza
1
@JKau Jaro-Winkler在识别字符串顺序错误方面表现非常出色,得分也会反映出来。运行一些测试,看看它是否能给你想要的结果,但我在我的工作中(市场客户数据整合)经常使用它。我开发了一个API,基本上就是这样做的,但增加了很多复杂性,比如考虑昵称等因素。 - Joel
@JKau - 我把我的评论移到了答案部分。 - Joel
显示剩余3条评论
3个回答

1

您可能需要检查全文索引和搜索-它们具有排名选项,可以为您完成工作:

...以及搜索功能信息:

或者,您也可以自己开发解决方案,例如解析用户输入并逐字匹配,然后提高匹配更多单词、确切单词顺序等的结果。但是您将需要自行处理许多情况(例如像“纽约”这样的多个单词城市)。


1
听起来你正在寻求一个字符串比较函数,例如Jaro-Winkler。这是Oracle的内置函数(http://docs.oracle.com/cd/E18283_01/appdev.112/e16760/u_match.htm),我想许多其他RDBMs也有类似功能。
Jaro-Winkler非常擅长识别字符串的顺序是否正确,并且分数将反映出来。运行一些测试,看看它是否给出了你想要的结果,但我在我的工作中经常使用它(市场客户数据集成)。我开发了一个API,基本上就是这样做的,但增加了很多复杂性,例如考虑昵称等。该API位于http://matchbox.io/#match-api

0

你可以在 SQL 中进行排序,但最常见的解决方案是在用户界面中进行排序,这样就不必每次用户更改排序顺序时都从数据库请求数据。

如果你想要查找,可能需要向查询中添加一个字段来显示“符合性”,类似于:

 SELECT *, function_comformity() as comformity

因此,您可以像对名称或邮政编码一样,在UI上对该字段进行排序。


谢谢您的帮助!在 UI 中进行排序时:您是如何进行排序的?您有什么建议吗?(即使只是涵盖此内容的博客) - JKau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接