【问题标题】:How twitter improve their search by using lucence?twitter 如何使用 lucence 改进他们的搜索?
【发布时间】:2011-04-15 09:03:14
【问题描述】:

最近,推特工程师发布了一个非常令人印象深刻的blog,关于在他们的搜索架构中使用 Lucence 而不是 mysql。 所以,我很好奇他们为什么选择lucence,为什么mysql不能满足他们的要求?另一方面,DBMS 数据库系统的性能(或者说可扩展性)瓶颈是什么?

感谢任何想法!

感谢您的建议

万斯

【问题讨论】:

    标签: mysql performance search twitter


    【解决方案1】:

    将 Lucene 索引想象成一些大型参考书后面的索引:对于书中出现的每个重要术语,它都会列出它出现的所有页面。因此,如果您想查找书中出现某个术语的所有位置,请转到索引并获取页面列表。

    Lucene 所做的是获取文档,将它们分解成单独的单词(该过程称为“标记化”),然后为每个单词/标记在其索引中写入该单词出现在该文档中的位置。

    把索引想象成一个哈希表(它不是一个真正的哈希表,但它是相同的想法):键是单词/令牌,每个键都有一个包含对包含文档(URI、文件名)的列表引用的存储桶那个词。它不存储文档本身 - 只是对它的引用。当您在 Lucene 上进行搜索时,您需要提供一个关键字并返回包含该关键字的文档列表,这些文档会出现在其索引中。

    MySQL 和其他 RDBMS 已针对存储和检索记录(预定义的有序列的集合)进行了优化。当您在列上放置索引时,它会将列的全部内容视为一个单元。如果该列是一段文本,则不会将其分解为单词。

    【讨论】:

    • 感谢@Elad 和@Tushar 的回答。接受您的回答,我们会进行更多调查。
    【解决方案2】:

    MySql 是一个 RDMS,它非常健壮、快速。它确实支持全文搜索,但它不是很好和高效。 Lucence,是一个全文搜索引擎。全文搜索引擎能够在文档、文本等中进行搜索。因此它们能够有效地搜索大量推文。

    MySql 在查询列以及这些列中的离散搜索值方面也很好。 Like 查询肯定会受到打击。

    你可以在互联网上找到很多关于全文搜索的信息。

    【讨论】:

    • 谢谢。但是我仍然有疑问为什么那些 DBMS 数据库系统的性能比其他的像 solr 低。
    • 大多数数据库都是为处理表而设计的。当您在列中指定一个值时,它们在查询表中的记录时非常有效。他们构建的索引基于整个列的值。它们不会基于列中的值组合来构建索引。全文搜索引擎基于单词、块而不是整列值构建索引。
    猜你喜欢
    • 2011-05-30
    • 2010-10-15
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多