elasticsearch操作

es底层是lucene,可以直接调用rest api来直接调用

安装步骤

docker pull elasticsearch:7.4.2   安装docker

docker pull kibana:7.4.2        elasticSearch的可视化工具

创建下面这俩文件夹是为了跟容器内部文件夹进行挂载,到时候安装插件之类的就直接在容器外部添加就行,会自动添加到容器内部

mkdir -p /mydata/elasticsearch/config

mkdir -p /mydata/elasticsearch/data

echo  "http.host:0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml

chmod -R 777 /mydata/elasticsearch

启动  9200端口是调用rest api时访问es的端口 9300是es集群节点的通信端口

discovery.type=single-node 表示单节点启动

ES_JAVA_OPTS=”-Xms64m -Xmx128m”  这个如果不指定的话,es一启动就会把虚拟机内存全部占用

 

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
> -e "discovery.type=single-node" \
> -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
> -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
> -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
> -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
> -d elasticsearch:7.4.2
0663715d00b56c775539045c92ba4cb4221f2596d0035834d76e9c6769174f2a

 

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.10:9200 -p 5601:5601 -d kibana:7.4.2

能看到如下信息就是安装成功了

elasticsearch操作_第1张图片

一.基本概念

1.index(索引)

动词  :  相当于mysql中的insert

名词  :  相当于mysql中的database

2.type(类型)

在index(索引)中,可以定义一个或多个类型.

类似于mysql中的table,每一种类型的数据放在一起

3.document(文档)

保存在index(索引)下的,type下,是json格式的,就像mysql中的一条条数据

 

http://192.168.56.10:9200/_cat/nodes       查询es所有节点信息

172.17.0.4 59 81 3 0.07 0.19 0.13 dilm * 1a7f6f65b36d             *表示主节点的意思

elasticsearch操作_第2张图片

http://192.168.56.10:5601/ kibana的可视化界面端口

 

二.初步检索

1._cat

GET  /_cat/nodes   查看所有节点

GET  /_cat/health   查看节点的健康状态

GET /_cat/master   查看主节点信息

GET /_cat/indices   查看所有索引

GET /bank/_mapping   查看索引下面文档的字段类型

2.索引一个文档(保存)

PUT/POST  /索引名/类型名/加上唯一标识   再加上json数据

返回的结果中带_开头的表示元数据信息  _shards表示分片信息,

PUT请求  : 必须带id    如果多次发送同一数据的话,result 会变成updated  版本号version也会叠加   

POST请求: 可以不带id,es会自动生成一个id, 也可以带id ,带上id的话情况跟put一致.

可以看到es不建议指定type,而是直接在index下直接创建

elasticsearch操作_第3张图片

elasticsearch操作_第4张图片

 3.查询文档

elasticsearch操作_第5张图片

elasticsearch操作_第6张图片 _seq_no  和 _primary_term 是用来做乐观锁的两个必须联合一块使用elasticsearch操作_第7张图片

4.更新文档

通过_update关键字更新的话 需要加doc   如果多次更新相同的内容的话 result为noop 就是没有做任何操作,版本号也不会变

elasticsearch操作_第8张图片

elasticsearch操作_第9张图片 5.删除文档

elasticsearch操作_第10张图片

elasticsearch操作_第11张图片 删除索引  ,但是不能单独删除类型

6.批量导入

_bulk  关键字

elasticsearch操作_第12张图片 https://github.com/elastic/elasticsearch/blob/master/docs/src/test/resources/accounts.json

四.进阶检索

1) GET /bank/_search?q=*&sort=account_number:asc               将所有检索加url后面

elasticsearch操作_第13张图片

2) match_all 查询所有            from 分页  _source 指定具体返回的字段elasticsearch操作_第14张图片

 3)match 全文检索 会把三个单次拆分开进行匹配,就会有最大得分 最高的排前面elasticsearch操作_第15张图片

4)match_phrase 短语匹配 ,相当于模糊查询 不会进行拆分

elasticsearch操作_第16张图片 5)multi_match 多字段匹配,也是全文检索会进行分词,从多个字段中进行检索elasticsearch操作_第17张图片

 6)bool多值匹配  上面的只能匹配单个字段

