elasticsearch

1. 初识

1.1 与Mysql对比

image

1.2 架构

  1. Mysql:擅长事务类型操作,可以确保数据的一致性和安全性(ACID)
  2. ES:不具备ACID,擅长海量数据的搜索、分析、计算

image

2. 安装

2.1 创建网络

需要让es和kibana容器互联

docker network create es-net

ee1a87c8b2428f5d773951f4a8b4052b3a74cd9c2d83c27e999806eaaeb363e8

image

2.2 拉取&启动es

docker pull elasticsearch:7.12.1

docker run --name elasticsearch -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -v es-data:/usr/share/elasticsearch/data -v es-plugins:/usr/share/elasticsearch/plugins --privileged --network es-net -p 9200:9200 -p 9300:9300 elasticsearch:7.12.1

2.3 拉取&启动kibana

docker pull kibana:7.12.1

docker run --name kibana -d -e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 --network es-net -p 5601:5601 kibana:7.12.1
  • ELASTICSEARCH_HOSTS=http://elasticsearch:9200: 因为俩容器在同一个网络,所有可以用容器名访问

2.4 安装ik分词器

# 需要FQ
docker exec -it elasticsearch /bin/bash
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
exit
docker restart elasticsearch

2.4.1 分词粒度

  • ik_smart(粗粒度)

image

  • ik_max_word(细粒度)

image

2.4.2 扩展用法

image

3. 索引库操作

3.-1 mapping属性

  1. type: 字段数据类型,常见的如下
    • 字符串
      • text:可分词文本
      • keyword:精确值,即不需要分词
    • 数值:long、integer、short、byte、double、float
    • 布尔:boolean
    • 日期:date
    • 对象:object
  2. index: 是否创建索引,默认为true
  3. analyzer: 分词器
  4. properties: 子字段

3.0 基本操作

image

3.1 创建库

PUT /heima
{
  "mappings": {
    "properties": {
      "info": {
        "type": "text",
        "analyzer": "ik_smart"
      },
      "email": {
        "type": "keyword"
      },
      "score": {
        "type": "double"
      },
      "name": {
        "type": "object",
        "properties": {
          "firstname": {
            "type": "keyword"
          },
          "lastname": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

3.2 修改索引库

索引库和mapping一旦创建无法修改,但可以新增字段

image

4. 文档操作

4.1 新增、查询、删除

image

image

4.2 修改

4.2.1 全量修改

删除旧文档,添加新文档

PUT /索引库名/_doc/文档id
{
	...
}

4.2.2 增量修改

POST /索引库名/_update/文档id
{
	"doc":{
		"字段名":"新值"
	}
}

5. RestClient操作索引库

5.1 demo

5.1.1 导入文件

5.1.2 初始化酒店数据的mapping

5.1.3 初始化JavaRestClient

image

5.1.4 JavaRestClient操作索引库

1. 新增

public class HotelIndexsTest {

    private RestHighLevelClient client;
    @BeforeEach
    void init(){
        this.client = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://192.168.56.3:9200")
        ));
    }

    @Test
    void testCreateHotelIndex() throws IOException {
        CreateIndexRequest request = new CreateIndexRequest("hotel");
        request.source("", XContentType.JSON);
        client.indices().create(request, RequestOptions.DEFAULT);
    }

    @AfterEach
    void destroy() throws IOException {
        this.client.close();
    }
}

2. 删除&是否存在

image

posted @ 2023-07-04 22:17  万岁!  阅读(21)  评论(0)    收藏  举报