[全文检索]实现全文检索
[Full Text Search]Implement Full Text Search
我正在对单个实体(包含名称和内容的文档)实施全文搜索。内容可能非常大(20 多页文字)。我想知道该怎么做。
目前我正在考虑使用 Redis 和 RedisSearch,但我不确定它是否可以处理大块文本的搜索。我们正在谈论一个多租户应用程序,每个客户都有超过 1000 个相当大的文档。
TLDR:用于搜索大块文本内容的内容。
这个space我有点不清楚,不好意思。当我更清楚时会更新问题。
我不能告诉你正确的答案是什么,但我可以给你一些关于如何决定的想法。
通常情况下,如果我在数据库中有 documents/content,我会倾向于在那里搜索 - 假设我可以实现的搜索功能 (a) 在功能上足够有效,(b) 不需要超级丑陋的代码,并且 (c) 它不会杀死数据库。尝试实现您想要提供给用户的搜索功能和过滤器 - UI 组件、逻辑组件,然后将其转换为数据库和查询语言的实际工作方式,通常会有很多混乱。
因此,根据您所说的,关键的权衡可能是:
- 功能/功能契合(创建您需要的功能,以有用的方式工作)。
- 易于开发和维护。
- 性能 - 纯粹基于跨“文档”收集搜索结果不一定是您使用 IT 系统可以做的最快的事情。
您是否尝试过在白板上做一个简单的“选项分析”练习?如果没有试试这个:
- 让少数感兴趣且聪明的人围着白板。您可以单独进行此练习,但与他人交流想法几乎总是更好。
- 同意高级选项是什么。在您的情况下,您可以从两个开始:一个基于 MSSQL,另一个基于 Redis。
- 画一个大 table - 每个选项都有自己的列(从第 2 列开始)。
- 在第 1 栏中列出所有会促使您做出决定的重要因素。例如。功能契合度、易于开发和维护、性能、成本等
- 对于第 1 列中的每个驱动程序,为每个选项打分。
如何做取决于您:您可以使用 1-5 点系统(您可以选择使用计划扑克类型的方法来避免锚定)或者您可以写下一些关键注释。
准备好记下出现的任何问题、重要假设等,以免丢失。
有时,当您完成练习时,答案会变得显而易见。如果它真的很接近,你可以依靠分数 - 但这并不理想。更有可能的是,在列出的所有驱动程序中,有些驱动程序比其他驱动程序更重要,所以不要忽视它们的重要性。
我正在对单个实体(包含名称和内容的文档)实施全文搜索。内容可能非常大(20 多页文字)。我想知道该怎么做。 目前我正在考虑使用 Redis 和 RedisSearch,但我不确定它是否可以处理大块文本的搜索。我们正在谈论一个多租户应用程序,每个客户都有超过 1000 个相当大的文档。
TLDR:用于搜索大块文本内容的内容。
这个space我有点不清楚,不好意思。当我更清楚时会更新问题。
我不能告诉你正确的答案是什么,但我可以给你一些关于如何决定的想法。
通常情况下,如果我在数据库中有 documents/content,我会倾向于在那里搜索 - 假设我可以实现的搜索功能 (a) 在功能上足够有效,(b) 不需要超级丑陋的代码,并且 (c) 它不会杀死数据库。尝试实现您想要提供给用户的搜索功能和过滤器 - UI 组件、逻辑组件,然后将其转换为数据库和查询语言的实际工作方式,通常会有很多混乱。
因此,根据您所说的,关键的权衡可能是:
- 功能/功能契合(创建您需要的功能,以有用的方式工作)。
- 易于开发和维护。
- 性能 - 纯粹基于跨“文档”收集搜索结果不一定是您使用 IT 系统可以做的最快的事情。
您是否尝试过在白板上做一个简单的“选项分析”练习?如果没有试试这个:
- 让少数感兴趣且聪明的人围着白板。您可以单独进行此练习,但与他人交流想法几乎总是更好。
- 同意高级选项是什么。在您的情况下,您可以从两个开始:一个基于 MSSQL,另一个基于 Redis。
- 画一个大 table - 每个选项都有自己的列(从第 2 列开始)。
- 在第 1 栏中列出所有会促使您做出决定的重要因素。例如。功能契合度、易于开发和维护、性能、成本等
- 对于第 1 列中的每个驱动程序,为每个选项打分。
如何做取决于您:您可以使用 1-5 点系统(您可以选择使用计划扑克类型的方法来避免锚定)或者您可以写下一些关键注释。
准备好记下出现的任何问题、重要假设等,以免丢失。
有时,当您完成练习时,答案会变得显而易见。如果它真的很接近,你可以依靠分数 - 但这并不理想。更有可能的是,在列出的所有驱动程序中,有些驱动程序比其他驱动程序更重要,所以不要忽视它们的重要性。