ElasticSearch-学习笔记05【SpringDataElasticSearch】

news2024/12/23 13:15:48
  • Java后端-学习路线-笔记汇总表【黑马程序员】
  1. ElasticSearch-学习笔记01【ElasticSearch基本介绍】【day01】
  2. ElasticSearch-学习笔记02【ElasticSearch索引库维护】
  3. ElasticSearch-学习笔记03【ElasticSearch集群】
  4. ElasticSearch-学习笔记04【Java客户端操作索引库】【day02】
  5. ElasticSearch-学习笔记05【SpringDataElasticSearch】

目录

12-SpringDataElasticsearch工程搭建

01、导入pom.xml坐标

02、配置applicationContext.xml文件

13-SpringDataES工程配置

14-SpringDataES创建索引

15-SpringDataES添加文档

16-SpringDataES删除文档

17-SpringDataES更新文档

18-SpringDataES简单查询

19-自定义查询方法查询

20-使用NativeSearchQuery查询

21-ElasticSearch课程总结

01、项目文件一览图

02、工程详细代码

01、Article.java

02、ArticleRepository.java

03、SpringDataElasticSearchTest.java


12-SpringDataElasticsearch工程搭建

一、使用Java客户端管理ES
1、创建索引库
2、使用Java客户端设置Mappings
3、添加文档(一行数据)
4、添加文档的第二种方式

二、使用ES客户端实现搜索
1、根据id搜索
2、根据Term查询(关键词)
3、QueryString查询方式(带分析的查询)
4、分页的处理
5、查询结果高亮显示

三、SpringDataElasticSearch
1、工程搭建
    1)创建一个java工程。
    2)把相关jar包添加到工程中,如果maven工程就添加坐标。
    3)创建一个spring的配置文件
        1、配置elasticsearch:transport-client
        2、配置elasticsearch:repositories,包扫描器,扫描dao
        3、配置elasticsearchTemplate对象,就是一个bean

01、导入pom.xml坐标

新建maven工程“springdata-elasticsearch”,导入jar包:

02、配置applicationContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
       xsi:schemaLocation="
		http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/data/elasticsearch
		http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd
		">
    <!--elastic客户对象的配置-->
    <elasticsearch:transport-client id="esClient" cluster-name="my-elasticsearch" cluster-nodes="127.0.0.1:9301, 127.0.0.1:9302, 127.0.0.1:9303"/>
    <!--配置包扫描器,扫描dao的接口-->
    <elasticsearch:repositories base-package="com.itheima.repositories"/>
    <!--bean-->
    <bean id="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
        <constructor-arg name="client" ref="esClient"/>
    </bean>
</beans>

13-SpringDataES工程配置

14-SpringDataES创建索引

java.lang.IllegalStateException: Failed to load ApplicationContext 解决办法

import com.itheima.es.entity.Article;
import com.itheima.es.repositories.ArticleRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")//加载配置文件初始化spring容器

public class SpringDataElasticSearchTest {
    @Autowired
    private ArticleRepository articleRepository;
    @Autowired
    private ElasticsearchTemplate template;

    @Test
    public void createIndex() throws Exception {
        //创建索引并配置映射关系
        template.createIndex(Article.class);
        //配置映射关系
        //template.putMapping(Article.class);
    }
}

15-SpringDataES添加文档

16-SpringDataES删除文档

17-SpringDataES更新文档

ES的底层是Lucene,Lucene更新原理是先添加再删除

18-SpringDataES简单查询

19-自定义查询方法查询

20-使用NativeSearchQuery查询

21-ElasticSearch课程总结

一、使用Java客户端管理ES
1、创建索引库
    步骤:
    1)创建一个Java工程
    2)添加jar包,添加maven的坐标
    3)编写测试方法实现创建索引库
        1、创建一个Settings对象,相当于是一个配置信息,主要用于配置集群的名称
        2、创建一个客户端Client对象
        3、使用client对象创建一个索引库
        4、关闭client对象
2、使用Java客户端设置Mappings
    步骤:
    1)创建一个Settings对象
    2)创建一个Client对象
    3)创建一个mapping信息,应该是一个json数据,可以是字符串也可以是XContextBuilder对象
    4)使用client向es服务器发送mapping信息
    5)关闭client对象
3、添加文档(一行数据)
    步骤:
    1)创建一个Settings对象
    2)创建一个Client对象
    3)创建一个文档对象,创建一个json格式的字符串或者使用XContentBuilder
    4)使用Client对象把文档添加到索引库中
    5)关闭client
4、添加文档的第二种方式
    创建一个pojo类
    使用工具类把pojo转换成json字符串
    把文档写入索引库

二、使用ES客户端实现搜索
1、根据id搜索
    QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");
