2010-05-15 15 views
1

我想开发一个复杂的文本搜索引擎。 我有很多书籍的数千个文本页面。 我需要搜索包含指定复杂逻辑标准的页面。 这些标准几乎可以包含任何以下几点:具有逻辑合并函数的正则表达式与索引的SQL

答:完整的单词。 B:词根(半词与词干;即具有某些关键字母的所有词)。

C:Word模板(在某些语言中,根填充在特定模板中以形成各种词类,例如adjactives,过去/现在动词...)。 D:逻辑连接:AND/OR/XOR/NOT/IF/IFF和括号来表示优先级。

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

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

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

2:在优先基础上,将同时合并两个结果列表(步骤1)depedning的逻辑运算符

例如,如果我们正在寻找“他与(是或曾经是)”:

1:我们将搜索“他”,“是”和“是”分开,并获得每个单词的结果列表。

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

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

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

你认为gurues是什么?哪个更快?任何更好的想法?

谢谢大家提前。

回答

1

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

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

或者,看看Apache的Lucene for JavaLucene for .NET。这将允许您索引文档而无需使用DBMS。

+0

谢谢您的时间来回答我的问题。我发现使用Oracle的BerkeleyDB合并二进制搜索性能的功能更加可行。我的决定是因为阿拉伯语所需的支持非常复杂,而且我无法研究全文数据库。 – geeko 2010-05-24 04:01:02