如何在hadoop和lucene上构建分布式搜索库



我正准备用lucence和hadoop制作分布式搜索模块,但遇到了一些问题:

  1. 众所周知,hdfs是一个分布式文件系统,当我把一个文件放在hdfs中时,文件会被分成几个块,并存储在冲突器中的不同的从机中,但如果我用lucene在hdfs上写索引,我想看看每台机器上的索引,如何获取?

  2. 我读过一些hadoop/controb/index和一些katta,但不理解"碎片,看起来像索引的一部分"的想法,它存储在一台计算机的本地磁盘上,还是集群中只有一个定向分发?

感谢提前

关于问题1:

您可以实现Lucene"Directory"接口,使其与hadoop协同工作,并让hadoop处理您提交给它的文件。您还可以提供自己的"IndexWriter"one_answers"IndexReader"实现,并使用hadoop客户端编写和读取索引。通过这种方式,因为您可以对将要编写的索引的格式有更多的控制权。您可以通过lucene/hadoop实现在每台机器上"查看"或访问索引。

-对于您的问题2:

碎片是索引的一个子集。当您运行查询时,所有碎片都会在同一时间进行处理,并且所有碎片的索引搜索结果会合并在一起。在集群的每台机器上,您都将拥有索引的一部分:shard。因此,索引的一部分将存储在本地机器上,但在您看来,它将是分布在集群中的单个文件。

我也可以建议你签出分布式搜索SolrCloud,或者在这里它作为索引/搜索引擎在Lucene上运行,并且已经使您能够拥有集群索引。它还提供了一个API,用于提交文件进行索引和查询索引。也许它对您的用例来说已经足够了。

最新更新