栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

ES-基本使用

ES-基本使用

1.下载

官网:https://www.elastic.co/cn/start

推荐Kibana可视化工具

kibana启动之后,访问链接测试

http://localhost:5601/

2.简介

        索引(index):索引是映射类型的容器,它是一个非常大的文档集合,索引存储了映射类型的字段和 其他设置。

        类型(type):类型是文档的逻辑容器,就像关系型数据库一样

        文档(document):一个文档同时包含字段和对应的值,也就是同时包含key:value

         字段类型:

         text和keyword的区别

name:text类型

friend:keyword类型

text类型查询结果:

 keyword类型查询结果:

 text类型会根据查询关键词进行模糊匹配,而keyword只会关键精准匹配

3.分词器         3.1默认分词器(standard)

 中文都是单个拆除,英文按照单词划分

        3.2simple分词器

simple 分析器当它遇到只要不是字母的字符,就将文本解析成term,而且所有的term都是小写的

【分词方式】先按照空格分词,英文大写转小写,不是英文不分词。        

        3.3Whitespace分词器

【分词方式】按空格分词,英文不区分大小写,中文不再分词

         3.4ik分词器

        下载地址 https://github.com/medcl/elasticsearch-analysis-ik/releases

 

es的plugins目录中新建一个ik目录,然后将下载的文件解压到ik目录中,最后重启es 

         3.4.1ik_smart

        粗粒度划分,将文本截断

        3.4.2 ik_max_word

        细粒度划分,会有重复的情况 

        3.4.3自定义字典

        在ik分词器中的IKAnalyzer.cfg文件新增自定义的字典文件

 重启es

 自定义的词典也拆分了

4.操作

1.创建索引

不指定mapping,es会在put记录的时候,会自动创建mapping

2.指定docId查询

 3.ik分词器查询

 4.term过滤

term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型)

 match查询属于一种全文查询或者精确查询,term是用于精确查询,精确keyword进行倒排查询

 5.terms过滤:类型数据库in查询

 6.range范围查询

 7.排序(年龄倒叙)

 8.分页

from:起始值

size:每页数量

9.bool查询

must: 多个同时匹配,相当于and

must_not: 多个条件匹配相反,相当于not

should: 至少有一个匹配,相当于or

 10.高亮查询

pre_tags:自定义前置标签

post_tags:自定义后置标签

5.Springboot整合es

        pom引入:


        1.8
        7.15.1
    
    
        
            org.springframework.boot
            spring-boot-starter-data-elasticsearch
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.springframework.boot
            spring-boot-configuration-processor
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            com.google.code.gson
            gson
        

       配置类注入

@Configuration
public class ESClientConfig {
    private final static String HOST_NAME = "127.0.0.1";
    private final static int PORT = 9200;
    private final static String SCHEME = "http";

    @Bean
    public RestHighLevelClient restHighLevelClient() {
        HttpHost httpHost = new HttpHost(HOST_NAME, PORT, SCHEME);
        RestClientBuilder builder = RestClient.builder(httpHost);
        RestHighLevelClient client = new RestHighLevelClient(builder);
        return client;
    }
}

        es操作

