1. 程式人生 > >golang基礎--gopkg.in/olivere/elastic.v5學習一(環境配置、連結)

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

首先通過which elasticsearch-plugin檢視是否安裝plugin

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)啟用或禁用請求端的壓縮。預設情況下禁用。