【发布时间】:2013-06-12 03:05:00
【问题描述】:
我正在尝试为我的网站制作搜索引擎。我应该如何设计保存索引词列表的表格。
之前我是这样想的:
表:tbl_indexedwords 有 2 列 iw_wordid 和 iw_word。
表:tbl_wordoccurrence 有 4 列 wo_occurrenceid、wo_wordid、wo_pageid、wo_numberofoccurrences。
现在,如果用户在搜索框中输入两个以上的词,这种设计将无法正常工作。假设foo bar。即使foo 和bar 都出现在tbl_indexedwords 表中并且相应的详细信息在tbl_wordoccurrence 中,我的搜索引擎脚本也会对wo_numberofoccurrences 或foo 或@ 看到的最大结果进行排名987654339@。它不会看到foo 和bar 是否彼此相邻,因为没有单词出现顺序的列。我希望我在这里说的很清楚。
另一个想法可能是制作 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 Question 或 this link 可能会对您有所帮助。