2012-12-09 61 views
0

我正在爲PHP,SQL和JQuery中的網站編寫搜索引擎。我有在數據庫中用現有數據添加自動填充的經驗(即搜索文章標題)。但是如果我想要使用用戶輸入的最常見的搜索查詢,與谷歌的搜索查詢類似,但沒有太多用戶爲創建數據做貢獻(最常見的查詢)呢?有沒有自動完成數據的開源SQL表或類似的東西?自動填充概念

+0

如果這是你的問題,爲什麼不讓你的主題反映它? –

+0

爲什麼你需要一些未指定的開源自動完成數據,如果沒有這些條款實際上在你自己的數據庫中。您應該只使用這些搜索條件,爲此您可以在數據庫中找到匹配項。 – feeela

+0

這是我的問題之一:如果我是目前唯一使用此搜索引擎的人,我該如何創建自己的數據? – Martin

回答

0

昨天我偶然發現了一些回答我的問題的東西。谷歌繪製自動完成建議從這個XML文件,因此它是明智的使用它,如果你有很少的用戶創建自己的數據庫關鍵字:

http://google.com/complete/search?q=[keyword]&output=toolbar 

一些詞會給出關於這個詞的建議只是更換[關鍵詞]那麼taks只是解析返回的xml並將輸出格式化以適合您的需求。

0

Lucene您可以使用Lucene的搜索Engiine此functionality.Refer這個link

,或者您也可以給看看Lucene的Solr的自動完成...

+0

是的,他可以 - 但是這並不能解決問題:開始時顯示什麼,什麼時候沒有用戶基礎...... – feeela

0

谷歌已經(和有)數千其中有條目根據(日,時間,地理位置,語言......)進行排列,並且隨着用戶條目的增加,每當用戶鍵入一個單詞時,系統檢查「該地點+日期+時間的主要使用單詞」 +(如果沒有答案),那麼「一般詞」。因此,您應該對用戶輸入的每個單詞進行分類,或者製作數據庫的一般詞關係表,其中將會引用最適合的搜索答案。

+0

這非常有效......如果你有數十億用戶每分鐘輸入數萬億次的查詢。但只有幾十個用戶的初創公司呢? – Martin

+0

對於幾十個用戶,我建議SQLite作爲自動完成字符串的後端數據庫。對於「100次曼徹斯特無題」的事情,嘗試使用「概率數學」,您可以在其中輸入搜索字符串數據庫的數據庫,並比較哪些數據庫靠近用戶輸入的字符串。搜索Levenstein算法,也許Percepron算法也可以幫助你。 – nurmurat

1
  1. 截至目前,您使用的自動完成的靜態數據。
  2. 在數據庫中創建另一個表來存儲實際的用戶查詢。該表的模式可以是<queryID, query, count>,其中count每增加一個相同的查詢由某個其他用戶提供[Rank of Rank]。 N-Gram Index(當人們只鍵入「United」時,也就是說,你可以自動完成像「Manchester United」這樣的事情,即不僅僅是以起始字符串)查詢,並且在使用count排序後簡單地返回前N個字符。
  3. 當您的用戶羣開始增加時,上表將逐漸改善。
  4. 還有一件事,完成任務的算法非常簡單。然而,真正的挑戰在於返回數據以秒爲單位顯示。因此,當查詢數據庫/商店大小增加時,您可以使用像Solr/Sphinx這樣的搜索引擎來搜索您,在返回要呈現的結果時這將非常快速。
+0

這與我正在尋找的東西非常接近。但是,有數百萬用戶過濾搜索結果的問題仍然存在。如果某個用戶想要發送垃圾郵件並進入100次曼徹斯特無標題而不是曼聯?沒有足夠的用戶真正尋找曼聯來解決問題。 – Martin