window 搭建elasticsearch

环境准备

  • 安装包下载地址:
    https://pan.baidu.com/s/16JuTiH-wOXqKoSgAPYUbFA
    提取码: tqs2

搭建步骤

1. 安装elasticsearch

开启后不要关闭dos窗口

  • 解压缩el 安装包
  • 启动 elasticsearch-> 双击 D:\java\elasticsearch-6.2.2\bin\elasticsearch.bat

2. 安装kibana

开启后不要关闭dos窗口

  • 解压缩kibana
  • 运行kibana -> D:\java\kibana-6.2.2-windows-x86_64\bin\kibana.bat
  • 访问路径: http://localhost:5601

3. 创建项目测试

注: 利用
项目树目录:
在这里插入图片描述

  • maven 依赖包

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <version>3.1.11.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
  • 配置文件 -> application.yml

    elasticsearch:
    	  cluster:
    	    name: elasticsearch
    	  ip: localhost
    	  port: 9300
    	  pool: 5
    
  • springboot config装配类 -> ElasticSearchConfig

    package com.zc.elasticsearch.config;
    
    import java.net.InetAddress;
    import org.elasticsearch.client.Client;
    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.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
    import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
    
    
    @Configuration
    public class ElasticSearchConfig {
    
        @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;
    
        /**
         * 构建TransportClient对象
         */
        @Bean(name = "transportClient")
        public TransportClient transportClient() {
            TransportClient transportClient = null;
            try {
                // 配置信息
                Settings esSetting = Settings.builder()
                        //集群名字
                        .put("cluster.name", clusterName)
                        //增加嗅探机制,找到ES集群
                        .put("client.transport.sniff", true)
                        //增加线程池个数,暂时设为5
                        .put("thread_pool.search.size", Integer.parseInt(poolSize)).build();
                //配置信息Settings自定义
                transportClient = new PreBuiltTransportClient(esSetting);
                TransportAddress transportAddress = new TransportAddress(InetAddress.getByName(hostName), Integer.valueOf(port));
                transportClient.addTransportAddresses(transportAddress);
            } catch (Exception e) {
                System.out.println(e);
            }
            return transportClient;
        }
    
        /**
         * 构建ElasticsearchTemplate对象
         */
        @Bean
        public ElasticsearchOperations elasticsearchTemplate() {
            Client client = transportClient();
            if (client != null) {
                return new ElasticsearchTemplate(client);
            } else {
                //弹出异常对象
                throw new RuntimeException("初始化Elasticsearch失败!");
            }
        }
    
    }
    
  • controller -> BookController

    package com.zc.elasticsearch.contoller;
    
    
    import org.elasticsearch.action.get.GetResponse;
    import org.elasticsearch.action.index.IndexResponse;
    import org.elasticsearch.action.search.SearchRequestBuilder;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.action.search.SearchType;
    import org.elasticsearch.client.transport.TransportClient;
    import org.elasticsearch.common.xcontent.XContentBuilder;
    import org.elasticsearch.common.xcontent.XContentFactory;
    import org.elasticsearch.index.query.BoolQueryBuilder;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.index.query.RangeQueryBuilder;
    import org.elasticsearch.search.SearchHit;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.format.annotation.DateTimeFormat;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    
    @RestController
    @RequestMapping("/book")
    public class BookController {
    
        @Autowired
        private TransportClient transportClient;
    
        /**
         * 添加博客索引信息
         */
        @PostMapping("/add")
            public ResponseEntity add(@RequestParam(name = "title") String title, @RequestParam(name = "author") String author, @RequestParam(name = "word_count") int wordCount,
                @RequestParam(name = "publish_date") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date publishDate) {
            try {
                XContentBuilder content = XContentFactory.jsonBuilder().startObject().field("title", title).field("author", author).field("word_count", wordCount)
                        .field("publish_date", publishDate.getTime()).endObject();
                IndexResponse result = this.transportClient.prepareIndex("blogs", "blog").setSource(content).get();
                return new ResponseEntity(result.getId(), HttpStatus.OK);
            } catch (Exception e) {
                e.printStackTrace();
                ;
                return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
            }
        }
    
        /**
         * 根据id查询
         */
        @GetMapping("/get")
        public ResponseEntity get(@RequestParam(name = "id", defaultValue = "") String id) {
            if (id.isEmpty()) {
                return new ResponseEntity((HttpStatus.NOT_FOUND));
            }
            GetResponse result = transportClient.prepareGet("blogs", "blog", id).get();
            if (!result.isExists()) {
                return new ResponseEntity((HttpStatus.NOT_FOUND));
            }
            return new ResponseEntity(result.getSource(), HttpStatus.OK);
        }
    
        /**
         * 按条件查询
         */
        @GetMapping("/query")
        public ResponseEntity query(@RequestParam(name = "author", required = false) String author, @RequestParam(name = "title", required = false) String title,
                @RequestParam(name = "gt_word_count", defaultValue = "0") int gtWordCount, @RequestParam(name = "lt_word_count", required = false) Integer ltWordCount) {
            //设置查询条件
            BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
            if (author != null) {
                boolQuery.must(QueryBuilders.matchQuery("author", author));
            }
            if (title != null) {
                boolQuery.must(QueryBuilders.matchQuery("title", title));
            }
            //按范围查询
            RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("word_count").from(gtWordCount);
            if (ltWordCount != null && ltWordCount > 0) {
                rangeQuery.to(ltWordCount);
            }
            boolQuery.filter(rangeQuery);
    
            SearchRequestBuilder builder = this.transportClient.prepareSearch("blogs").setTypes("blog").setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setQuery(boolQuery)
                    //设置分页查询
                    .setFrom(0).setSize(10);
            System.out.println(builder);
    
            SearchResponse response = builder.get();
            List<Map<String, Object>> result = new ArrayList<>();
    
            for (SearchHit hit : response.getHits()) {
                result.add(hit.getSourceAsMap());
            }
            return new ResponseEntity(result, HttpStatus.OK);
        }
    
    }
    
  • 实体类->item

    package com.zc.elasticsearch.entity;
    
    import org.springframework.data.annotation.Id;
    import org.springframework.data.elasticsearch.annotations.Document;
    import org.springframework.data.elasticsearch.annotations.Field;
    import org.springframework.data.elasticsearch.annotations.FieldType;
    
    @Document(indexName = "item",type = "docs", shards = 1, replicas = 0)
    public class Item {
        @Id
        private Long id;
    
        @Field(type = FieldType.Text, analyzer = "ik_max_word")
        private String title; //标题
    
        @Field(type = FieldType.Keyword)
        private String category;// 分类
    
        @Field(type = FieldType.Keyword)
        private String brand; // 品牌
    
        @Field(type = FieldType.Double)
        private Double price; // 价格
    
        @Field(index = false, type = FieldType.Keyword)
        private String images; // 图片地址
    }
    
    
    
  • 启动项目

  • elasticsearch 创建 index (类似 数据库建库)

    • 在这里插入图片描述
  • 利用postman调用往里面存数据
    +在这里插入图片描述

  • 效果图:

    • 在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值