2011-11-16 50 views
0

我想爲使用AJAX,PHP & MySQL的全文搜索創建自動建議。用於全文搜索的自動建議後端

我正在尋找正確的方式來實現後端。當用戶打字時,輸入欄應該給他建議。建議應該從表中的文本生成。

該信息的一些信息:它們以全文形式存儲,由PDF生成,每個信息3-4頁。現在不超過100個,最近幾年將達到2000個。

如果用戶開始輸入,他輸入的單詞應該填寫一個存儲在數據庫中的單詞,按照出現次序降序排列。下一步是建議與其他單詞的組合,女巫在匹配第一個單詞的信息中出現頻率高。當然,您可以將其與Google自動建議進行比較。

我想3種不同的方式來實現這一點:通過的cronjob

  1. 生成索引,女巫統計過夜單詞和組合的出現。用戶在這個索引上搜索。

  2. 我使用'LIKE'%search%「'函數在entrys中進行實時搜索。然後,我在這之後尋找單詞,並通過出現將它們分組。

  3. 我爲所有用戶搜索創建一個日誌文件,並尋找像1)中的好組合,這樣搜索功能就會隨着每個搜索動作而變得更加智能。

從這開始的最佳方法是什麼?搜索應該是快速和高效的。 有沒有更好的可能性,我沒有想過?

回答

0

我會使用MySQL的MATCH()反對()(http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html),例如:

SELECT * 
FROM table 
WHERE MATCH(column) AGAINST('search') 
ORDER BY MATCH(column) AGAINST('search') 

另一個好處是,你可以進一步調整的話所搜索的重要性(如果neccessary),如:

MATCH(column) AGAINST('>important <lessimportant') IN BOOLEAN MODE 

或者說是被需要的搜索項的某些詞,而其他人可能不會出現在結果如:

MATCH(column) AGAINST('+required -prohibited') IN BOOLEAN MODE 
+0

全文搜索的好解決方案,但有了這個解決方案,我得到了整個條目。我想爲autosuggest完成單個單詞。我如何從相同的entrys獲得良好的匹配詞彙? – xerxes

0

我覺得,這個想法不是最好的。順便說一下,不要忘記消除autosuggest(an,the,by,...)的停用詞。