Windows下安装及简单使用Elasticsearch和kibana

本文详细介绍了如何在SpringBoot项目中整合Elasticsearch,包括下载安装、配置连接、自定义查询等步骤,以及常见问题解决方法。

下载地址:速度很快,自己找对应版本就可以
ElasticSearch: https://mirrors.huaweicloud.com/elasticsearch/?C=N&O=D
logstash: https://mirrors.huaweicloud.com/logstash/?C=N&O=D
kibana: https://mirrors.huaweicloud.com/kibana/?C=N&O=D

1.安装解压  Elasticsearch 优快云全套地址 : https://download.youkuaiyun.com/download/zhangshengqiang168/13452585

                    官网地址:https://www.elastic.co/cn/downloads/elasticsearch     需要先安装jdk支持

                               kibana : https://www.elastic.co/cn/downloads/

2.启动ES     管理员运行\Elasticsearch\elasticsearch-6.2.2\elasticsearch-6.2.2\bin目录下的  elasticsearch.bat 文件

3.启动kibana    管理员运行kibana-6.2.2-windows-x86_64\kibana-6.2.2-windows-x86_64\bin目录下的  kibana.bat 文件

4.访问 es   http://localhost:9200/        

5.访问kibana  http://localhost:5601   通过kibana操作es

6.spring boot 整合Elasticsearch  步骤

    1.jar包

<!--spring 整合 elasticSearch-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

    2.配置yml ,我的是本地连接   None of the configured nodes are available节点名报错 

           1.连接ip错误

           2.修改ES下config文件下的 elasticsearch.yml文件 17行   cluster.name: elasticsearch  跟你定义的节点名相同  默认                           值 elasticsearch

#=====ElasticSearch   start======
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
#=====ElasticSearch   end======

    3.编辑实体   Es使用 创建文档-->索引-->类型-->id     @Document配置文档 indexName->索引 type->类型

      

     

    4.继承ES类CrudRepository     org.springframework.data.repository.CrudRepository

       启动类加ES 扫包  @EnableElasticsearchRepositories(basePackages = "com.cnczsq.mall.elephant.v1.elasticsearch")

     5.Controller测试接口

    6.ES约定方法自定义查询

Spring Data 的另一个强大功能,是根据方法名称自动实现功能。

比如:你的方法名叫做:findByTitle,那么它就知道你是根据title查询,然后自动帮你完成,无需写实现类。

当然,方法名称要符合一定的约定:
原文链接:https://blog.youkuaiyun.com/chen_2890/article/details/83895646

KeywordSample 
AndfindByNameAndPrice 
OrfindByNameOrPrice 
Is findByName 
NotfindByNameNot 
BetweenfindByPriceBetween 
LessThanEqualfindByPriceLessThan 
GreaterThanEqualfindByPriceGreaterThan 
BeforefindByPriceBefore 
AfterfindByPriceAfter 
LikefindByNameLike 
StartingWithfindByNameStartingWith 
EndingWithfindByNameEndingWith 
Contains/ContainingfindByNameContaining 
InfindByNameIn(Collection<String>names) 
NotInfindByNameNotIn(Collection<String>names) 
NearfindByStoreNear 
TruefindByAvailableTrue 
FalsefindByAvailableFalse 
OrderByfindByAvailableTrueOrderByNameDesc 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

@RestController
@RequestMapping("/Es")
@Api(tags = "ES测试",description = "ESController")
public class ESController {
    @Autowired
    private ESMapper esMapper;

    //添加文档
    @PostMapping("/addmember")
    @ApiOperation("添加文档")
    public Member  addMember(@RequestBody Member member){
        return esMapper.save(member);
    }

    //查询文档
    @PostMapping("/find")
    @ApiOperation("查询文档")
    public Optional<Member>  findMember(String id){
        return esMapper.findById(id);
    }

    //查询文档
    @PostMapping("/findAll")
    @ApiOperation("查询所有文档")
    public void   findAllMember(){
        Iterable<Member> age = esMapper.findAll(Sort.by("six").ascending()); //查询所有根据six正序 排序
        Page<Member> all = esMapper.findAll(Pageable.unpaged());
        long totalElements = all.getTotalElements(); //总条数
        int totalPages = all.getTotalPages();    //总页数
        Stream<Member> memberStream = all.get();
        System.out.println(totalElements + "   "+totalPages +"   " +memberStream.toString());
        Iterator<Member> iterator = age.iterator();
        while (iterator.hasNext()){
            Member next = iterator.next();
            System.out.println(next);
        }
    }

    //简单自定义查询  ES约定俗称方法名自定义查询
    @PostMapping("/findBySix")
    @ApiOperation("自定义查询<初级版>")
    public  List<Member> findBySix(){
        List<Member> bySixBetween = esMapper.findBySixBetween(5, 10); //查询six 在5到10之间
        System.out.println("bySixBetween   "+bySixBetween);
        System.out.println();
        List<Member> bySix = esMapper.findBySixBetweenOrderBySixDesc(5, 10); //查询six 在5到10之间 按six倒序
        System.out.println("bySix    "+bySix);
        System.out.println();
        List<Member> nameLike = esMapper.findByNameLike("天上人间1");  //根据name模糊查询
        System.out.println("nameLike    "+nameLike);
        return bySixBetween;
    }

    //删除文档
    @PostMapping("/delete")
    @ApiOperation("删除文档")
    public void deleteMember(String id){
        boolean b = esMapper.existsById(id);
        esMapper.deleteById(id);
        System.out.println(b);
    }

    @PostMapping("/select/custom")
    @ApiOperation("自定义查询 <高级版>")
    public void selectCustom(){
        // 构建查询条件
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        // 添加基本分词查询
//        queryBuilder.withQuery(QueryBuilders.matchQuery("name", "无敌哥1丰三朱"));  //分词匹配 只要包含其中一个词的都可以被查到
//        queryBuilder.withQuery(QueryBuilders.termQuery("age",8));   //准确匹配  疑点:匹配字符串查不到  匹配数字可以
//        queryBuilder.withQuery(
//                QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("name","张三丰"))  //布尔查询
//                        .must(QueryBuilders.matchQuery("age",18)));
//        queryBuilder.withQuery(QueryBuilders.fuzzyQuery("address","北京天上人间8"));    //模糊查询  有问题查不出来,不知道什么原因
        // 排序
//        queryBuilder.withSort(SortBuilders.fieldSort("six").order(SortOrder.ASC)); //排序
        // 分页:
        int page = 0;
        int size = 20;
        queryBuilder.withPageable(PageRequest.of(page,size));
        // 搜索,获取结果
        Page<Member> search = esMapper.search(queryBuilder.build());
        // 总条数
        long total = search.getTotalElements();
        System.out.println("总条数 = " + total);
        // 总页数
        System.out.println("总页数 = " + search.getTotalPages());
        // 当前页
        System.out.println("当前页:" + search.getNumber());
        // 每页大小
        System.out.println("每页大小:" + search.getSize());
        System.out.println("total = " + total);
        for (Member item : search) {
            System.out.println(item);
        }
    }
}

7.自定义查询

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值