分佈式搜索Elasticsearch 概述

原文鏈接http://blog.csdn.net/geloin/article/details/8444658  

Elasticsearch是一個基於lucene的、開源的、分佈式的、RESTful的搜索引擎。Elasticsearch有如下特徵:

       1. 更快的執行搜索;
       2. 安裝簡單;
       3. 完全自由的搜索模式;
       4. 可以簡單地通過HTTP使用JSON索引數據;
       5. 分佈式,可對搜索集羣;
       6. 能夠實時搜索;
       7. 實現簡單地多租戶;
       8. 等等。

       很多時候我們使用Elasticsearch來代替lucene實現搜索,當然,代替的原因是因爲其可實現搜索集羣。

       自由和麪向文檔的模式

       搜索引擎的數據模型屬於模式自由以及數據庫是面向文檔的,以目前#nosql的發展趨勢來看,使用這種數據模型來構建應用程序已經被證明是非常高效的。

         elasticsearch 的模型基於 JSON, 事實上,在近些年,它儼然已經成爲數據呈現的一個標準,此外,通過JSON,可以非常簡單的表示半結構化的數據,同樣的,大多數編程語言都會優先支持JSON數據的解析.

        模式映射(Schema Mapping)

        elasticsearch是無模式的,你隨便往裏面扔一個JSON格式的文檔,然後ES就可以自動的進行索引。輸入的內容如果是數字或者是時間類型,ES也自動的檢測出來,並做相應的處理。

        但是,衆所周知,搜索引擎是非常複雜的,索引文檔中的字段是可以設置BOOST值來影響打分的,另外還可以使用不同的分析器(Analyzer)用來控制怎麼分詞,比如有些字段是需要進行分詞的,但是有些則不一定,如此等等。elasticsearch允許你完全控制這些規則,最終將一個JSON文檔映射到搜索引擎裏面。並且可以按索引(Index)和按類型(Type)2種級別來進行設置.。

        獲取數據(GETting Some Data)

        每個索引的文檔都必須要有一個唯一標識(在類型級別),在很多時候這是非常有用的,比如你想更新或者刪除某一個索引文檔,或者只是想拿一條索引數據看看。獲取數據真是簡單的不能再簡單了,你只需用告訴es指定文檔的索引、類型、和id就可以拿回實際的索引文檔了(就是你建索引的時候的JSON文檔)。

        搜索(Search)

        處理查詢只需要一個簡單的請求,裏面隱藏了很多複雜的es提供的基於分佈式的操作。可以簡單的使用 Lucene通用的語法,或者使用基於JSON格式QueryDSL(DSL:領域特定語言)來構造搜索各種請求(更加靈活,方便構造複雜查詢)。

        搜索可不僅僅就是查詢就結束了,方面/層面(facets),高亮,自定義腳本等等都是支持的。 

        多租戶(Multi Tenancy)

        單個索引既然已經有了,那爲什麼還會需要不止一個索引呢,其實,有很多原因需要支持多索引,比如,對日誌索引可以按周來分別存放,或者是對不同的索引進行不同的設置(比如,一個使用內存作爲存儲,一個使用文件系統來存儲)。

        當有了多個索引之後,我們就想要能夠跨索引來進行搜索(或者其他操作)。 

        設置(Settings)

        能夠進行配置本身就是一把雙刃劍,我們想要的是能夠打開就能儘快運行,中間無需任何配置,並且當有需要的時候能夠控制應用程序的幾乎所有方面。

        elasticsearch 從構建之初就這種理念,所以幾乎所有事情都是可配和可插拔的,此外,每個索引(index)都有其獨立的配置,用來覆蓋主配置(master settings)。舉例來說,一個索引可以配置爲使用內存存儲,10個分片和1個副本,而另外一個索引可以是使用文件系統存儲,1個分片和10個副本。所有的索引級別(index)的設置都是可以在創建索引的時候通過YAML或者JSON格式來進行指定的。

        分佈式(Distributed)

        elasticsearch的一個最主要的功能就是對分佈式的支持,索引能夠分拆爲多個分片,每個分片可以有0個或者多個副本,集羣中的每個數據節點,都可以承載一個或者多個分片,並且充當協調和處理各種操作分發到合適的分片上去。再平衡(Rebalancing)和路由(routing)這一切都是自動進行的。

        時間之門(Gateway)

        也許有一天,整個集羣會崩潰(誰也無法保證因爲什麼原因),或者是因爲特殊需要而進行關停,大多數情況,我們是需要讓集羣恢復到最後的一個狀態的,並且讓服務重新run起來 ,elasticsearch提供了一個叫做gateway的模塊,允許你來做這件事情,你可以想想時間機器和搜索的結合。

        集羣的狀態信息(包括事務日誌)可以通過每個本地存儲(默認模式)來重建,或共享存儲(如NFS或者Amazon S3),當使用共享存儲,集羣狀態信息會異步的複製過去。

        此外,當使用共享存儲來做持久化,索引信息可以完全的存放在內存裏面,就算做整個集羣的關閉再恢復也不會有問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章