private final static String INDEX_NAME = "springboot-demo";

    @Resource
    private RestHighLevelClient restHighLevelClient;

    private static Gson gson = new Gson();


    
    @Test
    void createIndex() throws Throwable {
        CreateIndexRequest request = new CreateIndexRequest(INDEX_NAME);
        restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
    }

    
    @Test
    void getIndex() throws Throwable {
        GetIndexRequest request = new GetIndexRequest(INDEX_NAME);
        GetIndexResponse response = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);
        log.info("mappings={} n settings={}", gson.toJson(response.getMappings()),
                gson.toJson(response.getSettings()));
    }

    
    @Test
    void existIndex() throws Throwable {
        GetIndexRequest request = new GetIndexRequest(INDEX_NAME);
        boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
        log.info("exists={}", exists);
    }

    
    @Test
    void deleteIndex() throws Throwable {
        DeleteIndexRequest request = new DeleteIndexRequest(INDEX_NAME);
        AcknowledgedResponse response = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
        log.info("isAcknowledged={}" + response.isAcknowledged());
    }

    
    @Test
    void createDoc() throws Throwable {
        IndexRequest request = new IndexRequest(INDEX_NAME);

        // 方式一:采用对象转Gson的方式创建文档
        Book book = new Book("Java编程思想", 100, Lists.newArrayList("Java", "经典", "入门", "语言"));
        request.id("001");
        request.timeout(Timevalue.timevalueSeconds(5));
        request.source(gson.toJson(book), Requests.INDEX_CONTENT_TYPE);
        IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
        log.info("response={}", response);

        // 方式二:采用逐一传参的方式创建文档
        request.id("002");
        request.timeout(Timevalue.timevalueSeconds(5));
        request.source("name", "Spring Boot编程思想", "price", 110, "tags", Lists.newArrayList("SpringBoot",
                "Spring", "新书"));
        response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
        log.info("response={}", response);

        // 方式三:批量创建文档
        List books = Lists.newArrayList(new Book("a", 1, Lists.newArrayList("a1")),
                new Book("b", 2, Lists.newArrayList("b2")),
                new Book("c", 3, Lists.newArrayList("c3")),
                new Book("d", 4, Lists.newArrayList("d4")));
        BulkRequest bulkRequest = new BulkRequest(INDEX_NAME);
        AtomicInteger id = new AtomicInteger(1);
        books.stream().forEach(b -> bulkRequest.add(
                new IndexRequest(INDEX_NAME)
                        .id(String.valueOf(id.getAndIncrement())) // 指定文档id,不指定则取默认值
                        .source(gson.toJson(b), Requests.INDEX_CONTENT_TYPE)));

        BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        log.info("bulkInsert is success={}", !bulkResponse.hasFailures());
    }

    
    @Test
    void getDoc() throws Throwable {
        GetRequest request = new GetRequest(INDEX_NAME, "001");
        boolean exists = restHighLevelClient.exists(request, RequestOptions.DEFAULT);
        log.info("exists={}", exists);

        GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT);
        log.info("response={} n source={}", gson.toJson(response), response.getSourceAsString());
    }

    
    @Test
    void updateDoc() throws Throwable {
        // 方法一:直接修改响应属性
        UpdateRequest request = new UpdateRequest(INDEX_NAME, "001");
        request.doc("name", "Java编程思想最新版");
        UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
        log.info("status={}", response.status());

        // 方式二:Gson方式更新
        Book book = new Book("Spring Boot编程思想", 110, Lists.newArrayList("SpringBoot", "Spring",
                "新书")); // 这个book对象,应该从ES中获取;为了方便,此处我就直接new了
        book.setName("Spring Boot编程思想最新版");
        request = new UpdateRequest(INDEX_NAME, "002");
        request.doc(gson.toJson(book), Requests.INDEX_CONTENT_TYPE);
        response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
        log.info("status={}", response.status());
    }

    
    @Test
    void searchDoc() throws Throwable {
        SearchRequest request = new SearchRequest(INDEX_NAME);
        SearchSourceBuilder builder = new SearchSourceBuilder();
        builder.timeout(Timevalue.timevalueSeconds(10));
        builder.query(QueryBuilders.matchQuery("name", "思想"));
        // builder.query(QueryBuilders.termQuery("name", "思想"));
        builder.from(0);
        builder.size(10);
        builder.highlighter(new HighlightBuilder().field("name").preTags("").postTags("")); // 高亮
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        Arrays.stream(response.getHits().getHits()).forEach(System.out::println);
    }

    
    @Test
    void deleteDoc() throws Throwable {
        DeleteRequest request = new DeleteRequest(INDEX_NAME, "001");
        DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
        log.info("status={}", response.status());
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/747584.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号