<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ivaneeo's blog

    自由的力量,自由的生活。

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
    ElasticSearch是一個基于Lucene構建的開源,分布式,RESTful搜索引擎。設計用于云計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。支持通過HTTP使用JSON進行數據索引。 

      我們建立一個網站或應用程序,并要添加搜索功能,令我們受打擊的是:搜索工作是很難的。我們希望我們的搜索解決方案要快,我們希望 有一個零配置和一個完全免費的搜索模式,我們希望能夠簡單地使用JSON通過HTTP的索引數據,我們希望我們的搜索服務器始終可用,我們希望能夠一臺開 始并擴展到數百,我們要實時搜索,我們要簡單的多租戶,我們希望建立一個云的解決方案。Elasticsearch旨在解決所有這些問題和更多的。

    安裝

      以windows操作系統和ES0.19.7版本為例:

     

      ①下載elasticsearch-0.19.7.zip

     

      ②直接解壓至某目錄,設置該目錄為ES_HOME環境變量

     

      ③安裝JDK,并設置JAVA_HOME環境變量

     

      ④在windows下,運行 %ES_HOME%\bin\elasticsearch.bat即可運行

    分布式搜索elasticsearch單機與服務器環境搭建

          先到http://www.elasticsearch.org/download/下 載最新版的elasticsearch運行包,本文寫時最新的是0.19.1,作者是個很勤快的人,es的更新很頻繁,bug修復得很快。下載完解開有三 個包:bin是運行的腳本,config是設置文件,lib是放依賴的包。如果你要裝插件的話就要多新建一個plugins的文件夾,把插件放到這個文件 夾中。

    1.單機環境:

    單機版的elasticsearch運行很簡單,linux下直接 bin/elasticsearch就運行了,windows運行bin/elasticsearch.bat。如果是在局域網中運行elasticsearch集群也是很簡單的,只要cluster.name設置一致,并且機器在同一網段下,啟動的es會自動發現對方,組成集群。

    2.服務器環境:

    如果是在服務器上就可以使用elasticsearch-servicewrapper這個es插件,它支持通過參數,指定是在后臺或前臺運行es,并且支持啟動,停止,重啟es服務(默認es腳本只能通過ctrl+c關閉es)。使用方法是到https://github.com/elasticsearch/elasticsearch-servicewrapper下載service文件夾,放到es的bin目錄下。下面是命令集合:
    bin/service/elasticsearch +
    console 在前臺運行es
    start 在后臺運行es
    stop 停止es
    install 使es作為服務在服務器啟動時自動啟動
    remove 取消啟動時自動啟動

    在service目錄下有個elasticsearch.conf配置文件,主要是設置一些java運行環境參數,其中比較重要的是下面的

    參數:

    #es的home路徑,不用用默認值就可以
    set.default.ES_HOME=<Path to ElasticSearch Home>

    #分配給es的最小內存
    set.default.ES_MIN_MEM=256

    #分配給es的最大內存
    set.default.ES_MAX_MEM=1024


    # 啟動等待超時時間(以秒為單位)
    wrapper.startup.timeout=300

    # 關閉等待超時時間(以秒為單位)

    wrapper.shutdown.timeout=300

    # ping超時時間(以秒為單位)

    wrapper.ping.timeout=300

    安裝插件

      以head插件為例:

     

      聯網時,直接運行%ES_HOME%\bin\plugin -install mobz/elasticsearch-head

     

      不聯網時,下載elasticsearch-head的zipball的master包,把內容解壓到%ES_HOME%\plugin\head\_site目錄下,[該插件為site類型插件]

     

      安裝完成,重啟服務,在瀏覽器打開 http://localhost:9200/_plugin/head/ 即可

    ES概念

      cluster

     

      代表一個集群,集群中有多個節點,其中有一個為主節點,這個主節點是可以通過選舉產生的,主從節點是對于集群內部來說 的。es的一個概念就是去中心化,字面上理解就是無中心節點,這是對于集群外部來說的,因為從外部來看es集群,在邏輯上是個整體,你與任何一個節點的通 信和與整個es集群通信是等價的。

     

      shards

     

      代表索引分片,es可以把一個完整的索引分成多個分片,這樣的好處是可以把一個大的索引拆分成多個,分布到不同的節點上。構成分布式搜索。分片的數量只能在索引創建前指定,并且索引創建后不能更改。

     

      replicas

     

      代表索引副本,es可以設置多個索引的副本,副本的作用一是提高系統的容錯性,當個某個節點某個分片損壞或丟失時可以從副本中恢復。二是提高es的查詢效率,es會自動對搜索請求進行負載均衡。

     

      recovery

     

      代表數據恢復或叫數據重新分布,es在有節點加入或退出時會根據機器的負載對索引分片進行重新分配,掛掉的節點重新啟動時也會進行數據恢復。

     

      river

     

      代表es的一個數據源,也是其它存儲方式(如:數據庫)同步數據到es的一個方法。它是以插件方式存在的一個es服 務,通過讀取river中的數據并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia 的。

     

      gateway

     

      代表es索引的持久化存儲方式,es默認是先把索引存放到內存中,當內存滿了時再持久化到硬盤。當這個es集群關閉再 重新啟動時就會從gateway中讀取索引數據。es支持多種類型的gateway,有本地文件系統(默認),分布式文件系統,Hadoop的HDFS和 amazon的s3云存儲服務。

     

      discovery.zen

     

      代表es的自動發現節點機制,es是一個基于p2p的系統,它先通過廣播尋找存在的節點,再通過多播協議來進行節點之間的通信,同時也支持點對點的交互。

     

      Transport

     

      代表es內部節點或集群與客戶端的交互方式,默認內部是使用tcp協議進行交互,同時它支持http協議(json格式)、thrift、servlet、memcached、zeroMQ等的傳輸協議(通過插件方式集成)。

    分布式搜索elasticsearch中文分詞集成

    elasticsearch官方只提供smartcn這個中文分詞插件,效果不是很好,好在國內有medcl大神(國內最早研究es的人之一)寫的兩個中文分詞插件,一個是ik的,一個是mmseg的,下面分別介紹下兩者的用法,其實都差不多的,先安裝插件,命令行:
    安裝ik插件:

    plugin -install medcl/elasticsearch-analysis-ik/1.1.0  

    下載ik相關配置詞典文件到config目錄

    1. cd config  
    2. wget http://github.com/downloads/medcl/elasticsearch-analysis-ik/ik.zip --no-check-certificate  
    3. unzip ik.zip  
    4. rm ik.zip  

    安裝mmseg插件:

    1. bin/plugin -install medcl/elasticsearch-analysis-mmseg/1.1.0  

    下載相關配置詞典文件到config目錄

    1. cd config  
    2. wget http://github.com/downloads/medcl/elasticsearch-analysis-mmseg/mmseg.zip --no-check-certificate  
    3. unzip mmseg.zip  
    4. rm mmseg.zip  

    分詞配置

    ik分詞配置,在elasticsearch.yml文件中加上

    1. index:  
    2.   analysis:                     
    3.     analyzer:        
    4.       ik:  
    5.           alias: [ik_analyzer]  
    6.           type: org.elasticsearch.index.analysis.IkAnalyzerProvider  

    1. index.analysis.analyzer.ik.type : “ik”  

    這兩句的意義相同
    mmseg分詞配置,也是在在elasticsearch.yml文件中

    1. index:  
    2.   analysis:  
    3.     analyzer:  
    4.       mmseg:  
    5.           alias: [news_analyzer, mmseg_analyzer]  
    6.           type: org.elasticsearch.index.analysis.MMsegAnalyzerProvider  

    1. index.analysis.analyzer.default.type : "mmseg"  

    mmseg分詞還有些更加個性化的參數設置如下

    1. index:  
    2.   analysis:  
    3.     tokenizer:  
    4.       mmseg_maxword:  
    5.           type: mmseg  
    6.           seg_type: "max_word"  
    7.       mmseg_complex:  
    8.           type: mmseg  
    9.           seg_type: "complex"  
    10.       mmseg_simple:  
    11.           type: mmseg  
    12.           seg_type: "simple"  

    這樣配置完后插件安裝完成,啟動es就會加載插件。

    定義mapping

    在添加索引的mapping時就可以這樣定義分詞器

    1. {  
    2.    "page":{  
    3.       "properties":{  
    4.          "title":{  
    5.             "type":"string",  
    6.             "indexAnalyzer":"ik",  
    7.             "searchAnalyzer":"ik"  
    8.          },  
    9.          "content":{  
    10.             "type":"string",  
    11.             "indexAnalyzer":"ik",  
    12.             "searchAnalyzer":"ik"  
    13.          }  
    14.       }  
    15.    }  
    16. }  

    indexAnalyzer為索引時使用的分詞器,searchAnalyzer為搜索時使用的分詞器。

    java mapping代碼如下:

    1. XContentBuilder content = XContentFactory.jsonBuilder().startObject()  
    2.         .startObject("page")  
    3.           .startObject("properties")         
    4.             .startObject("title")  
    5.               .field("type", "string")             
    6.               .field("indexAnalyzer", "ik")  
    7.               .field("searchAnalyzer", "ik")  
    8.             .endObject()   
    9.             .startObject("code")  
    10.               .field("type", "string")           
    11.               .field("indexAnalyzer", "ik")  
    12.               .field("searchAnalyzer", "ik")  
    13.             .endObject()       
    14.           .endObject()  
    15.          .endObject()  
    16.        .endObject()  

    定義完后操作索引就會以指定的分詞器來進行分詞。

     附:

    ik分詞插件項目地址:https://github.com/medcl/elasticsearch-analysis-ik

    mmseg分詞插件項目地址:https://github.com/medcl/elasticsearch-analysis-mmseg

    如果覺得配置麻煩,也可以下載個配置好的es版本,地址如下:https://github.com/medcl/elasticsearch-rtf

     

    elasticsearch的基本用法


    最大的特點: 
    1. 數據庫的 database, 就是  index 
    2. 數據庫的 table,  就是 tag 
    3. 不要使用browser, 使用curl來進行客戶端操作.  否則會出現 java heap ooxx... 

    curl:  -X 后面跟 RESTful :  GET, POST ... 
    -d 后面跟數據。 (d = data to send) 

    1. create:  

    指定 ID 來建立新記錄。 (貌似PUT, POST都可以) 
    $ curl -XPOST localhost:9200/films/md/2 -d ' 
    { "name":"hei yi ren", "tag": "good"}' 

    使用自動生成的 ID 建立新紀錄: 
    $ curl -XPOST localhost:9200/films/md -d ' 
    { "name":"ma da jia si jia3", "tag": "good"}' 

    2. 查詢: 
    2.1 查詢所有的 index, type: 
    $ curl localhost:9200/_search?pretty=true 

    2.2 查詢某個index下所有的type: 
    $ curl localhost:9200/films/_search 

    2.3 查詢某個index 下, 某個 type下所有的記錄: 
    $ curl localhost:9200/films/md/_search?pretty=true 

    2.4 帶有參數的查詢:  
    $ curl localhost:9200/films/md/_search?q=tag:good 
    {"took":7,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":2,"max_score":1.0,"hits":[{"_index":"film","_type":"md","_id":"2","_score":1.0, "_source" : 
    { "name":"hei yi ren", "tag": "good"}},{"_index":"film","_type":"md","_id":"1","_score":0.30685282, "_source" : 
    { "name":"ma da jia si jia", "tag": "good"}}]}} 

    2.5 使用JSON參數的查詢: (注意 query 和 term 關鍵字) 
    $ curl localhost:9200/film/_search -d ' 
    {"query" : { "term": { "tag":"bad"}}}' 

    3. update  
    $ curl -XPUT localhost:9200/films/md/1 -d { ...(data)... } 

    4. 刪除。 刪除所有的: 
    $ curl -XDELETE localhost:9200/films
    posted on 2013-10-04 02:09 ivaneeo 閱讀(16757) 評論(0)  編輯  收藏 所屬分類:
    主站蜘蛛池模板: 精品免费久久久久久久| 暖暖在线视频免费视频| 四虎在线视频免费观看| 91亚洲性爱在线视频| **aaaaa毛片免费| 亚洲成A∨人片在线观看无码| 免费h视频在线观看| 亚洲国产精品热久久| 99久久99热精品免费观看国产| 日韩亚洲AV无码一区二区不卡 | 亚洲精品国产日韩无码AV永久免费网| 免费一级黄色毛片| EEUSS影院WWW在线观看免费| 亚洲热线99精品视频| 99久久免费中文字幕精品| 亚洲一区在线免费观看| 国产色婷婷精品免费视频| 色婷婷亚洲一区二区三区| 精品国产亚洲男女在线线电影| 99免费精品视频| 亚洲精品福利网站| 高清国语自产拍免费视频国产| 无人视频在线观看免费播放影院| 亚洲色无码专区在线观看| 4399影视免费观看高清直播| 亚洲色大成网站www| 亚洲国产精品人人做人人爱| 国产成年无码久久久免费| 亚洲婷婷综合色高清在线| 日本不卡在线观看免费v| 一级特黄录像视频免费| 久久久久亚洲AV无码网站| 午夜免费福利网站| 国产精品极品美女自在线观看免费| 亚洲天堂男人天堂| 男女啪啪永久免费观看网站| 久久久WWW免费人成精品| 亚洲13又紧又嫩又水多| 日日噜噜噜噜夜夜爽亚洲精品| 永久免费视频网站在线观看| 天天综合亚洲色在线精品|