设计一个高规模的搜索功能

时间:2014-10-04 10:04:08

标签: search solr indexing lucene elasticsearch

(不确定这是否是此问题的正确论坛)

我很好奇主流网站的搜索方式,例如youtube / quora / stackexcahnge,是否有效? 我并不是在寻找像他们使用Lucene搜索引擎那样的答案。我想准确理解索引在那里的工作原理。

  • 文本搜索的索引是否与自动填充功能不同?
  • 是否在地图中完成,如地图缩小。
  • 地图缩减的确切方式有助于提供结果? (我知道它会计算每个文档中的单词,但是当我搜索关键字时会发生什么?)
  • 我还听说google停止使用map reduce并现在使用cloud dataFlow here - 这是如何工作的?

请帮助: - )

1 个答案:

答案 0 :(得分:1)

我投票结束了,因为我觉得你的问题太宽泛了。每个子弹都可以构成一个SO问题的基础。那就是说,我会回答SolrCloud如何解决你所问的每一个问题:

文本搜索的索引是否与自动填充功能不同?

简短的回答是"是"。 Solr有implementing an autocomplete feature的几个选项,所有这些选项都依赖于构建单独的索引或提供单独的字典。你也可以像博客文章"Super flexible AutoComplete with Solr" demonstrates那样以更复杂的方式推销自己的作品。

它是否在后台完成,如地图缩小?

一般来说没有。 SolrCloud基于shards with leaders and replicas的想法。分片是整个索引的子集。碎片由一个领导者组成,可能还有一个或多个副本。

对所有分片领导者执行查询。通过分配特定分片作为每个分片响应的聚合器,但与map reduce不同,其中单个节点响应具有还原节点所需的所有数据,例如the aggregating Solr shard may make multiple requests back to the other shards to figure out sort order

地图缩减的确切方式有助于提供结果? (我知道它会计算每个文档中的单词,但在搜索关键字后会发生什么?)

请参阅我对您之前问题的回复。简而言之,对每个分片执行查询,由其中一个分片聚合,并返回给请求者。 Solr做了什么 - Lucene真的 - 这是人们经常与之相关的有用的神奇部分,Term Frequency Inverse Document Frequency索引usually with stemming文本搜索。虽然这不完全是引擎盖下发生的事情,并且您可以通过配置改变实际完成的内容,但它可以很好地了解正在完成的工作。

其他搜索,日期和数字或简单的文本值以类似于database indexing的方式完成。这是一个简化,如果你想了解它更全面地阅读NumericRangeQuery上的JavaDoc,以获得深入的解释。

我还听说google停止使用map reduce,现在在这里使用云数据流 - 这是如何工作的?

如果我知道答案,我可能会为Google工作,而不是回答StackOverflow问题:)。严肃地说,无论他们建立什么,都是新的博士水平的工作,据我所知他们甚至没有发表研究论文,这是他们用map reduce that led to Yahoo building Hadoop做的。