我想爲我的網站做一個搜索引擎。我應該如何設計保留索引單詞列表的表格。我的網站搜索引擎的數據庫表格結構
早些時候,我想是這樣的:
表:tbl_indexedwords
有2列iw_wordid
和iw_word
。
表:tbl_wordoccurrence
具有4列wo_occurrenceid
,wo_wordid
,wo_pageid
,wo_numberofoccurrences
。
現在,如果用戶在搜索框中輸入兩個以上的單詞,此設計將無法正常工作。假設foo bar
。即使foo
和bar
都出現在表tbl_indexedwords
中,並且相應的詳細信息位於tbl_wordoccurrence
中,我的搜索引擎腳本將對foo
或bar
的最大值wo_numberofoccurrences
進行排名。它不會看到foo
和bar
是否彼此相鄰,因爲沒有列出現單詞的順序。我希望我清楚我在這裏所說的話。
另一個想法可能是使表3列tbl_wordoccurrence
表。忘記wo_numberofoccurences
並用獨特的wo_occurrenceid
存儲頁面中的每個單詞。現在,這將解決我的問題,因爲我知道單詞出現的順序。如果某個詞的wo_occurrenceid
是wo_occurrenceid
+1或wo_occurrenceid
-1那麼,這兩個詞就並排發生。
這個設計的問題是它會佔用大量的空間。我的網站有很多內容。我認爲這種方法會讓它變慢(不確定,但是)。有沒有其他設計可以幫助我?或者我將不得不與第二個去?我相信第一個不會工作,所以放棄它。
我會建議使用數據庫系統的FULLTEXT功能(如果提供的話)或使用一些現成的框架,如** [Lucene](http://lucene.apache.org/core/)**,它已經足夠成熟,能夠有效滿足您的需求,而不是自行重新發明輪子。 –
@RumitParakhiya Lucene是否可以使用php?我認爲它的Java! –
我真的沒有太多關於如何使用Lucene與php,但[這個問題](http://stackoverflow.com/questions/2010663/lucene-with-php)或[此鏈接](http:// lucene.apache.org/solr/)可能會幫助你。 –