【问题标题】:Data structure for fast full text search快速全文搜索的数据结构
【发布时间】:2018-10-12 03:06:27
【问题描述】:

trie 似乎适用于小字符串,但不适用于大文档,所以不确定(1-100 页的文本)。也许可以将倒排索引与后缀树结合起来,以获得两全其美的效果。或者也许使用将单词存储为节点的 b-tree,并为每个节点使用一个 trie。不确定。想知道什么是好的数据结构(b 树、链表等)。

我正在考虑搜索常规书籍、网页和源代码等文档,因此在倒排索引中仅存储单词的想法似乎不太正确。了解您是否需要针对每种解决方案的替代解决方案,或者是否有适用于所有解决方案的通用解决方案或它们的组合,将很有帮助。

【问题讨论】:

  • 看看here,它讨论了一些基础知识,还列出了一些开源解决方案(lucene、solr、...)
  • 如果你想支持近似搜索(错别字等),标准方法可能是n-gramsHere 是 Google n-gram 查看器。

标签: string search data-structures full-text-search


【解决方案1】:

您确实需要在一天结束时使用倒排索引来交织来自每个查询词的匹配结果,但是可以从 Trie 或哈希映射构建倒排索引。 trie 将允许模糊查找,而基于哈希映射的倒排索引仅允许精确查找令牌。

要优化内存使用,您可以使用内存优化版本的 Trie,例如 Radix TreeAdaptive Radix Tree (ART)。在我一直从事的开源模糊搜索引擎项目中使用ART 取得了巨大成功:https://github.com/typesense/typesense

使用 Typesense,我能够在大约 165 MB 的 RAM(磁盘上未压缩的大小为 85 MB)中索引大约 100 万个 Hacker News 标题。如果您的用例更具体并且不需要我添加到数据结构中的一些元数据字段,您可能可以进一步压缩它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 2011-10-27
    • 2014-11-10
    相关资源
    最近更新 更多