docker安装 es7.17.6+IK分词+Go elastic

1.下载docker 镜像

进入 Docker Hub 选择所需要的版本

docker pull elasticsearch:7.17.6

2.创建容器挂载目录及设置配置文件

mkdir -p /data/docker/es/config
mkdir -p /data/docker/es/data
mkdir -p /data/docker/es/plugins

创建 elasticsearch.yml 配置文件并更改权限

vi /data/docker/es/config/elasticsearch.yml
#配置yml文件
http.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
chmod -R 777 /data/docker/es

3.启动es容器并配置账户密码

启动es容器并且挂载设置目录

docker run --name es --restart=always -p 10012:9200 -p 10013:9300 \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-v /data/docker/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /data/docker/es/data:/usr/share/elasticsearch/data \
-v /data/docker/es/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.17.6

进入容器,配置账号密码

docker exec -it es /bin/bash

在 bin 目录 并修改密码,执行过程中 需要输入多次,请记录 后期需要使用该密码登录 es

./bin/elasticsearch-setup-passwords interactive

 3.安装ik分词器

IK项目地址:https://github.com/medcl/elasticsearch-analysis-ik
首先需要说明的是,IK插件必须和 ElasticSearch 的版本一致,否则不兼容。
本系统采用的elasticsearch版本为7.17.6

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.6/elasticsearch-analysis-ik-7.17.6.zip

退出容器并重启es

docker restart es

打开浏览器 使用 用户名 :elastic 密码 : (自己设置的密码)

package main

import (
	"context"
	"fmt"
	"github.com/olivere/elastic/v7"
	"reflect"
)

type Content struct {
	Title   string `json:"title"`
	Author  string `json:"author"`
	Content string `json:"content"`
	Status  int    `json:"status"`
}

func main() {

	// https://github.com/olivere/elastic/wiki/Configuration
	client, err := elastic.NewClient(
		elastic.SetURL("http://xxxxxxxxxxx:10012"),
		elastic.SetBasicAuth("elastic", "password"),
		elastic.SetSniff(false),
	)
	if err != nil {
		fmt.Println("错误信息", err)
		panic(err)
	}
	content := Content{Title: "标题title", Author: "李四", Content: "文体内容", Status: 2}

	do, err := client.Index().Index("t_content").BodyJson(content).Do(context.Background())
	if err != nil {
		panic(err)
	}
	fmt.Printf("id %s , index %s, type %s", do.Id, do.Index, do.Type)

	boolQ := elastic.NewBoolQuery()
	boolQ.Must(elastic.NewMatchQuery("author", "李四"))
	boolQ.Filter(elastic.NewRangeQuery("status").Gt(1))
	res, err := client.Search().Index("t_content").Query(boolQ).Do(context.Background())
	printEmployee(res, err)

}

//打印查询到的Employee
func printEmployee(res *elastic.SearchResult, err error) {
	if err != nil {
		print(err.Error())
		return
	}
	var typ Content
	for _, item := range res.Each(reflect.TypeOf(typ)) { //从搜索结果中取数据的方法
		t := item.(Content)
		fmt.Printf("\n%#v\n", t)
	}
}

 

猜你喜欢

转载自blog.csdn.net/qq_15371293/article/details/127210604