zoukankan      html  css  js  c++  java
  • 01-springboot整合elasticsearch初识

    1.elasticsearch

    1.es简介

         Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

    2.安装es

    2.1 docker 安装
    1.下载docker镜像
    docker pull elasticsearch:7.7.1
    
    2.启动 es
    docker run -d --name es -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node"  7ec4f35ab452
    lucence底层是Java写的,所以增加了参数,不然es开启的时候就会占用内存2G
    
    2.2 linux 安装 es

    具体查看官网,有详细过程介绍:https://www.elastic.co/guide/en/elasticsearch/reference/current/targz.html

    2.springboot整合es简单测试

    springboot官网地址:https://docs.spring.io/spring-data/elasticsearch/docs/4.0.1.RELEASE/reference/html/#elasticsearch.clients
    es 官网地址:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-getting-started.html

    2.1 添加依赖

     <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
            </dependency>
            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-high-level-client</artifactId>
            </dependency>
    

    2.2 配置客户端

    @Configuration
    public class RestClientConfig extends AbstractElasticsearchConfiguration {
        /**
         * 生成rest的高级客户端
         * @return
         */
        @Override
        @Bean
        public RestHighLevelClient elasticsearchClient() {
            final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                    .connectedTo("106.52.137.XX:9200")
                    .build();
            return RestClients.create(clientConfiguration).rest();
        }
    }
    
    
    

    2.3 实体类对象

    @Data
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    @ToString
    @Document(indexName="person_index")
    public class Person implements Serializable {
        @Id
        private String id;
        private String name;
        private Integer age;
    }
    

    2.4 测试存储数据

    @Autowired
        private ElasticsearchOperations operations ;
    
    
        @Test
        public void saveEs(){
            Person person = Person.builder().id("66666").name("张三").age(18).build();
            IndexQuery indexQuery = new IndexQueryBuilder()
                    .withId(person.getId())
                    .withObject(person)
                    .build();
            String documentId = operations.index(indexQuery);
            log.info("================  saveEs {} =================",documentId);
        }
    
    
    

    2.5 测试读取数据

    @Test
        public void getPerson(){
            Person person = operations.queryForObject(GetQuery.getById("66666"), Person.class);
            log.info("-----------------  getPerson:{} ---------------------------",person);
    
        }
    
    
    

    3.模型对象存储

    3.1 使用注解标识实体类属性

    (以下摘自官方文档: https://docs.spring.io/spring-data/elasticsearch/docs/4.0.1.RELEASE/reference/html/#elasticsearch.mapping)
    @Document:在类级别应用,以指示该类是映射到数据库的候选对象。最重要的属性是:

    indexName:用于存储此实体的索引的名称
    
    type:映射类型。如果未设置,则使用小写的类的简单名称。(从版本4.0开始不推荐使用)
    
    shards:索引的分片数。
    
    replicas:索引的副本数。
    
    refreshIntervall:索引的刷新间隔。用于索引创建。默认值为“ 1s”。
    
    indexStoreType:索引的索引存储类型。用于索引创建。默认值为“ fs”。
    
    createIndex:配置是否在存储库引导中创建索引。默认值为true。
    
    versionType:版本管理的配置。默认值为EXTERNAL。
    

    @Id:在字段级别应用,以标记用于标识目的的字段。

    @Transient:默认情况下,存储或检索文档时,所有字段都映射到文档,此注释不包括该字段。

    @PersistenceConstructor:标记从数据库实例化对象时要使用的给定构造函数,甚至是受保护的程序包。构造函数参数按名称映射到检索到的Document中的键值。
    @Field:在字段级别应用并定义字段的属性,大多数属性映射到各自的Elasticsearch映射定义(以下列表不完整,请查看注释Javadoc以获取完整的参考):

    name:字段名称,将在Elasticsearch文档中表示,如果未设置,则使用Java字段名称。
    
    type:字段类型,可以是文本,关键字,长整数,短整数,字节,双精度,浮点型,半浮点数,标度浮点数,日期,日期_纳米,布尔值,二进制,整数,整数范围,浮点数范围,长范围,双精度范围,日期范围,对象,嵌套,Ip,TokenCount,过滤器,展平,Search_As_You_Type。请参阅Elasticsearch映射类型
    
    format和日期类型的pattern定义。必须为日期类型定义。format
    
    store:标记是否将原始字段值存储在Elasticsearch中,默认值为false。
    
    analyzer,searchAnalyzer,normalizer用于指定自定义自定义分析和正规化。
    
    

    @GeoPoint:将字段标记为geo_point数据类型。如果字段是GeoPoint类的实例,则可以省略。
    @TypeAlias("human") :别名
    对象属性,集合可以自动转换成json

    3.2 也可以自定义一些通用的对象模型字段映射关系
    对于写和读的转换
      @WritingConverter                                                 
      static class AddressToMap implements Converter<Address, Map<String, Object>> {
    
        @Override
        public Map<String, Object> convert(Address source) {
    
          LinkedHashMap<String, Object> target = new LinkedHashMap<>();
          target.put("ciudad", source.getCity());
          // ...
    
          return target;
        }
      }
    
      @ReadingConverter                                                 
      static class MapToAddress implements Converter<Map<String, Object>, Address> {
    
        @Override
        public Address convert(Map<String, Object> source) {
    
          // ...
          return address;
        }
      }
    
    
    
  • 相关阅读:
    Linux开机自动启动ORACLE设置
    Linux Oracle服务启动&停止脚本与开机自启动
    日志挖掘(logminer)
    通过Oracle补充日志,找到锁阻塞源头的SQL
    Oracle Supplemental 补全日志介绍
    修改oracle系统参数spfile导致数据库无法启动解决
    ORA-10997:another startup/shutdown operation of this instance in progress解决方法
    Oracle DataBase单实例使用ASM案例(1)--ASM基本概念
    误删除数据文件,数据库还没有关闭
    2013全国电子设计竞赛进入国赛的项目总结
  • 原文地址:https://www.cnblogs.com/perferect/p/13131133.html
Copyright © 2011-2022 走看看