我的用户将通过剪切导入并粘贴包含公司名称的大字符串。
我有一个公司名称的现有且不断发展的MYSQL数据库,每个数据库都有一个唯一的company_id。
我希望能够解析字符串并为每个用户输入的公司名称分配模糊匹配。
现在,仅进行直线字符串匹配也很慢。 Soundex索引编制会更快吗?我如何在用户输入时给他们一些选择?
例如,某人写道:
微软->微软
裸机必备->裸机必备
Polycom,Inc.-> Polycom
我发现以下线程似乎与此问题相似,但是发布者尚未批准,并且不确定它们的用例是否适用:
如何在大型字符串数据库中找到字符串的最佳模糊匹配
在Java中匹配不精确的公司名称
您可以从开始使用SOUNDEX()
,这可能会满足您的需要(我为用户键入的内容提供了一个自动建议框,其中包含已有的替代方案)。
的缺点SOUNDEX()
是:
例:
SELECT SOUNDEX('Microsoft')
SELECT SOUNDEX('Microsift')
SELECT SOUNDEX('Microsift Corporation')
SELECT SOUNDEX('Microsift Subsidary')
/* all of these return 'M262' */
对于更高级的需求,我认为您需要查看两个字符串的Levenshtein距离(也称为“编辑距离”)并使用阈值。这是较复杂(较慢)的解决方案,但它具有更大的灵活性。
主要缺点是,您需要两个字符串来计算它们之间的距离。使用SOUNDEX,您可以将预先计算的SOUNDEX存储在表中,然后在该表上进行比较/排序/分组/过滤。使用Levenshtein距离,您可能会发现“
Microsoft”和“ Nzcrosoft”之间的差异仅为2,但是要花费更多的时间才能得出该结果。
无论如何,可以在codejanitor.com上找到MySQL的示例Levenshtein距离函数:作为MySQL存储函数的Levenshtein距离(2007年2月10日)。
下面列出XML布局 我想实现排序功能,在那里用户可以排序公司名称升序和降序,我如何实现它?
问题内容: 我刚刚开始探索Elasticsearch。我创建了一个文档,如下所示: 我现在尝试对Levenshtein距离为5的名称字段进行模糊搜索,如下所示: 但是它没有返回任何匹配。我希望圣路易斯的记录能归还。我该如何解决我的查询? 谢谢。 问题答案: 您的查询存在的问题是,最大编辑距离为2。 在上述情况下,您可能想要做的是将St.改为Saint 的同义词,这将与您匹配。当然,这将取决于您的数
问题内容: 我已经在线阅读了文档和各种教程,但是我对regex在Java中的工作方式仍然感到困惑。我正在尝试做的是创建一个接受字符串类型参数的函数。然后,我想检查传递的字符串是否包含MDCLXVIivxlcdm以外的任何字符。因此,例如,字符串“ XMLVID”应返回false,而“ ABXMLVA”应返回true。 当我通过时,“ XMLIVD”,“ ABXMLVA”和“ XMLABCIX”
问题内容: 当我尝试使用自动加载和命名空间时出现此错误: 致命错误:* 在 第10行的 /usr/local/www/apache22/data/public/php5.3/test.php中 找不到类’Class1’ * 谁能告诉我我在做什么错? 这是我的代码: Class1.php: test.php: 问题答案: Class1不在全局范围内。 请参见下面的工作示例: 编辑(2009-12-1
我相信这并不难,但我自己似乎想不出来。 然后再次执行时,它将是类似name4、name1、name2、name5等等的内容......
本文向大家介绍在MySQL中搜索多列以进行行匹配,包括了在MySQL中搜索多列以进行行匹配的使用技巧和注意事项,需要的朋友参考一下 为此,请使用UNION。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是搜索多列的查询- 这将产生以下输出-