全文搜索引擎 Elasticsearch 入門教程-Index

前言:

之前已經(jīng)說過最近正在做數(shù)據(jù)建設(shè)凫佛,爬取數(shù)據(jù)之后經(jīng)過處理,最終導入到ElasticSearch中,并編寫公共接口以提供給后臺進行檢索操作;本來想等把ElasticSearch官方API都看過一遍疟暖,形成思維導圖之后再整理出來,因為熟悉一個工具田柔,它能做到的俐巴,比你知道它能做到的要全面也重要的多,但是整理了兩章之后發(fā)現(xiàn)凯楔,內(nèi)容真的太多了窜骄,這還僅僅只2類。摆屯。所以想還是先把基礎(chǔ)用法記錄下來,先一步步來了糠亩。

ElasticSearch

ElasticSearch 簡介

Elasticsearch 是一個分布式可擴展的近實時搜索和分析引擎,一個建立在全文搜索引擎 Apache Lucene(TM) 基礎(chǔ)上的搜索引擎.當然 Elasticsearch 并不僅僅是 Lucene 那么簡單虐骑,它不僅包括了全文搜索功能,還可以進行以下工作:

  • 分布式實時文件存儲赎线,并將每一個字段都編入索引廷没,使其可以被搜索。
  • 實時分析的分布式搜索引擎垂寥。
  • 可以擴展到上百臺服務(wù)器颠黎,處理PB級別的結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)。

ElasticSearch 安裝

安裝比較簡單滞项,建議練手階段安裝Kibana狭归,安裝步驟參見之前寫的博客:ElasticSearch安裝

基本概念:

  • ES是一個近實時的搜索引擎,面向文檔型數(shù)據(jù)庫文判,一條數(shù)據(jù)就對應(yīng)一個文檔过椎,以JSON格式存儲;
  • 所有的操作都是通過rest接口實現(xiàn)戏仓,即每一個操作都是向ES發(fā)送要給rest請求
  • 支持分布式部署疚宇,node節(jié)點跟slave集群亡鼠;
  • shards分片:個人感覺類似于關(guān)系型數(shù)據(jù)庫的分區(qū)分表操作
  • replicas副本:類似于傳統(tǒng)數(shù)據(jù)庫的從表了,ES里是針對每個shards而言的副本
    例如:創(chuàng)建index默認為shards為5敷待,replicas為1间涵,則意味著總共有10個shards,5個主5個從;
  • 與傳統(tǒng)關(guān)系型數(shù)據(jù)庫術(shù)語對照表如下:

關(guān)系數(shù)據(jù)庫 ? 數(shù)據(jù)庫 ? 表 ? 行 ? 列(Columns)
Elasticsearch ? 索引(Index) ? 文檔(Docments) ? 字段(Fields)

  • 6.x之后ES建議刪除type榜揖,因為按照目前理解的type=table浑厚,但實際上卻并不太一樣,ES里同一個index下的多個type字段類型必須一致根盒;但是傳統(tǒng)數(shù)據(jù)庫中钳幅,一個db里的多個table是可以不一樣的;
    具體可看官網(wǎng):刪除type及替代方案
    目前6.x語法上也還是支持type炎滞,7.x語法就不支持了敢艰,所以要習慣理解修改后的模式:

Elasticsearch ? 索引(Index) ? 文檔(Docments) ? 字段(Fields)

創(chuàng)建Index(索引)

既然刪除了type,感覺將Index理解為table是不是更加合理些册赛。钠导。

創(chuàng)建Index語法如下:

PUT /userinfo?pretty
{
  "mappings": {
    "_doc": { 
      "properties": {
        "name": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_max_word", "fields": {"raw":{"type":"keyword"}}},
        "content": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_max_word"   },
        "org_type": { "type": "keyword"},
        "create_time":{"type":"date", "format": "epoch_second"}
      }
    }
  }
}

