2017-04-11 51 views
0

我有一个搜索难题我需要解决,但我的技能很小,所以如果我没有解释得很好,我很抱歉。为了尝试和说明问题,这里有两个数据库列中的数据的一个例子:PHP模糊搜索2列并返回最佳匹配

| Start address  | End address   | 
----------------------------------------------- 
1 | Essex    | Moortown, Leeds  | 
2 | Place A, London  | Place B, Manchester | 
3 | Townsville, Essex | Leeds Town Hall  | 
4 | Essex Trading Estate | Another Leeds Estate | 
5 | Somewhere, Devon  | Yeoville    | 
6 | ...     | ...     | 

如果,例如,用户在相应提出“21有些街,埃塞克斯”和“利兹一些地方”表单字段,我需要搜索MySQL数据库并且回退最前面的X个最佳匹配,在这个例子中它将是第1,3和4行,因为它们都包含第一列的Essex和第二列的Leeds。

我可以看到PHP有两个函数similar_text()和levenshtein(),这可能对此有所帮助,但我不确定哪种方法更适合这种零件匹配以及如何获得最准确搜索结果。我在MySQL中没有发现任何类似的东西。

有没有经验的人能够给我任何指针?

干杯

安迪

+0

您可以尝试在两个字段之间放置'FULLTEXT'复合索引并使用MySQL的自然语言搜索:https://dev.mysql.com/doc/refman/5.5/en/fulltext-natural-language.html – CD001

+0

您可以考虑使用MySQL的[全文搜索](https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html)功能。 –

回答

0

您可以使用简单的像函数来获得所需的搜索输出。为了克服大小写敏感使用较低或较高。

select start_address,end_address from table where lower(start_address) like '%urfirststring%' 
and lower(end_address) like '%ursecondstring%' 

将您的搜索字符串也输入较低。

+0

感谢公羊。然而,我用过的例子在表单输入字段和数据库字段(例如城镇或城市)中都有相同的词汇,但这些词汇与不重要的词汇混合在一起,这些词汇对每个条目都是独一无二的(例如道路名称或邮政编码)。我想匹配表单字段1到列1和字段2到列2,结果按照最相关的匹配顺序。 – Andy