热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javaspringboot如何简单快速集成Elasticsearch文件检索

前言:ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。Elas

前言:


  • ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
  • 我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题以及可能出现的更多其它问题。

1.准备


  • 在微服务集成es之前先安装Elasticsearch 以及可视化工具Kibana;注意安装的版本一定要一致,不能版本不相同。

  • 推荐使用docker安装,如何使用docker以及docker的容器安装请移步其他帖子。
    安装移步es安装以及配置.

  • 安装Kibana之后创建索引及类型:
    在创建完索引后就可以在discover连接索引库

  • 这是相关索引指令:

    GET /_cat/indices/?v #查询所有索引

    DELETE user #删除索引

    PUT /user #添加索引

    PUT /user/userinfo/_mapping #增加索引 类型的映射关系 (相当于数据库建表)
    {
    “properties”: {
    “id”:{
    “type”: “long”,
    “store”: false
    },
    “name”:{
    “type”: “text”,
    “analyzer”: “ik_smart”,
    “search_analyzer”: “ik_smart”,
    “store”: false
    },
    “city”:{
    “type”: “text”,
    “analyzer”: “ik_smart”,
    “search_analyzer”: “ik_smart”,
    “store”: false
    },
    “age”:{
    “type”: “long”,
    “store”: false
    },
    “remark”:{
    “type”: “text”,
    “analyzer”: “ik_smart”,
    “search_analyzer”: “ik_smart”,
    “store”: false
    }
    }
    }


2.引入依赖

org.springframework.bootspring-boot-starter-data-elasticsearch

3.配置文件配置

spring:application:name: testdata:elasticsearch:cluster-name: my-application #elasticsearch.yml配置的节点名cluster-nodes: 10.10.0.233:9300 #es安装的ip及端口

4.准备实体类对应es索引类型的映射

package com.bwwl.hive.model;import lombok.Data;
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;import java.io.Serializable;/***@author liuxingying*@description*@date 2020/9/29*/
@Data
@Document(indexName = "user",type = "userinfo") //对应索引库和类型
public class Userinfo implements Serializable {@Idprivate long id;@Field(type = FieldType.Text,analyzer = "ik_smart",searchAnalyzer = "ik_smart")private String name;@Field(type = FieldType.Text,analyzer = "ik_smart",searchAnalyzer = "ik_smart")private String city;@Field(type = FieldType.Long)private Integer age;@Field(type = FieldType.Text,analyzer = "ik_smart",searchAnalyzer = "ik_smart")private String remark;
}

5.准备dao

package com.bwwl.hive.dao;import com.bwwl.hive.model.Userinfo;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;@Repository
//Userinfo对应实体 Long对应主键
public interface ElasticsearchDao extends ElasticsearchRepository {
}

6.将数据库数据导入到es

package com.bwwl.hive.service.impl;import com.bwwl.hive.dao.ElasticsearchDao;
import com.bwwl.hive.model.Userinfo;
import com.bwwl.hive.service.ElasticsearchService;
import com.bwwl.hive.service.GetData;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.stereotype.Service;import java.util.List;/***@author liuxingying*@description*@date 2020/9/29*/
@Service
public class ElasticsearchServiceImpl implements ElasticsearchService {@Autowiredprivate GetData getData;@Autowiredprivate ElasticsearchDao dao;@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;/** @description 导入数据* @params []* @return void* @author lxy* @date 2020/9/29 11:06**/@Overridepublic void importData(){//从mysql查出所有数据 一般来说可以先查出来是一个对象javabean,然后转换成索引对象Userinfo就行,我这里是直接用的userinfo对象List user = getData.getAll();//导入到esdao.saveAll(user);}}

7.查询条件的构建与检索实现

package com.bwwl.hive.service.impl;import com.bwwl.hive.dao.ElasticsearchDao;
import com.bwwl.hive.model.Userinfo;
import com.bwwl.hive.service.ElasticsearchService;
import com.bwwl.hive.service.GetData;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.stereotype.Service;import java.util.List;/***@author liuxingying*@description*@date 2020/9/29*/
@Service
public class ElasticsearchServiceImpl implements ElasticsearchService {@Autowiredprivate GetData getData;@Autowiredprivate ElasticsearchDao dao;@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;/** @description 导入数据* @params []* @return void* @author lxy* @date 2020/9/29 11:06**/@Overridepublic void importData(){List user = getData.getAll();dao.saveAll(user);}/** @description es搜索* @params [parm]* @return java.util.List* @author lxy* @date 2020/9/29 11:32**/@Overridepublic List search(String parm) {//TODO 构建查询对象用于封装各种查询条件 NativeSearchQueryBuilderNativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();nativeSearchQueryBuilder.withQuery(QueryBuilders.queryStringQuery(parm).field("name"));//执行查询esAggregatedPage page = elasticsearchTemplate.queryForPage(nativeSearchQueryBuilder.build(), Userinfo.class);//查询结果集合List list = page.getContent();//查询结果总条数long totalElements = page.getTotalElements();//查询结果总页数long totalPages = page.getTotalPages();return list;}
}

  • 最后再controller层调用接口就行,一个简单的es检索就搭起来了,我这里只实现了简单的查询检索,还有很多比如排序、分页、范围限制、高亮和聚合查询等等都没实现,es在搜索的方法上有很多api实现,可以去官网看看怎么使用,欢迎探讨。

推荐阅读
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
author-avatar
簕竹仔_591
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有