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/
相關文章
相關標籤/搜索