如果理解了上面的基本概念的話,這命令看起來應(yīng)該不難理解森瘪,有幾點需要提一下:

  • analyzer牡属、search_analyzer:為該字段配置的分詞器,
    • 中文一般使用ik分詞器 包括ik_max_word和ik_smart扼睬,ik_max_word:會將文本做最細粒度的拆分逮栅;盡可能多的拆分出詞語 ,ik_smart:會做最粗粒度的拆分窗宇;已被分出的詞語將不會再次被其它詞語占有
  • type為text的不支持排序措伐,統(tǒng)計等操作,如有排序或統(tǒng)計需求军俊,則需在后面加上"fields": {"raw":{"type":"keyword"}}以支持該功能侥加,text 類型的字段,如不指定分詞器粪躬,ES會默認設(shè)置分詞器
  • type為date可以指定轉(zhuǎn)換格式担败,epoch_second轉(zhuǎn)換為當前時間的秒數(shù)
    這只是簡單常用的創(chuàng)建Index的命令,完整的請點擊Mapping API
  • ES會根據(jù)值自動創(chuàng)建映射镰官,例如提前,給usetinfo新增一個age字段,可以直接添加即可:
      PUT /userinfo/_doc/1?
     {
      "name":"lctest",
      "age":29
    }
    
    通過GET /userinfo/_mapping命令查看userinfo最新的字段朋魔,可以看到ES默認新增了一個類型為long的age字段岖研。但是一般建議關(guān)鍵字段在創(chuàng)建Index的時候進行指定字段;
    {
    "userinfo": {
      "mappings": {
        "_doc": {
          "properties": {
            "age": {
              "type": "long"
            },
            "content": {
              "type": "text",
              "analyzer": "ik_max_word"
            },
            "create_time": {
              "type": "date",
              "format": "epoch_second"
            },
            "name": {
              "type": "text",
              "fields": {
                "raw": {
                  "type": "keyword"
                }
              },
              "analyzer": "ik_max_word"
            },
            "org_type": {
              "type": "keyword"
            }
          }
        }
      }
    }
    }
    

修改Index

  • ES不支持對索引中已有的字段進行修改,只能添加字段孙援,添加字段有兩種方法害淤,
    • 上面提到的,直接賦值拓售,由ES去創(chuàng)建字段窥摄;
    • 手動設(shè)置字段,代碼如下:
    PUT /userinfo/_mapping/_doc
    {
    "properties": {
      "params": {
          "type":     "nested",
          "properties": {
           "update_time":{"type":"date", "format": "epoch_second"}
          }
        }
      }
    }
    

