2014-07-20 14 views
-1

我已經爲網絡和StackOverflow上的PHP搜索MySQL &重新定位了一些選項,但還沒有找到真正適合我的場景的東西。讓我解釋。MySQL後端和PHP前端搜索算法

我的情景:

  1. 我有一個表(表1)在MySQL中已經收錄字詞(如麥當勞,微軟等)。此表有300多萬條記錄。
  2. 然後我有一個通用字符串,用戶可以輸入 - 例如「我附近有一家名爲MCDonalds的公司。」
  3. 我想在用戶輸入的字符串中查找我的mysql表中的任何條件的發生。我通過遍歷TABLE1中的300萬條記錄中的每條記錄來查看它是否在用戶輸入的字符串中(通過PHP頁面由用戶輸入),我已經實現了這一點。

3方法效果「很好」 - 但當然不能擴展和性能太爛:)

任何建議或指針算法來解決這樣的問題。在一個可擴展的算法聲音的方式?

謝謝, 喬

回答

1

你應該嘗試MySQL的FULLTEXT搜索功能。嘗試是這樣的:

SELECT whatever, whatever 
    FROM TABLE1 
WHERE MATCH(terms_column) AGAINST('There is a company called McDonalds in my neighbourhood') 

你可能會得到大量的假陽性的比賽,但這是至少縮小搜索範圍的有效途徑。

它適用於我在美國城市名單上匹配的短語,例如「我要回新奧爾良穿球和連鎖」和「芝加哥,紐約,底特律及其所有人都在同一條街上」。

您的terms_column需要FULLTEXT索引。根據您使用的MySQL版本,您的表格可能需要使用MyISAM存儲方法。

+0

謝謝奧利 - 非常感謝!這正是我正在尋找..不知道爲什麼它被歸類爲題外話:( – ChicagoDude