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结合使用,但是或者可能会对您有所帮助。谢谢。我不知道这件事:)