2015-01-01 65 views
1

我正在處理一個項目,我需要您在數據庫查詢中的建議。我正在使用PHP和MySQL。使用mysql和php查找短語

語境

  • 我有一個表名爲phrases含有phrases塔,在其中有存儲的短語,其中的每一個由一至三個單詞。
  • 我有一個text字符串包含500 - 1000字

我需要強調的text串存在於我的phrases數據庫表中的所有短語。

我的解決方案

我經過一語中的列表中的每個短語和比較反對text,但短語的數量較大(100K),因此它需要大約2分鐘或更要做到這一點匹配。

有沒有更有效的方法來做到這一點?

+0

您可以預先匹配文本並將其緩存在某個地方嗎?那麼用戶感覺不會太慢。 – phansen

回答

0

我要專注於如何做與100K值的比較部分。這將需要兩個步驟。

a)編寫一個C++庫並使用擴展將其鏈接到PHP。 Google PHP-CPP。有一個框架可以讓你做到這一點。 b)在C/C++裏面,你需要創建一個時間複雜度爲O(n)的數據結構。 n是你正在搜索的短語的長度。通常,這被稱爲嘗試數據結構。這通常用於沒有空格的單詞[不是短語]。但是,當然你可以寫自己的。

這是一個鏈接,其中包含單詞實現。又名詞典。 http://www.geeksforgeeks.org/trie-insert-and-search/

這需要相當多的內存,因爲數量是100K。公平地說,你需要一個大系統。但是,當你尋求更好的性能時,內存往往是一個折衷。

替代方法 只有PHP。在這裏,從你的文本輸入中提取短語。將它們轉換成哈希。您包含的表格數據也應存儲在散列中。 [需要巨大的記憶]。這裏的表現會很快,每次搜索都會O(1)。所以,對於一個k字的句子。你的時間複雜度將是O(K-階乘)。