2011-11-21 47 views
2

我在stackoverflow上找過這個問題,但沒有找到真正的好答案。在大型MySQL數據集中搜索部分單詞的最佳方法

我有有關特定產品的信息幾張桌子MySQL數據庫。當最終用戶在我的應用程序中使用搜索功能時,它應搜索特定列中的所有表。

由於加入並在不執行得很好很多where子句中,我創建了一個存儲過程,其將這些表和列中的所有單個單詞起來,將它們插入表。這是'word'和'productID'的組合。 此表包含超過330萬條記錄。

此刻,我可以搜索我是否匹配整個單詞或單詞(如「搜索關鍵詞%」)的開始相當快。這很明顯,因爲它現在使用索引。

然而,我的客戶希望對部分字(LIKE '%搜索關鍵詞%')進行搜索。這根本沒有執行。此外FULLTEXT搜索不是選項,因爲它只能搜索一個單詞的開頭,後面帶有通配符。

那麼,什麼是像這樣的搜索功能的最佳做法是什麼?

+0

有真正優化LIKE與SQL查詢的領先通配符搜索沒有什麼好辦法。 –

回答

1

MySQL不適合文本搜索。使用其他軟件來做到這一點。例如,使用Sphinx爲文本搜索索引數據。它會做得很好,而且設置起來非常簡單。如果你使用MySQL 5.1,你可以使用sphinx作爲引擎。

還有其他的服務器進行文本搜索優於Spinx,但他們eather不是免費的,或者需要安裝其它軟件。

你可以閱讀更多關於:ElasticSearch, Sphinx, Lucene, Solr, Xapian. Which fits for which usage?

2

雖然可以使用專用全文搜索軟件包(如LuceneSolr)進行更多設置,但您可能正在尋找。