15.ElasticSearch介紹及基本使用

ElasticSearch是一個基于Lucene的搜索服務(wù)器。它提供了一個分布式多用戶能力的全文搜索引擎填帽,基于RESTful web接口评也。Elasticsearch是用Java開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布悔政,是當(dāng)前流行的企業(yè)級搜索引擎翁涤。設(shè)計(jì)用于云計(jì)算中桥言,能夠達(dá)到實(shí)時(shí)搜索,穩(wěn)定葵礼,可靠号阿,快速,安裝使用方便鸳粉。

關(guān)系型數(shù)據(jù)庫的缺點(diǎn)

  1. 無法打分
  2. 無分布式
  3. 無法解析搜索請求
  4. 效率低
  5. 無法分詞

elasticsearch

安裝elasticsearch

1.安裝java jdk
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

2.安裝elasticsearch
官網(wǎng):http://www.elastic.co/products/elasticsearch
但是由于官網(wǎng)提供的elasticsearch帶的插件不多扔涧,所以我們不使用這個。
我們使用elasticsearch-rtf:https://github.com/medcl/elasticsearch-rtf

3.運(yùn)行
Mac/Linux:

cd elasticsearch/bin
./elasticsearch
sudo -u ops ES_JAVA_OPTS="-Xms2024m -Xmx2024m"  ./bin/elasticsearch  -d

Windows:

cd elasticsearch/bin
elasticsearch.bat

4.訪問 127.0.0.1:9200
如果運(yùn)行出現(xiàn)下面的錯誤:

Error occurred during initialization of VM
Could not reserve enough space for object heap

是由于內(nèi)存空間不足届谈,可以考慮更改默認(rèn)內(nèi)存的大小枯夜。用編輯器打開自己的elasticsearch路徑\config\jvm.options文件,可以看到

-Xms2g
-Xmx2g

改成512m即可

-Xms512m
-Xmx512m

保存之后艰山,重新運(yùn)行


image.png

安裝elasticsearch-head插件湖雹,來可視化elasticsearch數(shù)據(jù)(相當(dāng)于navicat)

Running with built in server

  • git clone git://github.com/mobz/elasticsearch-head.git

  • cd elasticsearch-head

  • npm install

  • npm run start

  • open http://localhost:9100/

    image.png

由于elasticsearch默認(rèn)不允許第三方插件來連接,所以我們需要在elasticsearch-rtf目錄中的elasticsearch.yml中修改配置曙搬,添加下面幾行代碼摔吏,注意之后有空格鸽嫂。

#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-methods: OPTIONS,HEAD,GET,POST,PUT,DELETE
http.cors.allow-headers: "X-Requested-With,Content-Type,Content-Length,X-User"

重啟elasticsearch之后,查看 http://localhost:9100/征讲,顯示如下据某,即表示連接上了elasticsearch服務(wù)器

image.png

安裝Kibana

kibana的版本必須要跟elasticsearch版本一致,可以通過127.0.0.1:9200查看elasticsearch的版本
進(jìn)入kibana下載頁面:http://www.elastic.co/downloads/kibana

下載完成后運(yùn)行文件里面的命令稳诚,訪問127.0.01:5601哗脖,進(jìn)入Dev Tools下


image.png

我們將重點(diǎn)使用這個控制臺來操作elasticsearch

elasticsearch概念

  1. 集群:一個或者多個節(jié)點(diǎn)組織在一起
  2. 節(jié)點(diǎn):一個節(jié)點(diǎn)是集群中的一個服務(wù)器瀑踢,由一個名字來標(biāo)識扳还,默認(rèn)是一個隨機(jī)的漫威角色的名字
  3. 分片:將索引劃分為多份的能力,允許水平分割和擴(kuò)展容量橱夭,多個分片響應(yīng)請求氨距,提供性能和吞吐量
  4. 副本:創(chuàng)建分片的一份或多份的能力,在一個節(jié)點(diǎn)失敗棘劣,其他節(jié)點(diǎn)可以頂上

elasticsearch概念

elasticsearch mysql
index(索引) 數(shù)據(jù)庫
type(類型)
document(文檔)
fields

倒排索引

