我想为我的网站做一个搜索引擎。我应该如何设计保留索引单词列表的表格。我的网站搜索引擎的数据库表格结构
早些时候,我想是这样的:
表: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/)可能会帮助你。 –