【问题标题】:Develop a distributed Full-Text search Index (AKA Inverted index)开发分布式全文搜索索引(AKA 倒排索引)
【发布时间】:2013-09-30 05:09:39
【问题描述】:

我知道如何在单台机器上开发一个简单的倒排索引。简而言之,它是一个保存在内存中的标准哈希表,其中: - 关键 - 一句话 - value - 单词位置列表 例如,代码在这里:http://rosettacode.org/wiki/Inverted_Index#Java

问题:

现在我试图让它分布在 n 个节点之间,然后依次分布:

  1. 使该索引可水平扩展
  2. 对此索引应用自动分片。

我对自动分片特别感兴趣。欢迎任何想法或链接!

谢谢。

【问题讨论】:

    标签: full-text-search scalability sharding full-text-indexing inverted-index


    【解决方案1】:

    自行分片是一项相当复杂的任务,在现代数据库中还没有完全解决。分布式数据库中的典型问题是CAP theorem,以及其他一些低级且非常具有挑战性的任务,例如在添加新的空白节点或数据中自然发生的不平衡之后重新平衡集群数据。

    在我见过的数据库中实现的最佳数据分布是在 Cassandra 中。然而,Cassandra 中尚未实现全文搜索,因此您可以考虑在其上构建分布式索引。

    其他一些已经实现的选项是ElasticsearchSolrCloud。在给出的示例中,缺少一个重要的细节,即词干。使用词干搜索,您基本上可以搜索任何形式的词,例如“sing”、“sings”、“singer”。 Lucene 和之前的两个解决方案已经为大多数语言实现了它。

    【讨论】:

    • 感谢您的回答。我找到了 Cassandra 和其他一些 DB 的比较,并在以下位置再次遇到了一致的哈希算法:quora.com/… 实际上,之前我研究过我的博客中描述的这个算法:ivoroshilin.com/2013/07/15/… 并认为这个算法可以应用于倒排索引也。我猜倒排索引的键可以传递到一致的哈希数据结构中。
    • 更正:如果我将倒排索引与一致哈希相结合,我还想听听其他方法和陷阱
    • 在最简单的形式中,具有基于哈希的键的 NoSQL DB 可以被视为一个巨大的 HashMap。所以是的,您可以简单地将倒排索引键传递给数据库。
    猜你喜欢
    • 2012-05-12
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2014-03-02
    • 2017-09-10
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多