golang基礎--gopkg.in/olivere/elastic.v5學習一(環境配置、連結)
環境配置
環境依賴: 作業系統:Mac go:go1.11 ElasticSearch:5.6.9 Java:1.8 elasticdump elasticsearch-analysis-ik 6.3.2
安裝elasticsearch
通過brew install [email protected]
安裝
配置elasticsearch環境變數
admindeMBP:lab admin$ echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> ~/.bash_profile
admindeMBP:lab admin$ ls /usr/local/opt/ [email protected]/bin
elasticsearch elasticsearch-keystore elasticsearch-plugin elasticsearch-translog
配置好path變數,進行檢視
zhiliaodeMBP:~ zhiliao$ which elasticsearch
/usr/local/opt/[email protected]/bin/elasticsearch
zhiliaodeMBP:~ zhiliao$
安裝Java SDK
安裝分詞器
參考https://github.com/medcl/elasticsearch-analysis-ik
zhiliaodeMBP:~ zhiliao$ which elasticsearch-plugin
/usr/local/opt/[email protected]/bin/elasticsearch-plugin
我本機已經安裝,然後就去安裝elasticsearch-analysis-ik分詞器 目前官方最新版本是v6.3.2 然後就下載即可,通過如下命令
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.9/elasticsearch-analysis-ik-5.6.9.zip
安裝elasticdump資料遷移
通過npm install -g elasticdump
進行安裝
然後通過如下命令檢視是否安裝,我本機已經安裝
zhiliaodeMBP:~ zhiliao$ which elasticdump
/usr/local/bin/elasticdump
啟動
直接通過elasticsearch
來啟動即可
zhiliaodeMBP:bin zhiliao$ elasticsearch
[2018-09-25T17:01:19,524][INFO ][o.e.n.Node ] [] initializing ...
[2018-09-25T17:01:19,611][INFO ][o.e.e.NodeEnvironment ] [hOWqTfH] using [1] data paths, mounts [[/ (/dev/disk1s1)]], net usable_space [181.9gb], net total_space [233.5gb], spins? [unknown], types [apfs]
[2018-09-25T17:01:19,612][INFO ][o.e.e.NodeEnvironment ] [hOWqTfH] heap size [1.9gb], compressed ordinary object pointers [true]
測試執行
如果一切正常,Elastic 就會在預設的9200埠執行。這時,開啟另一個命令列視窗,請求該埠,會得到說明資訊
zhiliaodeMBP:Desktop zhiliao$ curl localhost:9200
{
"name" : "hOWqTfH",
"cluster_name" : "elasticsearch_zhiliao",
"cluster_uuid" : "hWBc33irTL-wCsEbnLTjgw",
"version" : {
"number" : "5.6.9",
"build_hash" : "877a590",
"build_date" : "2018-04-12T16:25:14.838Z",
"build_snapshot" : false,
"lucene_version" : "6.6.1"
},
"tagline" : "You Know, for Search"
}
zhiliaodeMBP:Desktop zhiliao$
上面程式碼中,請求9200埠,Elastic 返回一個 JSON 物件,包含當前節點、叢集、版本等資訊
名詞概念、檢視index、檢視type
Cluster
Elastic 本質上是一個分散式資料庫,允許多臺伺服器協同工作,每臺伺服器可以執行多個 Elastic 例項。
單個 Elastic 例項稱為一個節點(node)。一組節點構成一個叢集(cluster)。
Index
Elastic 會索引所有欄位,經過處理後寫入一個反向索引(Inverted Index)。查詢資料的時候,直接查詢該索引。
所以,Elastic 資料管理的頂層單位就叫做 Index(索引)。它是單個數據庫的同義詞。每個 Index (即資料庫)的名字必須是小寫。 下面的命令可以檢視當前節點的所有 Index。
zhiliaodeMBP:Desktop zhiliao$ curl -X GET 'http://localhost:9200/_cat/indices?v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open index_safly -l4j2UPpTgu64jsk7jzUvA 5 1 1 0 4.4kb 4.4kb
yellow open index_1 np0ouRCDRC-eXDrilpSFjQ 5 1 3 0 11.8kb 11.8kb
yellow open index_temp qS7IWYm-ROOFBjnNgVCE4w 5 1 1 0 5.4kb 5.4kb
yellow open qrelations pemnB8e-SumcYVNQRyYNAA 5 1 88736 6301 14.3mb 14.3mb
yellow open qa v6avnFsfSResWMs0LcAXdQ 5 1 8 0 66.7kb 66.7kb
yellow open weather qFUsE8OiSmKzaXmj8TjIOA 5 1 0 0 955b 955b
yellow open question E6iJvA5RTpq1LnJQr748dQ 5 1 66974 8169 41.9mb 41.9mb
yellow open index_2 pgyxlcW9QHORddZeLNGeDg 5 1 2 0 8.2kb 8.2kb
yellow open my-index wNnhnRtNTkaVziWKU_7_mA 5 1 0 0 955b 955b
zhiliaodeMBP:Desktop zhiliao$
Document
Index 裡面單條的記錄稱為 Document(文件)。許多條 Document 構成了一個 Index。
同一個 Index 裡面的 Document,不要求有相同的結構(scheme),但是最好保持相同,這樣有利於提高搜尋效率。
Type
Document 可以分組,比如weather這個 Index 裡面,可以按城市分組(北京和上海),也可以按氣候分組(晴天和雨天)。這種分組就叫做 Type,它是虛擬的邏輯分組,用來過濾 Document。
不同的 Type 應該有相似的結構(schema),舉例來說,id欄位不能在這個組是字串,在另一個組是數值。這是與關係型資料庫的表的一個區別。性質完全不同的資料(比如products和logs)應該存成兩個 Index,而不是一個 Index 裡面的兩個 Type(雖然可以做到)。
這裡我只列出了某一個index的資料 以如下的index_1 為例
es.index(index="index_1", doc_type="index_1", id=1, body={"any": "index_1_1_data", "age": 30})
es.index(index="index_1", doc_type="index_2", id=2, body={"any": "index_1_2_data", "age": 40})
下面的命令可以列出每個 Index 所包含的 Type。
curl 'localhost:9200/_mapping?pretty=true'
{
"index_1":{
"mappings":{
"index_2":{
"properties":{
"age":{
"type":"long"
},
"any":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
}
},
"index_1":{
"properties":{
"age":{
"type":"long"
},
"any":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
}
}
}
}
}
To get the package, execute:
go get gopkg.in/olivere/elastic.v5
To import this package, add the following line to your code:
import "gopkg.in/olivere/elastic.v5"
package main
import (
"fmt"
"gopkg.in/olivere/elastic.v5"
"log"
"os"
"time"
)
var host = "http://127.0.0.1:9200/"
func init() {
client, err := elastic.NewClient(
elastic.SetURL(host),
elastic.SetSniff(false),
elastic.SetHealthcheckInterval(10*time.Second),
elastic.SetGzip(true),
elastic.SetErrorLog(log.New(os.Stderr, "ELASTIC ", log.LstdFlags)),
elastic.SetInfoLog(log.New(os.Stdout, "", log.LstdFlags)))
if err!= nil{
panic(err)
}
fmt.Println("conn es succ",client)
}
func main() {
}
輸出結果如下:
conn es succ http://127.0.0.1:9200 [dead=false,failures=0,deadSince=<nil>]
1、SetHttpClient(*http.Client)允許您配置自己的http.Client和/或http.Transport(預設為http.DefaultClient);在許多彈性例項中使用相同的http.Client(即使使用http.DefaultClient)是一個好主意,以便有效地使用開啟的TCP連線。
2、StURURL(…字串)允許您指定要連線的URL(預設值是http://127.0.0.1:9200)。
3、StasBaseCuthe(使用者名稱,密碼字串)允許您指定HTTP基本身份驗證詳細資訊。使用這個,例如用盾牌。
4、SETSNIFF(BOOL)允許您指定彈性是否應該定期檢查叢集(預設為真)。
5、StSnIFFEffTimeOUT(時間。持續時間)是嗅探節點彈出時間之前的時間(預設為2秒)。
6、StnSnFiffer-TimeOutExpLoT(時間。持續時間)是建立新客戶端時使用的嗅探超時。它通常比嗅探器超時大,並且證明對慢啟動有幫助(預設為5秒)。
7、StnSnIFFER間隔(時間。持續時間)允許您指定兩個嗅探器程序之間的間隔(預設為15分鐘)。
8、SetHealthcheck(bool)允許您通過嘗試定期連線到它的節點(預設為true)來指定Elastic是否將執行健康檢查。
9、SethalthCuffTimeExt(時間。持續時間)是健康檢查的超時時間(預設值為1秒)。
10、SethalthCuffTimeOutExtudio(時間。持續時間)是建立新客戶端時使用的健康檢查超時。它通常大於健康檢查超時,並可能有助於慢啟動(預設為5秒)。
11、sethealthcheckinterval(time.duration)指定間隔之間的兩個健康檢查(預設是60秒)。
12、 SetDecoder(.ic.Decoder)允許您為來自Elasticsearch的JSON訊息設定自己的解碼器(預設為&.ic.DefaultDecoder{})。
13、StError日誌(*Log.LoggER)將日誌記錄器設定為用於錯誤訊息(預設為NIL)。錯誤日誌將包含例如關於加入群集的節點或標記為“死亡”的訊息。
14、 SETIN FLUOG(*Log.LoggER)將記錄器設定為用於資訊性訊息(預設為NIL)。資訊日誌將包含例如請求和它們的響應時間。 15、 StReTraceLoG(*Log.LoggER)設定用於列印HTTP請求和響應(預設為NIL)的記錄器。這有助於除錯有線上正在發生的事情
16、 StestRealdPuelin(外掛…字串)設定需要註冊的外掛列表。彈性將設法在啟動時找到它們。如果沒有找到其中一個,則在啟動時會發現一個型別的彈性錯誤。
17、 StReReTrice(…)設定用於處理失敗請求的重試策略。詳情請參閱重試和退避
18、 SETGZIP(BOOL)啟用或禁用請求端的壓縮。預設情況下禁用。