2

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

之前我是这样想的:

表:tbl_indexedwords有 2 列iw_wordidiw_word.

表:tbl_wordoccurrence有 4 列wo_occurrenceid, wo_wordid, wo_pageid, wo_numberofoccurrences.

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

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

这种设计的问题是它会占用大量空间。我的网站有很多内容。我认为这种方法会使其变慢(但不确定)。还有其他设计可以帮助我吗?还是我必须选择第二个?我敢肯定第一个是行不通的,所以丢弃它。

4

1 回答 1

3

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

如果你坚持如果有一个单独的表进行搜索,那么你很可能只需要一个表,例如:

Table  : tbl_wordsoccurrence
Fields : words_id, words 
(and if you like you can include also number_of_occurences and page_id fields)

在上表中,您可以存储一个单词 likeprogramming或短语 like php programming

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

于 2013-06-12T04:19:26.820 回答