zoukankan      html  css  js  c++  java
  • Elasticsearch初步学习

      上个月IT界比较热门的感觉是Elasticsearch(后面简称ES)上市,最开始是在微信公众号看到的消息,刚开始只是当成八卦新闻看,也没有想到后面自己会使用到,因为搜索引擎感觉自己也不可能用到。后来发现工作中确实会使用到ES,也就开始学习,真的是很巧合。

      最开始就是安装 ES,因为这里使用的macOS,所以安装也是也没有在Windows上面麻烦,就是到官网下载压缩包,解压到指定的目录,就完成安装了。官网下载地址如下:https://www.elastic.co/downloads/elasticsearch还有就是要注意,安装ES要先安装java,版本还要是1.8之后的版本。

      安装完ES,还需要安装一个插件,这个插件是为了简单的浏览ES服务器的一些信息,插件名字叫elasticsearch-head,安装这个插件需要先安装node.js。安装也是和上面一样,就是需要将路径添加到配置文件中,后来发现谷歌浏览器也有这个插件,直接搜索名字就可以了(需要翻墙,可以看之前的博客)。

      ES安装成功后,直接在浏览器输入 localhost:9200出现下面的情况就是安装成功。

      安装完毕,下面开始简单的解释一下ES的一些基本信息。

      ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

      上面就是百度百科对于ES的介绍,不难看出几个重要的地方,分布式、java、全文搜索、开源。

      介绍完了ES的大致情况,下面就开始介绍一下ES的基本概念。

      Node:节点、Cluster:集群、Index:索引、Document:文档、Type:类型。下面就介绍一下这些概念。节点是ES的一个实例,多个节点又形成了集群,索引对应着关系型数据库概念中的数据库,一个索引下面有很多的很多的文档,文档就是一条记录,类型就是将这些文档按照一些规则分组,类型类似于关系型数据库概念中的table

      以上就是一些基础的概念,这里因为篇幅的原因无法详细介绍。后面会贴出一些详细介绍的网站。

      下面开始简单的一个小练习。

      例子也是和SpringBoot整合,因为最近也在学习SpringBoot,所以例子就是这样。

      开始是导入依赖:

    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>6.4.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.elasticsearch.client/transport -->
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>transport</artifactId>
        <version>6.4.2</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch.plugin</groupId>
        <artifactId>transport-netty4-client</artifactId>
        <version>6.4.2</version>
    </dependency>

      这里要注意项目使用依赖的版本,添加完依赖,在添加配置文件和配置就可以了。

    elasticsearch:
      ip: 192.168.22.208
      port: 9300
      pool: 1
      cluster:
        name: elasticsearch

      上面是ES的一些配置,下面就是配置文件。配置文件主要配置了一些关系连接的东西,比如连接池、集群地址、端口之类的。配置文件如下:

    package com.main.huajieenvironservice.config;
    
    
    import org.elasticsearch.client.transport.TransportClient;
    import org.elasticsearch.common.settings.Settings;
    import org.elasticsearch.common.transport.TransportAddress;
    import org.elasticsearch.transport.client.PreBuiltTransportClient;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import java.net.InetAddress;
    
    @Configuration
    public class ElasticsearchConfig {
        private static final Logger LOGGER = LoggerFactory.getLogger(ElasticsearchConfig.class);
    
        /**
         * elk集群地址
         */
        @Value("${elasticsearch.ip}")
        private String hostName;
    
        /**
         * 端口
         */
        @Value("${elasticsearch.port}")
        private String port;
    
        /**
         * 集群名称
         */
        @Value("${elasticsearch.cluster.name}")
        private String clusterName;
    
        /**
         * 连接池
         */
        @Value("${elasticsearch.pool}")
        private String poolSize;
    
        /**
         * Bean name default  函数名字
         * @return
         */
        @Bean(name = "transportClient")
        public TransportClient transportClient() {
            LOGGER.info("Elasticsearch初始化开始。。。。。");
            TransportClient transportClient = null;
            try {
    // 配置信息
                Settings esSetting = Settings.builder()
                        .put("cluster.name", clusterName) //集群名字
                        .put("client.transport.sniff", true)//增加嗅探机制,找到ES集群
                        .put("thread_pool.search.size", Integer.parseInt(poolSize))//增加线程池个数,暂时设为5
                        .build();
                //配置信息Settings自定义
                transportClient = new PreBuiltTransportClient(esSetting);
                TransportAddress transportAddress = new TransportAddress(InetAddress.getByName(hostName), Integer.valueOf(port));
                transportClient.addTransportAddresses(transportAddress);
            } catch (Exception e) {
                LOGGER.error("elasticsearch TransportClient create error!!", e);
            }
            return transportClient;
        }
    }

      因为是简单的测试,所以没有写太多的东西,就是简单的验证一下index是否存在。代码如下:

    @RequestMapping("/indexIsExists")
    @ResponseBody
    @ApiOperation(value = "验证输入的index是否存在", notes = "输入index,返回该index是否存在")
    public Map<String, Object> findVideoUrl(String index) {
    
        Map<String, Object> stringObjectMap = new HashMap<>();
        boolean result = transportClient.admin().indices().prepareExists(index).execute().actionGet().isExists();
        System.err.println(result);
        stringObjectMap.put("result", result);
        return stringObjectMap;
    }

      以上就是简单的一个ES的小测试,后面也会写一些基本的应用。下面谈谈自己的一些理解。

      因为自己目前对于这个ES理解的还是不够明白,所以一些理解看起开都是比较短浅的。我认为这个ES和MongoDB没有很大的差别,但是两者的原理和核心可能不太一样。都说ES比MongoDB要快的多,因为现在对于MongoDB和ES的使用都是初级阶段,所以这两者的区别暂时还不是很清楚,还是要看下一步的使用。

      ES的练习教程:https://www.sojson.com/blog/81.html

      ES的详细介绍:https://www.sojson.com/blog/91.html

      写完的Demo的GitHub地址:https://github.com/qq1162210866/SpringBootTrain.git

      就这样吧,结束。

  • 相关阅读:
    eclipse远程调试Tomcat方法(转)
    Django表单字段汇总
    Django表单API详解
    django使用表单
    django自定义模板标签和过滤器
    django人类可读性
    django特殊的标签和过滤器
    Django内置模板标签
    Django模板语言详解
    django 动态生成PDF文件
  • 原文地址:https://www.cnblogs.com/yanyu01/p/10073879.html
Copyright © 2011-2022 走看看