我正在尝试开发一个复杂的文本搜索引擎。我有来自许多书籍的数千页文字。我需要搜索包含指定复杂逻辑标准的页面。这些标准几乎可以包含以下任何组合:
- 答:完整的话。
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 的结果作为指定查询的结果返回。
你怎么看大师?哪个更快?有更好的主意吗?
谢谢大家。