2、根据Term查询(关键词)
    QueryBuilder queryBuilder = QueryBuilders.termQuery("title", "北方");
3、QueryString查询方式(带分析的查询)
    QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("速度与激情").defaultField("title");
    查询步骤:
    1)创建一个Client对象
    2)创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象
    3)使用client执行查询
    4)得到查询的结果
    5)取查询结果的总记录数
    6)取查询结果列表
    7)关闭client
4、分页的处理
    在client对象执行查询之前,设置分页信息。
    然后再执行查询
    //执行查询
    SearchResponse searchResponse = client.prepareSearch("index_hello")
                .setTypes("article")
                .setQuery(queryBuilder)
                //设置分页信息
                .setFrom(0)
                //每页显示的行数
                .setSize(5)
                .get();
    分页需要设置两个值:from、size
        from:起始的行号,从0开始。
        size:每页显示的记录数
5、查询结果高亮显示
(1)高亮的配置
        1)设置高亮显示的字段
        2)设置高亮显示的前缀
        3)设置高亮显示的后缀
(2)在client对象执行查询之前,设置高亮显示的信息
(3)遍历结果列表时可以从结果中取高亮结果

三、SpringDataElasticSearch
1、工程搭建
    1)创建一个java工程。
    2)把相关jar包添加到工程中,如果maven工程就添加坐标。
    3)创建一个spring的配置文件
        1、配置elasticsearch:transport-client
        2、配置elasticsearch:repositories,包扫描器,扫描dao
        3、配置elasticsearchTemplate对象,就是一个bean
2、管理索引库
    1、创建一个Entity类,其实就是一个JavaBean(pojo)映射到一个Document上
            需要添加一些注解进行标注。
    2、创建一个Dao,是一个接口,需要继承ElasticSearchRepository接口。
    3、编写测试代码。
3、创建索引
    直接使用ElasticsearchTemplate对象的createIndex方法创建索引,并配置映射关系。
4、添加与更新文档
    1)创建一个Article对象
    2)使用ArticleRepository对象向索引库中添加文档。
5、删除文档
    直接使用ArticleRepository对象的deleteById方法直接删除。
6、查询索引库
    直接使用ArticleRepository对象的查询方法
7、自定义查询方法
    需要根据SpringDataES的命名规则来命名
    如果不设置分页信息,默认带分页,每页显示10条数据。
    如果设置分页信息,应该在方法中添加一个参数Pageable
        Pageable pageable = PageRequest.of(0, 15);
    注意:设置分页信息,默认是从0页开始。
    可以对搜索的内容先分词然后再进行查询,每个词之间都是and的关系。
8、使用原生的查询条件查询
    NativeSearchQuery对象。
    使用方法:
        1)创建一个NativeSearchQuery对象
            设置查询条件,QueryBuilder对象
        2)使用ElasticSearchTemplate对象执行查询
        3)取查询结果

01、项目文件一览图

02、工程详细代码

01、Article.java

package com.itheima.es.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 = "sdes_blog", type = "article")//文档,springdata-es
public class Article {
    @Id
    @Field(type = FieldType.Long, store = true)
    private long id;
    @Field(type = FieldType.text, store = true, analyzer = "ik_smart")
    private String title;
    @Field(type = FieldType.text, store = true, analyzer = "ik_smart")
    private String content;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    @Override
    public String toString() {
        return "Article{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", content='" + content + '\'' +
                '}';
    }
}

02、ArticleRepository.java

package com.itheima.es.repositories;

import com.itheima.es.entity.Article;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

//import java.awt.print.Pageable;
import java.util.List;

public interface ArticleRepository extends ElasticsearchRepository<Article, Long> {//对Article进行操作,主键是Long
    List<Article> findByTitle(String title);

    List<Article> findByTitleOrContent(String title, String content);

    List<Article> findByTitleOrContent(String title, String content, Pageable pageable);//pageable设置分页信息
}

03、SpringDataElasticSearchTest.java

import com.itheima.es.entity.Article;
import com.itheima.es.repositories.ArticleRepository;
import jdk.nashorn.internal.runtime.ECMAException;
import org.elasticsearch.index.query.QueryBuilders;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;
import java.util.Optional;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")//加载配置文件初始化spring容器

public class SpringDataElasticSearchTest {
    @Autowired
    private ArticleRepository articleRepository;//在运行中不会有啥问题!
    @Autowired
    private ElasticsearchTemplate template;

    @Test
    public void createIndex() throws Exception {
        //创建索引并配置映射关系
        template.createIndex(Article.class);
        //配置映射关系
        //template.putMapping(Article.class);
    }

