2010-08-27 117 views
0

我的第一個想法是開始將每個單詞存儲在數據庫中,忽略具有2個或更少字符的單詞,並且每次重複一個單詞時,只需在計數器行中添加一個(例如importance),以便首先出現在頻繁搜索列表中。聽起來不錯,直到你認爲你通常搜索不只一個單詞的各種單詞,例如:對於big house,你可能想要將big house作爲頻繁搜索來存儲,而不是bighouse如何製作「頻繁搜索」引擎?

我有點困惑如何做到這一點,做對了。有沒有人做過類似的事情?你如何看待正確的做法?

+0

感謝所有人,經過一天的研究和思考你的提示,我將從頭開始構建,Lucene聽起來像是一個很好的選擇,但這可能是這個項目的一個矯枉過正。 再次感謝您。 +1給你們。祝你今天愉快。 – Luis 2010-08-27 21:55:18

回答

1

嗯,我將創建2個表

搜索SearchFrequency

搜索將包含所有搜索,和搜索頻率將是一直重複這樣它看起來像搜索的列表所以

------------------------------------------------------ 
frequency_id  frequency_sid  frequency_counter 
------------------------------------------------------ 
1    3     33 
2    56    66 
3    33    128 
..... 

然後,你可以做

SELECT * FROM Searches,SearchFrequency WHERE search_id = frequency_sid ORDER BY frequency_counter DESC LIMIT 30 

,只是更新表,因此,

id = INSERT INTO Searches .... 
INSERT INTO SearchFrequency (frequency_sid,frequency_counter) VALUES (id,frequency_counter + 1); 

這將保持更新兩個表,你也可以然後跟蹤individal searchs與IP,相關搜索等等等等

然後,您可以設定也up SearchKeywordsFrequency表,以便您可以爆炸搜索並存儲單個詞,然後創建一個多對多的關係搜索頻率

1

您需要將完整的關鍵字存儲在索引或數據庫中(我會建議您像Zend_Lucene或Swish那樣具有非常靈活的API的索引)。然後,您必須應用Proximity搜索,即查找兩個或多個關鍵字在特定距離內的搜索。 Zend Lucene和Swish有內置的方法,它們在應用鄰近搜索之後根據它們的等級給出排序結果。

Zend_search_Lucene文檔在這裏列出http://framework.zend.com/manual/en/zend.search.lucene.html。請隨時詢問您是否需要實施細節。

Swish可作爲separate module使用,可通過CMD運行,也可作爲php extension使用。

另外如果你想接近算法的定製實現,那麼你可以查看其詳細信息http://en.wikipedia.org/wiki/Proximity_search_%28text%29

編輯維基: 如果你要爲數據庫解決方案,那麼你就可以創建適用自己的實現接近的功能搜索算法獲取最佳相關搜索。你也應該看看mySql Full-Text Searching

2

我的答案不包含算法模式,但可以捕捉行爲模式。

打開一會兒某些搜索記錄。(什麼PPL正在搜索)

記錄下哪些是成功的搜索,那些真正找到結果(結果找到)。

您可以通過捕獲人們在搜索術語時實際點擊哪些資源來改進此想法。

這會給你: 什麼人在搜索以及它們可能是什麼意思。

繼續下去,然後用時間數據提煉的那樣:「在週末的人搜索這個」

這將有助於建立的如何搜索正在使用的圖片,讓你在一個位置,「攔截」搜索詞語並插入「你的意思是?」風格搜索助手,並在您的主頁上「每年這個時候都很受歡迎」的搜索鏈接。

所以,最初是一個搜索表來捕捉正在發生的事情:

term | results_cnt | daydate | session

後來的後來,當存在有一些數據,組短語,尋找模式,短單的話 - 但我會說要做到這一點,你需要有一些人的意見,但這一切都取決於你的網站的大小和主題。

+0

特別關於尋找語義的好主意,而不是遵循相同的記錄搜索技術。從我+1 – 2010-08-27 13:00:08