倒排索引源于實(shí)際應(yīng)用中需要根據(jù)屬性的值來查找記錄俏让。這種索引表中的每一項(xiàng)都包含一個屬性值和具有該屬性值得各記錄的地址。由于不是由記錄來確定屬性值茬暇,而是由屬性值來確定記錄的位置首昔,因而稱為倒敘索引(inverted index)。帶有倒排索引的文件我們稱為倒排索引文件糙俗,檢查倒排文件(inverted file)勒奇。案例,對存儲的數(shù)據(jù)進(jìn)行分詞巧骚。

例如:python寫各大聊天系統(tǒng)的屏蔽臟話功能原理

關(guān)鍵詞 文章
python 文章1赊颠,文章3
聊天 文章2
系統(tǒng) 文章3,文章4
屏蔽臟話 文章5
功能原理 文章6劈彪,文章7竣蹦,文章8
關(guān)鍵詞 文章
python 文章1,<2沧奴,10>痘括,2
聊天 文章2,<12滔吠,25纲菌,100>,3
系統(tǒng) 文章3屠凶,<10>驰后,1
屏蔽臟話 文章5,<50矗愧,60>,2
功能原理 文章6灶芝,<56郑原,57,58>夜涕,3

倒排索引待解決的問題

  1. 大小寫轉(zhuǎn)換問題犯犁,如python和PYTHON應(yīng)該為一個詞
  2. 詞干抽取,look和looking應(yīng)該處理為一個詞
  3. 分詞女器,若屏蔽系統(tǒng)酸役,應(yīng)該分詞為屏蔽,系統(tǒng)驾胆,還是應(yīng)該是屏蔽系統(tǒng)
  4. 倒排索引文件過大-壓縮編碼
  5. tf-id的簡單介紹

elasticsearch數(shù)據(jù)庫的操作涣澡,包括增刪改查

創(chuàng)建lagou索引


image.png

number_of_shards:分片的數(shù)量
number_of_replicas:備份的數(shù)量
運(yùn)行,在head中就可以看到創(chuàng)建的索引庫


image.png

我們也可以在head中自己添加索引
image.png

獲取lagou中setting信息

GET lagou/_settings

獲取所有索引下的setting信息

GET _all/_settings
或者
GET _settings
image.png

獲取指定索引下的setting信息

GET .kibana,lagou/_settings

獲取所有的索引信息

GET _all

更新數(shù)據(jù)

1.修改分片數(shù)量為2

PUT lagou/_settings
{
  "number_of_replicas": 2
}

保存文檔(type)到索引中去

PUT lagou/job/1
{
  "title":"python",
  "salary":15000,
  "company":{
    "name":"baidu",
    "comapny_addr":"北京市軟件園"
  },
  "publish_date":"2017-4-16",
  "comments":15
}

lagou是索引丧诺,job是type入桂,1是數(shù)據(jù)的id
其實(shí)我們也可以不用指明id,ES會自動生成

POST lagou/job/
{
  "title":"Django",
  "salary":30000,
  "company":{
    "name":"Meituan",
    "comapny_addr":"杭州市西湖區(qū)"
  },
  "publish_date":"2017-4-16",
  "comments":30
}

在head中查看數(shù)據(jù)


image.png

獲取文檔

GET lagou/job/1
image.png

獲取文檔中指定字段

GET lagou/job/1?_source=title,salary

修改文檔

POST lagou/job/1/_update
{
  "doc":{
    "comments":20
  }
}

刪除

1.刪除文檔

DELETE lagou/job/1

2.刪除索引

DELETE lagou

ES的批量操作

新建一個索引testdb驳阎,插入數(shù)據(jù)如下


image.png

1.一次性查詢多條數(shù)據(jù)

GET _mget
{
  "docs":[
    {"_index":"testdb",
     "_type":"job1",
    "_id":1
    },
    {"_index":"testdb",
     "_type":"job2",
    "_id":2
    }
    ]
}
GET testdb/job1/_mget
{
  "ids":[1,2]
}

2.bulk 批量操作

批量導(dǎo)入可以合并多個操作抗愁,比如index,delete呵晚,update蜘腌,create等等。也可以從一個索引導(dǎo)入到另一個索引中去饵隙。


