1

我正在尝试开发一个复杂的文本搜索引擎。我有来自许多书籍的数千页文字。我需要搜索包含指定复杂逻辑标准的页面。这些标准几乎可以包含以下任何组合:

- 答:完整的话。

B:词根(类似于词干;即所有具有某些关键字母的词)。

C:单词模板(在某些语言中,词根填充在某些模板中以形成各种词性,例如形容词,过去/现在动词......)。

D:逻辑连接词:AND/OR/XOR/NOT/IF/IFF 和括号来表示优先级。

现在,将页面的全文保存在数据库中(未编入索引)并使用 SQL 和正则表达式搜索它们会更快吗?

或者构建 word/root/template-page-location 元组的索引会更好吗?因此,我们可以加强对单个单词/词根/模板的搜索。然而,当我们在查询中引入逻辑连接词时,它变得很棘手。我想在这种情况下执行以下步骤:

1:单独搜索指定查询中的每个单词/词根/模板。

2:基于优先级,我们根据逻辑连接词一次合并两个结果列表(来自步骤 1)

例如,如果我们搜索“he AND (is OR was)”:

1:我们将分别搜索“he”、“is”和“was”,得到每个单词的结果列表。

2:使用合并函数OR-MERGE合并“is”和“was”的结果列表。

3:使用合并函数AND-MERGE将来自OR-MERGE函数的合并结果列表与“he”之一合并。

然后将步骤 3 的结果作为指定查询的结果返回。

你怎么看大师?哪个更快?有更好的主意吗?

谢谢大家。

4

1 回答 1

1

这类问题有很多现成的解决方案。我强烈建议您使用其中之一,而不是自己开发。

你没有说你正在使用什么数据库解决方案。如果是 Microsoft SQL Server,您可以使用其全文搜索功能。如果是 MySQL,请查看它的Full-Text Search Functions。我确信 Oracle、DB2 和任何其他主要的 DBMS 都将具有类似的功能。

或者,看看 Apache 的Lucene for JavaLucene for .NET。这将允许您在不需要使用 DBMS 的情况下对文档进行索引。

于 2010-05-15T09:32:38.670 回答