【问题标题】:[Full Text Search]Implement Full Text Search[全文搜索]实现全文搜索
【发布时间】:2021-10-24 22:37:27
【问题描述】:

我正在对单个实体(包含名称和内容的文档)实施全文搜索。内容可能很大(20 多页文字)。我想知道该怎么做。 目前我正在考虑使用 Redis 和 RedisSearch,但我不确定它是否可以处理大块文本中的搜索。我们谈论的是一个多租户应用程序,每个客户都有 1000 多个非常大的文档。

TLDR:用什么来搜索大块的文本内容。

这个空间对我来说有点不清楚,很抱歉造成混乱。当我更清楚时会更新问题。

【问题讨论】:

  • 你目前使用什么技术栈?
  • 文档/内容——它们目前是如何持久化的? (例如在数据库、平面文件等中)?
  • Тhe 技术栈是 .net core 和 mssql,文档还没有持久化,我正在考虑将它们作为文本字段存储在 mssql 中并将它们缓存到 Redis 中以供搜索。

标签: c# search architecture


【解决方案1】:

我不能告诉你正确的答案是什么,但我可以给你一些关于如何决定的想法。

通常,如果我在数据库中有文档/内容,我会倾向于在那里搜索 - 假设我可以实现的搜索功能 (a) 在功能上足够有效,(b) 不需要超级代码丑陋,并且(c)它不会杀死数据库。尝试实现您想要提供给用户的搜索功能和过滤器(UI 组件、逻辑组件,然后将其转换为数据库和查询语言的实际工作方式)通常会遇到很多麻烦。

因此,根据您所说的,关键的权衡可能是:

  • 功能性/功能匹配(创建您需要的功能,以有用的方式工作)。
  • 易于开发和维护。
  • 性能 - 纯粹基于跨“文档”收集搜索结果不一定是您使用 IT 系统可以做到的最快的事情。

您是否尝试过进行简单的白板“选项分析”练习?如果不试试这个:

  • 让少数有兴趣和聪明的人围着白板。您可以单独进行此练习,但与他人交流想法几乎总是更好。
  • 同意高级选项是什么。在您的情况下,您可以从两个开始:一个基于 MSSQL,另一个基于 Redis。
  • 绘制一个大表 - 每个选项都有自己的列(从第 2 列开始)。
  • 在第 1 列中列出所有会推动您做出决定的重要事项。例如。功能匹配、易于开发和维护、性能、成本等。
  • 对于第 1 列中的每个驱动程序,为每个选项打分。

如何做取决于您:您可以使用 1-5 分制(或者您可以使用计划扑克类型的方法来避免锚定),或者您可以写下一些关键笔记。

准备好记下出现的任何问题、重要假设等,以免迷失方向。

有时当您完成练习时,答案会变得很明显。如果它真的很接近,你可以依靠分数——但这并不理想。更有可能的是,在列出的所有驱动因素中,某些驱动因素比其他驱动因素更重要,因此请不要忽视这些驱动因素的重要性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多