刪除Index

  //刪除指定索引
  DELETE /userinfo
  //刪除多個索引
  DELETE /index1,index2 或者 DELETE /index*
  //刪除所有索引
  DELETE /_all 或者 DELETE /*

最基本的索引操作就到此結(jié)束础淤,基本上能滿足簡單的基本需求崭放,下面有一些擴展知識點,可以選擇性的使用

aliases別名

索引別名就像一個快捷方式或軟連接,或者是一個指向鸽凶,都是最終指的同一個東西币砂,別名 帶給我們極大的靈活性,允許我們做下面這些:

  • 在運行的集群中可以無縫的從一個索引切換到另一個索引
  • 給多個索引分組 (例如玻侥, last_three_months)
  • 給索引的一個子集創(chuàng)建 視圖
    有兩種方式管理別名: _alias用于單個操作决摧, _aliases用于執(zhí)行多個原子級操作。
    • 創(chuàng)建別名
      POST /_aliases
     {
      "actions" : [
          { "add" : { "index" : "test1", "alias" : "alias1" } }
      ]
     }
    
    • 刪除別名
     POST /_aliases
     {
      "actions" : [
          { "remove" : { "index" : "test1", "alias" : "alias1" } }
      ]
    }
    
  • 切換索引
    POST /_aliases
    {
     "actions" : [
         { "remove" : { "index" : "test1", "alias" : "alias1" } },
         { "add" : { "index" : "test2", "alias" : "alias1" } }
     ]
     }
    
  • 操作單個索引
      PUT /{index}/_alias/{name}
      PUT /logs_201305/_alias/2013
    

以上便是Index別名的基本常用語法凑兰,完整API詳見Aliases API

常用命令

  • 查看所有索引信息 GET /_cat/indices?v&pretty

  • 查看某個索引信息 GET /{index}

  • 刪除索引單個索引 DELETE /{index}

  • 刪除所有索引 DELETE /_all 或者 DELETE /*

  • 刪除多個索引: DELETE /index1,index2 或者 DELETE /index*

  • 查看索引的映射 GET /{index}/_mapping

  • 查看某個索引的某個類型的映射 GET /{index}/_mapping/{type}

  • 映射添加新字段 PUT /{index}/_mapping/{type}

禁用通配符

為了防止誤操作 掌桩,造成刪庫跑路的情況,建議在elasticsearch.yml 做如下配置:action.destructive_requires_name: true 這個設(shè)置使刪除只限于特定名稱指向的數(shù)據(jù), 而不允許通過指定 _all 或通配符來刪除指定索引庫姑食。你同樣可以通過 Cluster State API 動態(tài)的更新這個設(shè)置波岛。

新手推薦使用Kibana工具,帶命令提示音半,很適合不熟悉命令的初學者则拷,我也一直在用,只是博客的話祟剔,命令的表現(xiàn)形式感覺更好一些

kibana

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末隔躲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子物延,更是在濱河造成了極大的恐慌,老刑警劉巖仅父,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叛薯,死亡現(xiàn)場離奇詭異,居然都是意外死亡笙纤,警方通過查閱死者的電腦和手機耗溜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來省容,“玉大人抖拴,你說我怎么就攤上這事。” “怎么了阿宅?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵候衍,是天一觀的道長。 經(jīng)常有香客問我洒放,道長蛉鹿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任往湿,我火速辦了婚禮妖异,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘领追。我一直安慰自己他膳,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布绒窑。 她就那樣靜靜地躺著棕孙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪回论。 梳的紋絲不亂的頭發(fā)上散罕,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音傀蓉,去河邊找鬼欧漱。 笑死,一個胖子當著我的面吹牛葬燎,可吹牛的內(nèi)容都是我干的误甚。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼谱净,長吁一口氣:“原來是場噩夢啊……” “哼窑邦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起壕探,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤冈钦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后李请,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞧筛,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年导盅,在試婚紗的時候發(fā)現(xiàn)自己被綠了较幌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡白翻,死狀恐怖乍炉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤岛琼,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布底循,位于F島的核電站,受9級特大地震影響衷恭,放射性物質(zhì)發(fā)生泄漏此叠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一随珠、第九天 我趴在偏房一處隱蔽的房頂上張望灭袁。 院中可真熱鬧,春花似錦窗看、人聲如沸茸歧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽软瞎。三九已至,卻和暖如春拉讯,著一層夾襖步出監(jiān)牢的瞬間涤浇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工魔慷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留只锭,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓院尔,卻偏偏與公主長得像蜻展,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子邀摆,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容

  • ## 寫在前面 前段時間在實時獲取SQLServer數(shù)據(jù)庫變化時候纵顾,整個過程可謂是坎坷。然后就想在這里記錄一下栋盹。 ...
    留歌_36閱讀 1,107評論 0 0
  • Elastic+logstash+head簡單介紹 一. 概述 ElasticSearch是一個基于Lucene的...
    柒月失凄閱讀 4,238評論 0 4
  • 《賣米》的故事看過沒施逾? 那天偶然打開某一鏈接,看到這篇文章例获,2004北大校園原創(chuàng)文學一等獎音念。文中以非常樸實的文字記...
    葙葙子閱讀 130評論 0 0
  • 黑白灰之間的無彩色,都能相互搭配躏敢。一起來看一下相關(guān)搭配吧。 黑色上衣搭配淺灰色褲子 淺灰色的直筒褲能夠修飾腿型不直...
    懶懶穿搭花園閱讀 5,698評論 0 1
  • 慢慢向我們靠近的畢業(yè)季整葡,帶著激動件余,興奮,不舍等眾多五味雜陳的情緒向我們襲來。當然啼器,更多的可能就是迷茫了旬渠! ...
    如陽0827閱讀 615評論 0 0