【问题标题】:Database Table structure for search engine for my website我网站的搜索引擎的数据库表结构
【发布时间】:2013-06-12 03:05:00
【问题描述】:

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

之前我是这样想的:

表:tbl_indexedwords 有 2 列 iw_wordidiw_word

表:tbl_wordoccurrence 有 4 列 wo_occurrenceidwo_wordidwo_pageidwo_numberofoccurrences

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

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

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

【问题讨论】:

  • 我建议使用您的数据库系统的FULLTEXT 功能(如果它提供)或使用一些现成的框架,如 Lucene,它们已经足够成熟,可以满足您的需求有效地满足需求,而不是自己重新发明轮子。
  • @RumitParakhiya Lucene 是否与 php 一起使用?我以为它是 java 的!
  • 我对 php 中使用 Lucene 真的不太了解,但 this SO Questionthis link 可能会对您有所帮助。

标签: database database-design


【解决方案1】:

如果您网站的内容在数据库中(我假设),如果您使用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,这意味着内容没有保存在数据库中,因此必须手动进行更改,而不是通过常规用户输入,那么这就是另一回事了。

【讨论】:

  • 谢谢。我不知道这个:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 2012-02-02
相关资源
最近更新 更多