带正则表达式的SQL与带逻辑合并函数的索引

带正则表达式的SQL与带逻辑合并函数的索引,sql,regex,merge,logical-operators,indexing,Sql,Regex,Merge,Logical Operators,Indexing,我正在尝试开发一个复杂的文本搜索引擎。 我有许多书中数千页的文字。 我需要搜索包含指定复杂逻辑标准的页面。 这些标准几乎可以包含以下任何内容: A:全词 词根(从半音到词干,即所有单词都有某些关键字母) C:单词模板(在某些语言中,词根填充在某些模板中,形成各种词类,如形容词、过去/现在动词……) D:逻辑连接词:AND/OR/XOR/NOT/IF/IFF和括号表示优先级 现在,将页面的全文保存在数据库中(不编制索引)并使用SQL和正则表达式对其进行搜索会更快吗 或者更好的做法是构造word/r

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

A:全词

词根(从半音到词干,即所有单词都有某些关键字母)

C:单词模板(在某些语言中,词根填充在某些模板中,形成各种词类,如形容词、过去/现在动词……)

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

现在,将页面的全文保存在数据库中(不编制索引)并使用SQL和正则表达式对其进行搜索会更快吗

或者更好的做法是构造word/root/template页面位置元组的索引。 因此,我们可以加强对单个单词/词根/模板的搜索。 然而,当我们在查询中引入逻辑连接词时,它变得很棘手。 在这种情况下,我考虑采取以下步骤:

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

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

例如,如果我们正在搜索“他和(现在或过去)”:

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

2:使用合并功能或-Merge合并“is”和“was”的结果列表

3:使用合并函数AND-Merge将OR-Merge函数中的合并结果列表与“he”之一合并

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

你认为古鲁是什么?哪个更快?还有更好的主意吗


提前谢谢大家。

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

您不会说您正在使用什么数据库解决方案。如果是Microsoft SQL Server,您可以使用它的功能。如果是MySQL,请查看它的。我相信Oracle、DB2和任何其他主要DBMS都将具有类似的功能


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

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

您不会说您正在使用什么数据库解决方案。如果是Microsoft SQL Server,您可以使用它的功能。如果是MySQL,请查看它的。我相信Oracle、DB2和任何其他主要DBMS都将具有类似的功能


或者,看看Apache的or。这将允许您在无需使用DBMS的情况下为文档编制索引。

感谢您抽出时间回答我的问题。我发现使用Oracle的BerkeleyDB和具有二进制搜索性能的合并功能非常可行。我的决定是因为阿拉伯语所需的支持非常复杂,而就我所能研究的而言,全文数据库并未涵盖这一点。感谢您抽出时间回答我的问题。我发现使用Oracle的BerkeleyDB和具有二进制搜索性能的合并功能是非常可行的。我的决定是由于阿拉伯语所需支持的复杂性,而就我所能研究的而言,全文数据库并未涵盖这一点。