Elasticsearch(簡稱ES)是一個基於Apache Lucene(TM)的開源搜索引擎,不管在開源仍是專有領域,Lucene 能夠被認爲是迄今爲止最早進、性能最好的、功能最全的搜索引擎庫。注意,Lucene 只是一個庫。想要發揮其強大的做用,你需使用 Java 並要將其集成到你的應用中。mysql
Lucene 很是複雜,你須要深刻的瞭解檢索相關知識來理解它是如何工做的,就跟學習 springmvc 以前先從 servlet 開始,繁瑣複雜的工做,Solor、Elasticsearch 應由而生, 其使用 Java 編寫並使用 Lucene 來創建索引並實現搜索功能,可是它的目的是經過簡單連貫的 RESTful API 讓全文搜索變得簡單並隱藏 Lucene 的複雜性。nginx
重要特性:git
基本概念:github
索引(indices)-------------------Databases 數據庫
類型(type)----------------------Table 數據表
文檔(Document)---------------Row 行
字段(Field)---------------------Columns 列spring
詳細說明:sql
概念 | 說明 |
---|---|
索引庫(indices) | indices是index的複數,表明許多的索引, |
類型(type) | 類型是模擬mysql中的table概念,一個索引庫下能夠有不一樣類型的索引,好比商品索引,訂單索引,其數據格式不一樣。不過這會致使索引庫混亂,所以將來版本中會移除這個概念 |
文檔(document) | 存入索引庫原始的數據。好比每一條商品信息,就是一個文檔 |
字段(field) | 文檔中的屬性 |
映射配置(mappings) | 字段的數據類型、屬性、是否索引、是否存儲等特性 |
要注意的是:Elasticsearch 自己就是分佈式的,所以即使你只有一個節點,Elasticsearch 默認也會對你的數據進行分片和副本操做,當你向集羣添加新數據時,數據也會在新加入的節點中進行平衡。數據庫
以下主要針對 windows 環境下的 Elasticsearch 學習。apache
下載地址:https://www.elastic.co/cn/products/編程
解壓後,進入 bin/ 目錄,雙擊執行 elasticsearch .batjson
Elasticsearch 啓動後能夠看到綁定了兩個端口:
9200,咱們能夠經過瀏覽器直接訪問,9300 則不能夠直接訪問。
Kibana 是一個基於 Node.js 的 Elasticsearch 索引庫數據統計工具,能夠利用 Elasticsearch 的聚合功能,生成各類圖表,如柱形圖,線狀圖,餅圖等。
並且還提供了操做 Elasticsearch 索引數據的控制檯,而且提供了必定的API提示,很是有利於咱們學習 Elasticsearch 的語法。
一、配置
咱們能夠把 Kibana 當成,durid 鏈接池對於 mysql 的可視化來理解。
下載地址:https://www.elastic.co/cn/downloads/kibana
解壓後,進入安裝目錄下的 config 目錄,修改 kibana.yml 文件:
修改elasticsearch服務器的地址,去掉原來的註釋:
elasticsearch.url: "http://localhost:9200"
Kibana 的監聽端口爲 5601:http://127.0.0.1:5601 瀏覽器打開以下圖所示:
Dev Tools 至關於一個命令行窗口工具,帶提示,Elasticsearch 執行的數據格式爲 json,舉例:
POST _analyze
{
"analyzer": "ik_max_word",
"text": "我喜歡編程"
}
因爲 Elasticsearch 在拆分單詞時,是按空格來分,即 hello world 分爲 hello 和 world,這是沒問題的,可是在拆分中文時也是按照一個漢字一個漢字來拆分。即「我喜歡編程」分爲 我、喜、歡、編、程 5個字符,因此就須要用到 IK 分詞器這個插件來進行拆分。
Lucene 的 IK 分詞器早在 2012 年已經沒有維護了,如今咱們要使用的是在其基礎上維護升級的版本,而且開發爲 ElasticSearch 的集成插件了,與 Elasticsearch 一塊兒維護升級,版本也保持一致。
IK下載地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
注意 ES 與 IK 版本對應地址:https://github.com/medcl/elasticsearch-analysis-ik/tree/2.x
將 zip 包,解壓到 Elasticsearch 目錄的 plugins 目錄中:
而後重啓 Elasticsearch
上文也瞭解到 ES 操做的數據爲 json,實際項目中,好比 springboot 中,無須操做 json,都是面向對象編程,可是,學習其實際原理當然重要。
建立索引的請求格式:
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
示例:
語法
Get請求能夠幫咱們查看索引信息,格式:
GET /索引庫名
刪除索引使用DELETE請求
語法
DELETE /索引庫名
語法
請求方式依然是PUT
PUT /索引庫名/_mapping/類型名稱
{
"properties": {
"字段名": {
"type": "類型",
"index": true,
"store": true,
"analyzer": "分詞器"
}
}
}
ik_max_word
即便用ik分詞器示例
發起請求:
PUT niceyoo2/_mapping/goods
{
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word"
},
"images": {
"type": "keyword",
"index": "false"
},
"price": {
"type": "float"
}
}
}
響應結果:
{
"acknowledged": true
}
語法:
GET /索引庫名/_mapping
示例:
GET /niceyoo2/_mapping
響應:
{
"niceyoo2": {
"mappings": {
"goods": {
"properties": {
"images": {
"type": "keyword",
"index": false
},
"price": {
"type": "float"
},
"title": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
}
}
Elasticsearch 中支持的數據類型很是豐富:
咱們說幾個關鍵的:
String類型,又分兩種:
Numerical:數值類型,分兩類:
Date:日期類型
elasticsearch 能夠對日期格式化爲字符串存儲,可是建議咱們存儲爲毫秒值,存儲爲 long,節省空間。
index影響字段的索引狀況。
index的默認值就是true,也就是說你不進行任何配置,全部字段都會被索引。
可是有些字段是咱們不但願被索引的,好比商品的圖片信息,就須要手動設置index爲false。
是否將數據進行額外存儲。
在學習lucene和solr時,咱們知道若是一個字段的store設置爲false,那麼在文檔列表中就不會有這個字段的值,用戶的搜索結果中不會顯示出來。
可是在Elasticsearch中,即使store設置爲false,也能夠搜索到結果。
緣由是Elasticsearch在建立文檔索引時,會將文檔中的原始數據備份,保存到一個叫作_source
的屬性中。並且咱們能夠經過過濾_source
來選擇哪些要顯示,哪些不顯示。
而若是設置store爲true,就會在_source
之外額外存儲一份數據,多餘,所以通常咱們都會將store設置爲false,事實上,store的默認值就是false。
激勵因子,這個與lucene中同樣
其它的再也不一一講解,用的很少,你們參考官方文檔:
下篇帶你們詳細瞭解 elasticsearch 中的
若是文章有錯的地方歡迎指正,你們互相留言交流。習慣在微信看技術文章,想要獲取更多的Java資源的同窗,能夠關注微信公衆號:niceyoo