    @Test
    public void addDocument() throws Exception {
        for (int i = 11; i <= 20; i++) {
            //创建一个Article对象
            Article article = new Article();
            article.setId(i);
            article.setTitle("我的脑海每分每秒只为你一人沉醉~");//小黑子   我应该拿你怎样   我应该拿你怎样~~~
            article.setContent("最迷人让我神魂颠倒是你身上香水~");//哎嗨呦,你干嘛~~~   uh~ 所有人都在看着你~
            //把文档写入索引库
            articleRepository.save(article);
        }
    }

    @Test
    public void deleteDocumentById() throws Exception {//根据id删除文档信息
        articleRepository.deleteById(1l);
        //articleRepository.deleteAll();//全部删除
    }

    @Test
    public void findAll() throws Exception {
        Iterable<Article> articles = articleRepository.findAll();
        articles.forEach(a -> System.out.println(a));
    }

    @Test
    public void testFindById() throws Exception {
        Optional<Article> optional = articleRepository.findById(1l);
        Article article = optional.get();
        System.out.println(article);
    }

    @Test
    public void testFindByTitle() throws Exception {
        List<Article> list = articleRepository.findByTitle("爆炸and沉醉");
        list.stream().forEach(a -> System.out.println(a));
    }

    @Test
    public void testFindByTitleOrContent1() throws Exception {
        articleRepository.findByTitleOrContent("沉醉", "香水").forEach(a -> System.out.println(a));
    }

    @Test
    public void testFindByTitleOrContent2() throws Exception {//pageable分页查询
        Pageable pageable = PageRequest.of(1, 15);
        articleRepository.findByTitleOrContent("沉醉", "香水", pageable).forEach(a -> System.out.println(a));
    }

    @Test
    public void testNativeSearchQuery() throws Exception {
        //创建一个查询对象
        NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(QueryBuilders.queryStringQuery("脑海爆炸").defaultField("title"))
                .withPageable(PageRequest.of(0, 15))
                .build();
        //执行查询
        List<Article> articleList = template.queryForList(query, Article.class);
        articleList.forEach(a -> System.out.println(a));
    }
}

bye~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/342085.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【IVIF的超分重建】

Multimodal super-resolution reconstruction of infrared and visible images via deep learning &#xff08;基于深度学习的红外和可见光图像多模态超分辨率重建&#xff09; 提出了一种基于编解码器结构的红外-可见光图像融合方法。图像融合任务被重新表述为保持红外-可见…

2023年3月AMA-CDGA/CDGP数据治理认证考试这些城市可以报名

目前2023年3月5日CDGA&CDGP开放报名的城市有&#xff1a;北京、上海、广州、深圳、杭州、重庆&#xff0c;西安&#xff0c;成都&#xff0c;长沙&#xff0c;济南&#xff0c;更多考场正在增加中… DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业…

Echarts 设置折线图线条样式(虚线+粗细+阴影)

第012个点击查看专栏目录Echarts折线图的lineStyle属性可以设置折线的颜色&#xff0c;粗细&#xff0c;类型&#xff0c;线段末端类型&#xff0c;阴影&#xff0c;透明度&#xff0c;偏移等属性。文章目录示例效果示例源代码&#xff08;共128行&#xff09;相关资料参考专栏…

【Java|多线程与高并发】 使用Thread 类创建线程的5种方法如何查看程序中的线程

文章目录前言线程创建1.继承Thread类重写run()方法如何查看程序中的线程?2.实现Runnable接口3.使用匿名内部类,继承Thread4.使用匿名内部类,实现Runnable5.⭐使用Lambda表达式,创建线程(重要)Thread 的常见构造方法总结前言 在这里主要补充说明一些问题,方便更好地理解下面的…

conda安装nodejs版本过低解决方法

conda命令直接安装nodejs时&#xff0c;可能会由于镜像源中nodejs版本过低导致没法安装高本版的nodejs&#xff0c;导致无法jupyterlab使用一些扩展插件。 解决方法如下&#xff1a;&#xff08;windows环境下直接按提示下载版本安装就行&#xff0c;此处只介绍linux环境的解决…

2023上半年软考中级系统集成项目管理工程师2月25日开班

系统集成项目管理工程师是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目之一&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职…

今天面试招了个28K的人,从腾讯出来的果然都有两把刷子···

公司前段时间缺人&#xff0c;也面了不少测试&#xff0c;前面一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在20~30k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是4年工作经验&#xff0c;但面试中&#xff0c;不…

2023年上半年软考高项信息系统项目管理师2月25日开班

信息系统项目管理师是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目之一&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资…

每天一道大厂SQL题【Day09】充值日志SQL实战

