专栏首页我是攻城师ElasticSearch入门之风花雪月(五)

ElasticSearch入门之风花雪月(五)

以前经常有人问散仙,如何学好搜索? 其实这个问题很具有代表性,你可以归纳为一类问题? 其实,散仙在以前博客的中,也有总结过,回复微信后台回复关键词10查看。 本篇散仙要介绍的内容,是关于如何用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>
   <!-- ElasticSearch -->
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>1.4.4</version>
        </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
org.apache.lucene.codecs.lucene40.Lucene40PostingsFormat
org.apache.lucene.codecs.lucene41.Lucene41PostingsFormat
org.elasticsearch.index.codec.postingsformat.BloomFilterPostingsFormat
org.elasticsearch.index.codec.postingsformat.Elasticsearch090PostingsFormat
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的朋友们,可以在微信公众号里留言自己的邮箱,散仙会统一发到大家邮箱里。

往期相关文章查看:

ElasticSearch入门(一) 回复关键词11查看

ElasticSearch入门(二) 回复关键词12查看

ElasticSearch入门(三) 回复关键词13查看

ElasticSearch入门(四) 回复关键词14查看

参考资料: 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/

本文分享自微信公众号 - 我是攻城师(woshigcs),作者:散仙

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-03-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ElasticSearch入门之彼行我释(四)

    我是攻城师
  • 如何使用Pig集成分词器来统计新闻词频?

    我是攻城师
  • ElasticSerach基本概念

    我是攻城师
  • java.lang.NoSuchMethodError: org.elasticsearch.action.support.master.AcknowledgedResponse

    国外用户也遇到类似的错误 https://stackoverflow.com/questions/53755092/i-got-a-java-lang-nos...

    程裕强
  • spring service层单元测试

    service层测试较简单,目前大多数测试主要是针对public方法进行的。依据测试方法划分,可以分为两种:基于mock的隔离测试和基于dbunit的普通测试。...

    YGingko
  • HttpClient 发送Json

    shengjk1
  • 半导体厂商都在力推自家的工具链

    近些年,各大主要半导体厂商都在积极推动自己的工具链,无论是NXP的MCUXpresso IDE以及配置工具 MCUXpresso Config,

    用户1605515
  • SpringBoot-JavaMail ----传输邮件

    用户5927264
  • python中类和对象

    这里提到的“方法”,其实就是我们以前学过的函数,只不过在类的外面定义的时候叫函数,在类内部定义的时候,我们就叫方法。

    刘金玉编程
  • 我是如何在SQLServer中处理每天四亿三千万记录的

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛...

    逸鹏

扫码关注云+社区

领取腾讯云代金券