elasticsearch操作_第18张图片 7)filter第一种用法,不会获得相关性得分elasticsearch操作_第19张图片

 第二种用法,当过滤条件使用elasticsearch操作_第20张图片

 8)term 用来非文本匹配的字段

elasticsearch操作_第21张图片

9) .keyword  精确匹配,表示等于的意思

elasticsearch操作_第22张图片 10)aggs聚合  ageAggs是自己起的聚合名称  terms表示分析有多少中可能,可以进行多次聚合多次嵌套elasticsearch操作_第23张图片

11)mapping 给索引设置类型  ,没法修改,想要修改只能创建新的索引进行迁移数据

elasticsearch操作_第24张图片 添加新的字段类型elasticsearch操作_第25张图片

12)nested 嵌入式查询,当属性是一个集合的时候es会扁平化处理,需要使用nested来查询,声明属性mapping的类型的时候,也需要声明为nested类型

elasticsearch操作_第26张图片

13)highlight高亮显示

elasticsearch操作_第27张图片

五.迁移数据

新版本的迁移方法,不需要考虑类型    直接指定旧索引名称,和新索引名称就行

elasticsearch操作_第28张图片

老版本迁移方法

elasticsearch操作_第29张图片

六.安装IK分词器

https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip

下载好后解压到这个路径下

进入容器内部

elasticsearch操作_第30张图片

这样就安装成功了 ,然后重启es

elasticsearch操作_第31张图片 elasticsearch操作_第32张图片

自定义分词规则,先安装nginx 

elasticsearch操作_第33张图片

直接运行这个命令,如果docker容器中没有的话,会自动下载的 

docker run -p 80:80 --name nginx -d nginx:1.10

把docker中的配置文件复制出来到容器外部

 docker container cp nginx:/etc/nginx .elasticsearch操作_第34张图片

elasticsearch操作_第35张图片

elasticsearch操作_第36张图片

重新启动nginx

 docker run -p 80:80 --name nginx -v /mydata/nginx/html:/usr/share/nginx/html -v /mydata/nginx/logs:/var/log/nginx -v /mydata/nginx/conf:/etc/nginx -d nginx:1.10 

elasticsearch操作_第37张图片

elasticsearch操作_第38张图片

elasticsearch操作_第39张图片

elasticsearch操作_第40张图片

 elasticsearch操作_第41张图片

java客户端调用es

elasticsearch操作_第42张图片

综合使用elasticsearch-rest-high-level-client



    org.elasticsearch.client
    elasticsearch-rest-high-level-client
    7.4.2


elasticsearch操作_第43张图片

 

package com.buba.springbootdemo.config;

import org.apache.http.HttpHost;
import org.elasticsearch.client.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 *
 */
@Configuration
public class ESConfig {

    public static final RequestOptions COMMON_OPTIONS;
    static {
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
        /*builder.addHeader("Authorization", "Bearer " + TOKEN);
        builder.setHttpAsyncResponseConsumerFactory(
                new HttpAsyncResponseConsumerFactory
                        .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));*/
        COMMON_OPTIONS = builder.build();
    }

    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestClientBuilder builder = null;

        builder = RestClient.builder(new HttpHost("192.168.56.10",9200,"http"));

        RestHighLevelClient client = new RestHighLevelClient(builder);

        return client;
    }
}
package com.buba.springbootdemo.springboot;

import com.alibaba.fastjson.JSON;
import com.buba.springbootdemo.config.ESConfig;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;


@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootApplicationTests {

    @Autowired
    RestHighLevelClient restHighLevelClient;

    @Test
    public void test() throws Exception{
        IndexRequest request = new IndexRequest("aaaa");
        request.id("1");
        request.source(JSON.toJSONString(new User("kxj", 22)), XContentType.JSON);

        IndexResponse index = restHighLevelClient.index(request, ESConfig.COMMON_OPTIONS);
        System.out.println(index);
    }

    class User {

        public User(String name, Integer age) {
            this.name = name;
            this.age = age;
        }

        public User() {
        }

        String name;
        Integer age;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }
    }
}

 

你可能感兴趣的:(elasticsearch操作)