1.Docker 安装elasticsearch

1.1.创建网络

 docker network create elastic

1.2.创建elasticsearch

docker run -d \
--restart=always \
--name elasticsearch \
--network elastic \
-p 9388:9200 \
-p 9389:9300 \
--privileged \
-v /opt/elasticsearch/data:/usr/share/elasticsearch/data \
-v /opt/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /opt/elasticsearch/config:/usr/share/Elasticsearch/config \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms256m -Xmx512m" \
-e "xpack.security.enabled=false" \
docker.elastic.co/elasticsearch/elasticsearch:8.15.2

1.3.创建kibana

docker run -d \
--restart=always \
--name kibana \
--network elastic \
-p 5601:5601 \
--privileged \
-v /opt/kibana/data:/usr/share/kibana/data \
-v /opt/kibana/config:/usr/share/kibana/config \
-v /opt/kibana/plugins:/usr/share/kibana/plugins \
-e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 \
-e "xpack.security.enabled=false" \
docker.elastic.co/kibana/kibana:8.15.2

1.4.安装分词器

docker exec -it elasticsearch /bin/bash
bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.15.2

1.4.1 IK分词器有几种模式?

-   ik_smart:智能切分,粗粒度
-   ik_max_word:最细切分,细粒度

1.4.2 IKAnalyzer.cfg.xml配置文件(注意当前文件的编码必须是 UTF-8 格式)

<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典-->
        <entry key="ext_dict">ext.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典  *** 添加停用词词典-->
        <entry key="ext_stopwords">stopword.dic</entry>
</properties>

2. mysql与elasticsearch的概念做一下对比:

MySQLElasticsearch说明
TableIndex索引(index),就是文档的集合,类似数据库的表(table)
RowDocument文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式
ColumnField字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)
SchemaMappingMapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema)
SQLDSLDSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD

3.es索引的基本操作

3.1 创建索引

PUT /index_name
{
   # 别名
   "aliases": {
        "index_alias": {}
    }, 
    # 索引设置
	"settings":{
		"number_of_shards":1,
		"number_of_replicas":1,
		"analysis":{
			"analyzer":{},
			"filter": {}
		}
	},
	# mappings 字段映射
	"mappings":{
		"properties":{
			"name":{
				"type":"text"
			}
		}
	}
}

3.1.1 Mappings 映射

  • mapping是对索引库中文档的约束,常见的mapping属性包括:

    • type:字段数据类型,常见的简单类型有:

      • 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)

        keyword类型只能整体搜索,不支持搜索部分内容

      • 数值:long、integer、short、byte、double、float、

      • 布尔:boolean

      • 日期:date

      • 对象:object

    • index:是否创建索引,默认为true

    • analyzer:使用哪种分词器

    • properties:该字段的子字段

3.2 删除索引

DELETE /index_name

3.3 查询索引

GET /index_name

3.4 修改索引

PUT  /index_name/_setting  # 修改分片
PUT  /index_name/_mapping  # 修改字段类型

4.es文档的基本操作

4.1 创建文档

- 创建文档 PUT带id POST带id
    PUT /index_name/_doc/id  # 幂等性
    POST /index_name/_doc/id
    {
       "name":"张三",
       "age":18,
       "sex":1
    }
- POST 创建 不带id 
    POST /index_name/_doc  # 非幂等性  
    {
       "name":"李四",
       "age":28,
       "sex":0
    }
-  bulk  批量创建
    POST _bulk
    { "create":{"_index":"test","_id":"1"}}
    {"id":"2","title":"未命名","content":"blog内容","tags":["java","python"]}
    { "create":{"_index":"test","_id":"2"}}
    {"id":"3","content":"blog内容","tags":["Go","C#"]}

4.2 删除文档

- 删除 by id
DELETE /index_name/_doc/id
- 批量删除
POST _bulk 
{
	"delete":{"_index":"test","_id":"1"}
}
- 批量查询删除
POST /index_name/_delete_by_query
{
	"query":{
		"match":{
			"<field_name>":"query_string"
		}
	}
}

4.3 查询文档

- 查询
GET /index_name/_search
{
	"query":{
		"match_all":{}  # 匹配所有
		"match":{  # 匹配文本字段
			"<field_name>":"<query_string>"
		}
		"term":{   # 精确查询
			"<field_name>":{
				"value":"<exact_value>"
			}
		}
		"range":{ #  范围查找
			"<field_name>":{
				"gte":<lower_bound>,
				"lte":<upper_bound>
			}
		}
	}
}
- 查询 by id
GET /index_name/_doc/id
- 多个条件
GET /index_name/_mget 
{
  "ids":["1","2"]
}

4.4 修改文档

- 单个修改 _seq_no=1&_primary_term=1 乐观锁,高并发下更新
POST  /index_name/_update/id?_seq_no=1&_primary_term=1
{
	"doc":{
		"<field_name>":"<value>"
	}
}
- 批量修改
POST _bulk
{ "update":{"_index":"test","_id":"2"}}
{"doc",{"age":"12"}}
- 查询修改
POST /index_name/_update_by_query
{
	"query":{
		"term":{
			"field_name":"value"
		}
	},
	"script":{
		"source":"ctx._source.field_name=ss"
	}
}