基于非文字比较的快速搜索方法
我正在对相当大的数据集(基本上所有字符串)进行小型搜索。表字段之间的关系很简单,尽管比较不能是字面的。即它应该能够关联“filippo”、“philippo”、“filipo”等等。
我找到了一些可以做到的方法,经常绊倒莱文斯坦距离(this、here和here),尽管我不确定它在我的具体情况下是否实用。
简而言之,我有两个表,一个带有“搜索键”的小表和一个更大的表,应该在其中执行搜索。两个表具有相同的字段,并且它们都具有相同的“含义”。例如
KEYS_TABLE
# | NAME | MIDNAME | SURNAME | ADDRESS | PHONE
1 | John | Fake | Doe | Sesame St. | 333-12-32
2 | Ralph | Stue | Michel | Bart. Ghost St. | 778-13000
...
和
SEARCH_TABLE
# | NAME | MIDNAME | SURNAME | ADDRESS | PHONE
...
532 | Jhon | F. | Doe | Sesame Street | 3331232
...
999 | Richard | Dalas | Doe | Sesame St. | 333-12-32
我想要做的就是获取某种度量,或者为每个给定记录的排名KEYS_TABLE
,报告来自SEARCH_TABLE
某个相关性以上的所有记录(由度量或简单的一些“KNN”之类的方法定义)。
我说莱文斯坦距离可能不实用,因为它需要计算KEYS_TABLE
x中每一行中的每个字段SEARCH_TABLE
。考虑到它SEARCH_TABLE
有大约 4 亿条记录并且KEYS_TABLE
从 100k 到 100 万不等,结果数字太大了。
我希望有一些方法可以让我以前丰富这两个表,或者一些更简单(更便宜)的方法来执行搜索。
值得一提的是,我可以随意转换数据。例如规范化St.
到st
,Street
到st
,删除特殊字符等等。
我的选择是什么?