2013-06-12 89 views
2

我想爲我的網站做一個搜索引擎。我應該如何設計保留索引單詞列表的表格。我的網站搜索引擎的數據庫表格結構

早些時候,我想是這樣的:

表:tbl_indexedwords有2列iw_wordidiw_word

表:tbl_wordoccurrence具有4列wo_occurrenceidwo_wordidwo_pageidwo_numberofoccurrences

現在,如果用戶在搜索框中輸入兩個以上的單詞,此設計將無法正常工作。假設foo bar。即使foobar都出現在表tbl_indexedwords中,並且相應的詳細信息位於tbl_wordoccurrence中,我的搜索引擎腳本將對foobar的最大值wo_numberofoccurrences進行排名。它不會看到foobar是否彼此相鄰,因爲沒有列出現單詞的順序。我希望我清楚我在這裏所說的話。

另一個想法可能是使表3列tbl_wordoccurrence表。忘記wo_numberofoccurences並用獨特的wo_occurrenceid存儲頁面中的每個單詞。現在,這將解決我的問題,因爲我知道單詞出現的順序。如果某個詞的wo_occurrenceidwo_occurrenceid +1或wo_occurrenceid -1那麼,這兩個詞就並排發生。

這個設計的問題是它會佔用大量的空間。我的網站有很多內容。我認爲這種方法會讓它變慢(不確定,但是)。有沒有其他設計可以幫助我?或者我將不得不與第二個去?我相信第一個不會工作,所以放棄它。

+0

我會建議使用數據庫系統的FULLTEXT功能(如果提供的話)或使用一些現成的框架,如** [Lucene](http://lucene.apache.org/core/)**,它已經足夠成熟,能夠有效滿足您的需求,而不是自行重新發明輪子。 –

+0

@RumitParakhiya Lucene是否可以使用php?我認爲它的Java! –

+0

我真的沒有太多關於如何使用Lucene與php,但[這個問題](http://stackoverflow.com/questions/2010663/lucene-with-php)或[此鏈接](http:// lucene.apache.org/solr/)可能會幫助你。 –

回答

3

如果您的網站內容在數據庫中(我認爲)如果您使用的是FULLTEXT索引,則創建單獨的表格甚至都不必要。如果您使用的是mySQL,那麼它具有此功能,請參閱示例herehere。如果你使用的是MSSQL它也有其自己的FULLTEXT索引功能類似的例子herehere

,如果你堅持,如果具有然後搜索一個單獨的表,你可以最有可能需要像只有一個表:

Table : tbl_wordsoccurrence 
Fields : words_id, words 
(and if you like you can include also number_of_occurences and page_id fields) 

在上表中,您可以存儲一個詞,如programming或短語如php programming

另一方面,如果您的網站是static,這意味着內容不會保存在數據庫中,因此必須手動進行更改,而不是通過常規用戶輸入進行更改,這就是另一回事。

+0

謝謝。我沒有意識到這一點:) –