ElasticSearch入门之风花雪月(五)

news/2024/7/19 19:01:42 标签: lucene, solr, elasticsearch, hadoop, 全文检索



以前经常有人问散仙,如何学好搜索? 其实这个问题很具有代表性,你可以归纳为一类问题? 其实,散仙在以前博客的中,也有总结过,大家可以点击这个链接再看一下。 

本篇散仙要介绍的内容,是关于如何用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/ 

http://www.niftyadmin.cn/n/789176.html

相关文章

RSAProtectedConfigurationProvider加密web.config

上一篇文章介绍了用 DataProtectionConfigurationProvider加密web.config文件的方法&#xff0c;不过他有一个缺陷&#xff0c;加密的文件只有在本机才能解密&#xff0c;如果有多台服务器的话&#xff0c;则需要每台机单独加密&#xff0c;因此不利于部署。 而利用RSAProtecte…

小程序——colorUI库初识

QQ 1285575001 Wechat M010527 技术交流 QQ群599020441 纪年科技aming #下载应用# ColorUI 地址 下载 解压后 一共三个文件夹 第一个 ColorUI 的项目源码第二个/第三个 文件夹都 可以直接部署在小程序开发工具上的项目 我们可以将其导入到小程序开发工具中&#xff0c;查看…

leetcode_07 Longest Palindromic Substring

本文接着讨论最长回文子串 解法三&#xff1a;暴力向外扩张&#xff0c;从i位置开始&#xff0c;向两边扩张&#xff0c;不超出[0,s.length()-1],如果相等继续扩张&#xff0c;如果不等&#xff0c;继续下一个位置&#xff1b; 注意奇偶回文&#xff0c;奇回文以当前位置为中…

机器翻译--求助帖

哈喽哈 有一点困惑&#xff0c;不知道能不能得到你百忙之中的帮助[捂眼]我是一名大学生&#xff0c;我们在大学里有一个大创项目&#xff0c;主要是做一个科技法语的翻译网页&#xff0c;因为科技法语的数据是我们在自己的各个课程ppt上搜集到的&#xff0c;所以我们是自建数据…

Pig使用问题总结

[b][colorblack][sizelarge] 1,如果是a::tags#pic作为参数&#xff0c;传递给另一个函数方法&#xff0c;需要转义多次,二次调用函数&#xff0c;就是这个方法里&#xff0c;又调用了其他方方法&#xff0c;参数也是层层传递&#xff0c;需要转义两次&#xff0c;尤其是map里的…

使用Jquery解析Json基础知识

前言 重点&#xff1a;在WEB数据传输过程中&#xff0c;json是以文本&#xff0c;即字符串的轻量级形式传递的&#xff0c;而客户端一般用JS操作的是接收到的JSON对象&#xff0c;所以&#xff0c;JSON对象和JSON字符串之间的相互转换、JSON数据的解析&#xff08;就是把从后台…

JAVA实战——视频管理系统使用mybatis逆向工具生成文件

QQ 1285575001 Wechat M010527 技术交流 QQ群599020441 纪年科技aming 使用mybatis逆向工具生成文件 pojo mapper 类生成 配置 放在项目目录下配置 连接 信息 数据源 对应各种接口 写入各种包 - 配对 各种表 Run as生成 对应 表 接口 相对应对应 类方法复制对应包 到自己的…

计算方法——牛顿插值方法的C++实现

牛顿插值多项式: 差商表&#xff1a; 牛顿插值多项式中的表示差商表中的项&#xff0c;具体里是0至n&#xff0c;就是差商表中的坐标项。 差商表的计算&#xff1a; 需要按列计算&#xff0c;即第一列、第二列按这个顺序计算。下面以已知插值节点是为例&#xff0c;计算差商…