【问题标题】:What data structure is best suited for quickly searchable text data?哪种数据结构最适合快速搜索的文本数据?
【发布时间】:2019-01-03 04:49:11
【问题描述】:

在查看 DnD Insider 和 Kindle 应用等产品时,用户可以在大型文本数据结构中快速搜索匹配的文本字符串。如果我要制作一个 Web 应用程序,允许用户快速搜索“规则手册”(或类似文本)以查找匹配条目并提取数据进行阅读,我应该如何组织数据?

我认为将所有数据放入内存不是一个好主意。但是如果我将它存储在某种数据库中,那么搜索数据库并检索适当匹配条目的好方法是什么?

到目前为止,我相信我将使用 Boyer-Moore 算法来实际进行搜索。我可以将规则文本的各个部分放入不同的数据库条目中。用户搜索将优先搜索节标题而不是节正文。由于文本将是静态的并且用户不可编辑,也许存储每个单词的数组会起作用?

【问题讨论】:

  • 你的文字到底有多大?供参考,甚至圣经 (KJV) 也只有 4MB 左右
  • 你可以试试 ElasticSearch。您可以查看here了解更多详情。
  • 你研究过后缀数组和后缀树吗?
  • 三元搜索尝试是一种有效的空间和时间数据结构。
  • 您的数据有多大,多久更改一次?您是在寻找全文搜索,还是只是短语搜索?也就是说,如果您搜索“blue goose”,它会匹配“blue spruce goose”吗?你想处理模糊搜索,这样如果有人搜索“blew goose”,它仍然会匹配“blue goose”?您的数据存储限制是什么?您的预期流量是多少?您的预期响应时间是多少?您需要向我们提供更多信息,然后我们才能给您任何接近合理的答案。

标签: javascript algorithm data-structures


【解决方案1】:

通常某种倒排索引用于此目的:https://en.wikipedia.org/wiki/Inverted_index

基本上,这是从每个单词到它出现的位置列表的映射。每个“地点”可以是一个(文档 ID、出现次数),或者如果您想支持词组搜索或者如果您想对标题中的匹配给予更大的权重等,则可以是更精确的东西。

搜索结果通常使用 tf-idf 的一些变体进行排名:https://en.wikipedia.org/wiki/Tf%E2%80%93idf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    相关资源
    最近更新 更多