2017-04-11 100 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