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

时间:2013-06-12 03:05:00

标签: database database-design

我正在尝试为我的网站制作搜索引擎。我应该如何设计保留索引词列表的表。

早些时候我想过这样的事情:

表:tbl_indexedwords有2列iw_wordidiw_word

表:tbl_wordoccurrence有4列wo_occurrenceidwo_wordidwo_pageidwo_numberofoccurrences

现在,如果用户在搜索框中输入两个以上的单词,此设计将无法正常工作。假设foo bar。即使表foo中存在bartbl_indexedwords并且相应的详细信息位于tbl_wordoccurrence中,我的搜索引擎脚本也会将结果排在最大wo_numberofoccurrences foo 1}}适用于barfoo。它不会看到bartbl_wordoccurrence是否彼此相邻,因为没有列的出现顺序列。我希望我清楚我在这里说的话。

另一个想法可能是制作3列的表wo_numberofoccurences。忘记wo_occurrenceid并将每个单词存储在唯一wo_occurrenceid的页面中。现在,这将解决我的问题,因为我知道单词出现的顺序。如果某个单词的wo_occurrenceidwo_occurrenceid + 1或{{1}} - 其他单词的1,那么这两个单词并排出现。

这种设计的问题在于它会占用大量空间。我的网站有很多内容。我认为这种方法会让它变慢(但不确定)。还有其他设计可以帮助我吗?或者我必须选择第二个吗?我确信第一个不会起作用,所以放弃它。

1 个答案:

答案 0 :(得分: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,则表示内容未保存在数据库中,因此必须手动进行更改,而不是通过常规用户输入,这是另一个故事。