ElasticSearch入门之风花雪月(五)




之前常常有人问散仙,如何学好搜索? 其实这个问题很具备表明性,你能够概括为一类问题? 其实,散仙在之前博客的中,也有总结过,你们能够点击这个连接再看一下 

本篇散仙要介绍的内容,是关于如何用Luke查看ElasticSearch的索引,那么为何会写如此一篇文章呢? 

相信学过或了解过全文检索的朋友们,都知道,搜索的核心的就是倒排索引,之因此咱们可以使用Google在互联网的海量的数据中,经过关键词快速定位到咱们想要的数据,就是由于倒排索引在这里起了很是大的做用,在搜索中索引一般是不可见的,咱们只知道能经过搜索某些关键词找到咱们想要的信息,而并不知道,在倒排索引中,他们全部的倒排词是什么样的,这也就是不少时候,咱们常常会很奇怪,为何我搜索的这个词没有返回结果呢? 

若是没有返回结果,基本可以证实它在索引中,是不存在的,或者有时候,咱们搜索了中国人,可以搜索数据,可是若是搜索中国,却搜不到数据? 这一切都跟倒排有关? 若是咱们出现上面的一些问题,那么该怎么办呢? 



莫慌,若是对分词很了解的朋友们,基本上都很够找到缘由,由于索引里面的数据,是须要通过分词,而后在索引的,其实就是把一篇文章,切成不一样的token也称(term),检索的关键词只要和这些token匹配,基本就能搜索到数据,固然这是很复杂的流程,在Lucene里,要通过语法树分析,优化,查询,评分,排序等。 

ElasticSearch虽然也是构建与Lucene之上,可是ElasticSearch却重写了本身独有的倒排表存取解析格式,因此直接使用Luke来打开elasticSearch的索引,是不会成功的。 

而Solr在这一方面就表现的很是好,彻底兼容Lucene,他们的索引互相之间能够共用,从这一方面来说,Apache Solr应该是正统的Lucene的系的企业级搜索框架,而ElasticSearch因为改写的内容比较多,因此与原始的Lucene误差相对较大,不过它仍然是基于Lucene构建的一款优秀的全文检索框架。 


回答文章开始提出的问题,若是在检索的某些词的时候,没有返回任何数据,此时咱们就可使用luke来打开因此查看,倒排表的索引数据。 

下面,看下如何编译打包支持ElasticSearch的Luke: 

(1)在GigHub上,check出luke的源码 
(2)修改此项目的pom文件,添加elasticsearch支持: 

Java代码     收藏代码
  1. <!-- ElasticSearch -->  
  2.      <dependency>  
  3.          <groupId>org.elasticsearch</groupId>  
  4.          <artifactId>elasticsearch</artifactId>  
  5.          <version>1.4.4</version>  
  6.      </dependency>  

3,执行mvn package命令,打包jar,执行完成后会在target目录下生成一个luke-with-deps.jar的文件 

4,解压此jar包,将luke-with-deps.jar\META-INF\services下的org.apache.lucene.codecs.PostingsFormat文件打开,在文件的末尾,添加以下三行elasticsearch的索引格式读写的类全名 


Java代码     收藏代码
  1. org.apache.lucene.codecs.lucene40.Lucene40PostingsFormat  
  2. org.apache.lucene.codecs.lucene41.Lucene41PostingsFormat  
  3. org.elasticsearch.index.codec.postingsformat.BloomFilterPostingsFormat  
  4. org.elasticsearch.index.codec.postingsformat.Elasticsearch090PostingsFormat  
  5. org.elasticsearch.search.suggest.completion.Completion090PostingsFormat  

5,添加完成后,再次放入压缩包中,而后在命令行执行java -jar luke-with-deps.jar 便可打开Luke,而后咱们就能够在界面选择elasticsearc的索引,进行查看了。 

注意一点,当索引为空的时候,luke会报一个异常: 
There are no postings in the index reader的异常,这并不影响luke的正常使用,你们能够直接忽略! 

不想本身打包jar的朋友们,能够在微信公众号里留言,散仙会发到你们邮箱里的,iteye这里有限制,jar包比较大,超出了范围,因此在这里上传不了,请你们谅解 


参考资料: 

https://simpsora.wordpress.com/2014/05/06/using-luke-with-elasticsearch/ 

http://youku.io/questions/429202/elasticsearch-and-luke 

http://lingpipe-blog.com/2012/07/24/using-luke-the-lucene-index-browser-to-develop-search-queries/
相关文章
相关标签/搜索