每天一道大厂SQL题【Day09】充值日志SQL实战 大家好&#xff0c;我是Maynor。相信大家和我一样&#xff0c;都有一个大厂梦&#xff0c;作为一名资深大数据选手&#xff0c;深知SQL重要性&#xff0c;接下来我准备用100天时间&#xff0c;基于大数据岗面试中的经典SQL题&#…

MMDetection(五)

目标检测工具包 MMDetection MMDetection 可以做什么 ➢ MMDetection 提供 400 余个性能优良的预训练模型&#xff0c;开箱即 用&#xff0c;几行 Python API 即可调用强大的检测能力 ➢ MMDetection 涵盖 60 余个目标检测算法&#xff0c;并提供方便易用的 工具&#xff0c;…

【Spring Cloud】如何修改Feign的日志记录级别

本期目录前言1. 介绍2. 方式一&#xff1a;配置文件1&#xff09;全局生效2&#xff09;局部生效3. 方式二&#xff1a;Java代码1&#xff09;全局配置2&#xff09;局部配置前言 本次示例代码的文件结构如下图所示。 1. 介绍 Feign 允许我们自定义配置&#xff0c;下面是 …

kubernetes集群部署springcloud项目【AL】【未写完】

kubernetes集群部署springcloud项目【AL】 &#xff08;先手工做&#xff0c;非自动化&#xff09; #环境&#xff1a; 192.168.73.138 master 192.168.73.139 node1 192.168.73.140 node2 192.168.73.137 harbor、mysqlgit clone https://github.com/lizhenliang/simple-…

leetcode.1234 替换子串得到平衡字符串 - 反向滑动窗口

1234. 替换子串得到平衡字符串 题目&#xff1a; 有一个只含有 Q, W, E, R 四种字符&#xff0c;且长度为 n 的字符串。 假如在该字符串中&#xff0c;这四个字符都恰好出现 n/4 次&#xff0c;那么它就是一个「平衡字符串」。 给你一个这样的字符串 s&#xff0c;请通过「替换…

信息安全管理

信息安全管理信息安全管理信息安全风险管理信息安全管理体系应急响应与灾难恢复应急响应概况信息系统灾难修复灾难恢复相关技术信息安全管理 管理概念&#xff1a;组织、协调、控制的活动&#xff0c;核心过程的管理控制 管理对象和组成&#xff1a;包括人员在内相关资产&…

【ArcGIS Pro二次开发】(3):UI管理_显示隐藏Tab、Group、Control等控件

在ArcGIS Pro工作中&#xff0c;有时候会涉及到工具栏UI的管理&#xff0c;比如&#xff0c;打开模型构建器时&#xff0c;工具栏才会出现新的选项卡(Tab)【ModelBuilder】&#xff0c;工程未做更改&#xff0c;则【保存】按钮显示灰色不可用。 下面以一个小例子来学习一下。 一…

VScode+cuda编程:常见环境问题

VScodecuda&#xff1a;常见环境配置问题1、VScode终端问题(PS)2、编译问题(CUDA版本过低)3、nvcc编译问题(arch架构)1、VScode终端问题(PS) 问题描述&#xff1a; 在VScode下打开终端执行nvcc指令&#xff0c;发现执行不了&#xff0c;但是在外部终端powershell和cmd都可以。…

波奇学c语言:代码的编译和链接

test.c&#xff08;源文件&#xff09;->编译->test.obj&#xff08;目标文件&#xff09;->链接->test.exe&#xff08;可执行文件&#xff09;编译1.预编译&#xff08;预处理&#xff09;&#xff1a;text.c->text.i使用gcc -E test.c 进行停止预处理指令&am…

Java修饰符和运算符,超详细整理,适合新手入门

目录 一、访问控制修饰符 1、访问权限 二、运算符 1、算术运算符 2、关系运算符 3、逻辑运算符 4、赋值运算符 5、三元运算符 一、访问控制修饰符 Java 支持 4 种不同的访问权限&#xff1a; private 私有的 protected 受保护的 public 公共的 default 默认 1、…

【手写 Vuex 源码】第九篇 - Vuex 响应式数据和缓存的实现

一&#xff0c;前言 上一篇&#xff0c;主要介绍了 Vuex 的 State 状态安装&#xff0c;主要涉及以下几个点&#xff1a; State 状态的安装逻辑&#xff1b;两个核心问题的思路&#xff1b;代码实现以及执行情况分析&#xff1b; 本篇&#xff0c;继续介绍 Vuex 模块相关概念…

计算机组成原理(五)

3.理解主存储器与CPU的连接原理&#xff1b;   主存通过数据总线、地址总线和控制总线与CPU连接&#xff1b;   数据总线的位数与工作频率的乘积正比于数据传输率&#xff1b;   地址总线的位数决定了可寻址的最大内存空间&#xff1b;   控制总线&#xff08;读/写&am…