2013-06-12 57 views
2

我想为我的网站做一个搜索引擎。我应该如何设计保留索引单词列表的表格。我的网站搜索引擎的数据库表格结构

早些时候,我想是这样的:

表:tbl_indexedwords有2列iw_wordidiw_word

表:tbl_wordoccurrence具有4列wo_occurrenceidwo_wordidwo_pageidwo_numberofoccurrences

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

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

这个设计的问题是它会占用大量的空间。我的网站有很多内容。我认为这种方法会让它变慢(不确定,但是)。有没有其他设计可以帮助我?或者我将不得不与第二个去?我相信第一个不会工作,所以放弃它。

+0

我会建议使用数据库系统的FULLTEXT功能(如果提供的话)或使用一些现成的框架,如** [Lucene](http://lucene.apache.org/core/)**,它已经足够成熟,能够有效满足您的需求,而不是自行重新发明轮子。 –

+0

@RumitParakhiya Lucene是否可以使用php?我认为它的Java! –

+0

我真的没有太多关于如何使用Lucene与php,但[这个问题](http://stackoverflow.com/questions/2010663/lucene-with-php)或[此链接](http:// lucene.apache.org/solr/)可能会帮助你。 –

回答

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,这意味着内容不会保存在数据库中,因此必须手动进行更改,而不是通过常规用户输入进行更改,这就是另一回事。

+0

谢谢。我没有意识到这一点:) –