Database 我的网站搜索引擎的数据库表结构

Database 我的网站搜索引擎的数据库表结构,database,database-design,Database,Database Design,我正在尝试为我的网站做一个搜索引擎。我应该如何设计保存索引词列表的表 早些时候,我曾这样想: 表:tbl\u indexedwords有两列iw\u wordid和iw\u word 表:tbl\u wordoccurrence有4列wo\u occurrenceid,wo\u wordid,wo\u pageid,wo\u numberofoccurrenced 现在,如果用户在搜索框中输入两个以上的单词,这种设计将无法正常工作。假设foo-bar。即使foo和bar都出现在表tbl_inde

我正在尝试为我的网站做一个搜索引擎。我应该如何设计保存索引词列表的表

早些时候,我曾这样想:

表:
tbl\u indexedwords
有两列
iw\u wordid
iw\u word

表:
tbl\u wordoccurrence
有4列
wo\u occurrenceid
wo\u wordid
wo\u pageid
wo\u numberofoccurrenced

现在,如果用户在搜索框中输入两个以上的单词,这种设计将无法正常工作。假设
foo-bar
。即使
foo
bar
都出现在表
tbl_indexedwords
中,并且相应的详细信息出现在
tbl_wordoccurrence
中,我的搜索引擎脚本也会对
foo
bar
中出现次数最多的结果进行排序。它不会看到
foo
bar
是否相邻出现,因为没有关于单词出现顺序的列。我希望我在这里说的话是清楚的

另一个想法是将表
tbl_wordoccurrence
设为3列。忘记
wo\u numberofoccurrencess
并使用唯一的
wo\u occurrencesid
将每个单词存储在页面中。现在,这将解决我的问题,因为我知道单词的出现顺序。如果某个单词的
wo\u-occurrenceid
wo\u-occurrenceid
+1或另一个单词的
wo\u-occurrenceid
-1,则这两个词同时出现


这种设计的问题是它会占用很多空间。我的网站有很多内容。我认为这种方法会使它变慢(尽管不确定)。有没有其他设计对我有帮助?还是我要选第二个?我确信第一个是行不通的,所以放弃它。

如果您的网站内容在数据库中(我假设),如果您使用
全文索引,甚至不需要创建单独的表。如果您使用的是mySQL,那么它具有这样的功能,请参见示例和。如果您使用的是MSSQL,它也有自己的
全文
索引功能,如示例和

如果您坚持使用单独的表进行搜索,则很可能只需要一个表,如:

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


另一方面,如果您的网站是
静态的
,这意味着内容没有保存在数据库中,因此必须手动进行更改,而不是通过常规用户输入进行更改,那就另当别论了。

我建议使用数据库系统的
全文
功能(如果提供)或者使用一些现成的框架,例如,已经足够成熟,可以有效地满足您的需求,而不是自己重新发明轮子。@RumitParakhiya Lucene是否与php一起工作?我以为它是为java设计的!我真的不太了解如何将Lucene与php结合使用,但是或者可能会对您有所帮助。谢谢。我不知道这件事:)