image.png

一定是按照這種格式寫撮珠,不要寫成上面美化的格式

映射(mapping)

映射:當(dāng)我們創(chuàng)建索引的時(shí)候,可以預(yù)先定義字段的類型以及相關(guān)屬性
ES會根據(jù)JSON源數(shù)據(jù)的基礎(chǔ)類型猜測你想要的字段映射癞季。將輸入的數(shù)據(jù)轉(zhuǎn)變?yōu)榭伤阉鞯乃饕?xiàng)劫瞳。Mapping就是我們自己定義的字段的數(shù)據(jù)類型,同時(shí)告訴ES(即通過設(shè)置相關(guān)屬性)如何索引數(shù)據(jù)以及可以被搜索绷柒。
作用:會讓索引建立變的更加細(xì)致和完善
類型:靜態(tài)映射和動態(tài)類型

內(nèi)置類型

  • string類型:text志于,keyword(string類型在es5開始已經(jīng)廢棄)
  • 數(shù)字類型:long,interger,short,byte,double,float
  • 日期類型:date
  • bool類型:boolean
  • binary類型:binary
  • 復(fù)雜類型:object,nested
  • geo類型:geo-point,geo-shape
  • 專業(yè)類型:ip废睦,competion
image.png

安裝自己的要求創(chuàng)建索引

PUT lagoujob
{
  "mappings": {
    "job":{
      "properties": {
        "title":{
          "type": "text",
          "analyzer": "ik_max_word"
      },
      "salary":{
        "type": "integer"
      },
      "city":{
        "type": "keyword"
      },
      "company":{
        "properties": {
          "name":{
            "type":"text"
          },
          "company_addr":{
            "type":"text"
          },
          "employee_count":{
            "type":"integer"
          }
      }
      },
      "pulish_date":{
        "type": "date",
        "format": "yyyy-MM-dd"
    },
      "comments":{
        "type": "integer"
    }
    }
  }
}
}

插入一條數(shù)據(jù)

PUT lagoujob/job/1
{
  "title":"python",
  "salary":15000,
  "city":"BeiJing",
  "company":{
    "name":"baidu",
    "comapny_addr":"北京市軟件園",
    "employee_count":50
  },
  "publish_date":"2017-4-16",
  "comments":15
}
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伺绽,一起剝皮案震驚了整個濱河市违诗,隨后出現(xiàn)的幾起案子驱负,更是在濱河造成了極大的恐慌,老刑警劉巖账磺,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件购披,死亡現(xiàn)場離奇詭異杖挣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)刚陡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門惩妇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來株汉,“玉大人,你說我怎么就攤上這事歌殃∏锹瑁” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵氓皱,是天一觀的道長路召。 經(jīng)常有香客問我,道長波材,這世上最難降的妖魔是什么股淡? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮各聘,結(jié)果婚禮上揣非,老公的妹妹穿的比我還像新娘。我一直安慰自己躲因,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布忌傻。 她就那樣靜靜地躺著大脉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪水孩。 梳的紋絲不亂的頭發(fā)上镰矿,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音俘种,去河邊找鬼秤标。 笑死,一個胖子當(dāng)著我的面吹牛宙刘,可吹牛的內(nèi)容都是我干的苍姜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼悬包,長吁一口氣:“原來是場噩夢啊……” “哼衙猪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起布近,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤垫释,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后撑瞧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棵譬,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年预伺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了订咸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琅束。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖算谈,靈堂內(nèi)的尸體忽然破棺而出涩禀,到底是詐尸還是另有隱情,我是刑警寧澤然眼,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布艾船,位于F島的核電站,受9級特大地震影響高每,放射性物質(zhì)發(fā)生泄漏屿岂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一鲸匿、第九天 我趴在偏房一處隱蔽的房頂上張望爷怀。 院中可真熱鬧,春花似錦带欢、人聲如沸运授。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吁朦。三九已至,卻和暖如春渡贾,著一層夾襖步出監(jiān)牢的瞬間逗宜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工空骚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纺讲,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓囤屹,卻偏偏與公主長得像熬甚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子牺丙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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