2009-04-28 159 views
1

我正在使用我網站的搜索功能。我想爲用戶提供最佳搜索機制。我正在使用PHP/MYSQL。MySQL全文搜索?

比方說,用戶搜索「運動」。

我有30條記錄有單詞「sport」,5條記錄有單詞「sports」,但是當我搜索運動時,以下查詢只返回結果30誰擁有單詞「sport」。但實際上,我認爲提供良好搜索結果的最佳方式是顯示所有30 + 5記錄,所有記錄包含運動或體育項目。

SELECT DISTINCT p.id, p.title, p.descr, p.tags FROM pdata p WHERE MATCH (p.title, p.tags, p.descr) AGAINST ('sport') 

請告訴我一些文章或一些提示使用&技巧,我將能夠提供良好的搜索功能。

回答

2
...MATCH (p.title, p.tags, p.descr) AGAINST ('sport*' IN BOOLEAN MODE) 

可以訣竅。

編輯,MySQL documentation是這些類型的問題的優秀資源! :)

+0

擊中目標:)哇。嘿,它的工作完美。但我不明白爲什麼它沒有給我數據之前(沒有*和IN BOOLEAN MODE關鍵字)?請告訴我。 – Prashant 2009-04-28 06:28:46

0

只需在搜索字符串中使用%通配符即可。這將允許匹配搜索字符串形成的任何單詞。可悲的是,你需要使用布爾模式才能使這個通配符工作。此外,所有搜索字符串必須大於3個字符才能顯示使用全文搜索。這可以在MySQL的系統設置進行更改,但默認是3

0

在你的情況我會做以下查詢:

SELECT p.id,p.title,p.descr,P .tags添加 FROM PDATA p其中(p.title LIKE '%SPORT%' 或p.tags LIKE '%SPORT%' 或 p.descr LIKE '%SPORT%')

這個查詢就會發現任何涉及體育雜誌,夏季運動等的文章。