Spring Data Elasticsearch配置及使用

这篇具有很好参考价值的文章主要介绍了Spring Data Elasticsearch配置及使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring Data Elasticsearch

以POJO为中心模型用于与Elastichsearch文档交互,并轻松编写存储库样式的数据访问层框架

我们学习的是底层封装了Rest High Level的ElasticsearchRestTemplate模板类型。需要使用Java API Client(Transport),则应用ElasticsearchTemplate模板类型即可。两种类型中的方法API几乎完全一样,学会了一个,另外一个主要就是配置和类型的区别。当然了,每个不同版本的框架,在方法API上还是有些差异的。

Spring Data Elasticsearch访问Elasticsearch

准备环境

1.导入依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>

2.yml配置

# ElasticsearchRestTemplate客户端的配置
spring:
  elasticsearch:
    rest:
      uris: http://127.0.0.1:9200  # ES服务器所在位置。集群多节点地址用逗号分隔。默认http://localhost:9200

3.创建实体类

 * 	Document - 描述类型和索引的映射。
 *  indexName - 索引名称
 *  shards - 主分片数量。默认值 1*  replicas - 副本分片数量。默认值 1@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "xy_student",shards = 1,replicas = 0)
public class Student {
	 * Id - 当前注解所在字段和主键值一致,没有次注解,则自动生成主键
     * Field - 当前属性和索引中的字段映射规则。
     *  name - 字段名称。默认和当前类型属性名一致。
     *  type - 字段类型。默认使用FieldType.AUTO。自动识别。
     *  analyzer - 分词器。所有的Text类型字段默认使用standard分词器。
     *  index - 是否创建索引。默认值 true*  format - 如果字段类型是date日期类型。此属性必须配置,用于设置日期格式化规则,使用DateFormat类型中的常量定义。

	@Id
    @Field(name="sid",type = FieldType.Integer)
    private Integer sid;

    @Field(name="sname",type = FieldType.Text,analyzer = "ik_max_word")
    private String sname;

    @Field(name="score",type = FieldType.Double)
    private Double score;

    @Field(name="birth",type = FieldType.Date,format = DateFormat.year_month_day)
    private Date birth;
}

索引操作

@Autowired
private ElasticsearchRestTemplate restTemplate;
    
IndexOperations indexOps = restTemplate.indexOps(Student.class);
1.创建索引
indexOps.create();

2.设置映射: 在商业开发中,几乎不会使用框架创建索引或设置映射。因为这是架构或者管理员的工作。且不适合使用代码实现
indexOps.putMapping(indexOps.createMapping());

3.删除索引
restTemplate.indexOps(Student.class).delete();

文档操作

简单CURD

1.新增文档
如果索引不存在,新增文档时自动创建索引。但是不使用类上的映射配置,使用默认映射.所以一定要先通过代码进行mapping设置,或直接在elasticsearch中通过命令创建所有field的mapping(推荐)
Student zs = elasticsearchRestTemplate.save(new Student(1, "zs", 0.55, new Date()));
System.out.println(zs);

2.批量新增文档
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student(1, "zs", 0.55, new Date()));
        students.add(new Student(2, "sdf", 0.22, new Date()));
        students.add(new Student(3, "df", 0.33, new Date()));
        Iterable<Student> save = elasticsearchRestTemplate.save(students);
        System.out.println(save.toString());
        
3.主键查询文档
Student student = restTemplate.get("3", Student.class);

4.删除文档
    // 删除类型对应的索引中的指定主键数据,返回删除数据的主键。注意:Elasticsearch中的文档主键都是字符串类型的。
    String response = restTemplate.delete("1", Student.class);

5.更新文档
 * save方法,可以覆盖同主键数据。全量替换
 * update更新,部分更新
@Test
public void testUpdate(){
    UpdateQuery query =UpdateQuery.builder("2")
                    			  .withDocument(Document.parse("{\"hobbies\":[\"郭麒麟\", \"郭汾阳\"]}"))
                    			  .build();
    UpdateResponse response = restTemplate.update(query, IndexCoordinates.of("stu_index"));
    System.out.println(response.getResult());
}

query string 查询

    @Test
    void contextsxLsoads() {
        QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("sname:zs");
        Query query = new NativeSearchQueryBuilder()
                        .withQuery(queryBuilder) // 提供具体的条件。
                        .build();

        SearchHits<Student> hits = elasticsearchRestTemplate.search(query, Student.class);
        System.out.println("搜索结果数据个数是: " + hits.getTotalHits());

        for (SearchHit<Student> hit : hits) {
            // 源数据,就是保存在Elasticsearch中的数据
            Student content = hit.getContent();
            System.out.println("源数据:" + content);
        }
    }

DSL 查询文章来源地址https://www.toymoban.com/news/detail-511142.html

1.搜索全部
@Test
public void testMatchAll(){
    SearchHits<Student> hits = restTemplate.search(
            new NativeSearchQueryBuilder()
                    .withQuery(QueryBuilders.matchAllQuery())
                    .build(), Student.class);
    for(SearchHit<Student> hit : hits){
        System.out.println(hit.getContent());
    }
}
2.match搜索
SearchHits<Student> hits = restTemplate.search(
            new NativeSearchQueryBuilder()
                    .withQuery(
                            QueryBuilders.matchQuery(
                                    "name",
                                    "于谦")
                    ).build(),Student.clas);

3.短语搜索,完全匹配Match Phrase
    SearchHits<Student> hits = restTemplate.search(
            new NativeSearchQueryBuilder()
                    .withQuery(
                            QueryBuilders.matchPhraseQuery(
                                    "hobbies",
                                    "烫头"
                            )
                    )
                    .build(),
            Student.class
    );

4.范围搜索Range 搜索
    SearchHits<Student> hits =
            restTemplate.search(
                    new NativeSearchQueryBuilder()
                            .withQuery(
                                    QueryBuilders.rangeQuery("age")
                                    .lte(35).gte(30)
                            )
                            .build(),
                    Student.class
            );

5.Bool 搜索,多条件同时满足
    @Test
    void contextswLsoads() {
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        List<QueryBuilder> must = boolQueryBuilder.must();
        must.add(QueryBuilders.matchQuery("sname","zs"));
        must.add(QueryBuilders.rangeQuery("score").gt(0).lt(0.5));

        Query queryBuilder = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).build();

        SearchHits<Student> search = elasticsearchRestTemplate.search(queryBuilder, Student.class);
    }

6.分页和排序
 * PageRequest类型中,提供静态方法of(int page, int size[, Sort sort]);
 * page - 查询第几页,页码数字从0开始计数。
 * size - 查询多少行。
 * Sort - 具体的排序规则。可选参数。
    SearchHits<Student> hits =
            restTemplate.search(
                    new NativeSearchQueryBuilder()
                            .withQuery(QueryBuilders.matchAllQuery())
                            .withPageable(
                                    PageRequest.of(0, 2,
                                            Sort.by(
                                                    Sort.Order.desc("age"),
                                                    Sort.Order.asc("id")
                                            )
                                    )
                            )
                            .build(),
                    Student.class
            );

7.高亮处理
@Test
public void testQueryHighLight(){
    // 创建高亮字段,必须和具体的字段名绑定。
    HighlightBuilder.Field field1 = new HighlightBuilder.Field("name");
    // 高亮前缀
    field1.preTags("<span style='color: red'>");
    // 高亮后缀
    field1.postTags("</span>");
    // 分段的每段字符数
    field1.fragmentSize(Integer.MAX_VALUE);
    // 分段后,返回几段
    field1.numOfFragments(1);
    Query query =
            new NativeSearchQueryBuilder()
                    .withQuery(
                            QueryBuilders.matchQuery(
                                    "name",
                                    "于谦")
                    )
                    .withHighlightFields(field1)
                    .build();

    SearchHits<Student> hits =
            restTemplate.search(query, Student.class);

    for (SearchHit<Student> hit : hits){
        // 获取源数据
        Student content = hit.getContent();
        // 找高亮数据
        List<String> hl = hit.getHighlightField("name");
        // 判断是否有高亮数据
        if(hl != null && hl.size() > 0){
            // 有高亮数据
            content.setName(hl.get(0));
        }
        System.out.println(content);
    }

}

到了这里,关于Spring Data Elasticsearch配置及使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Data Elasticsearch--使用/教程/实例

    原文网址:Spring Data Elasticsearch--使用/教程/实例_IT利刃出鞘的博客-CSDN博客 技术星球 欢迎来到IT技术星球,网站是:learn.skyofit.com(或者百度直接搜:自学精灵)。内容有: Java真实面试题 、 Java设计模式实战 、Shiro项目实战、 Idea和Navicat的“魔法” 教程、 SpringBoot进阶 、架构

    2023年04月09日
    浏览(33)
  • Spring Data Elasticsearch 的简单使用

    目录 一、简介 二、配置 三、映射 四、 常用方法 五、操作(重点) 1、对索引表的操作 2、对文档的操作(重点) (1)、添加文档  (2)、删除文档 (3)、查询文档(重点) 查询全部文档 (两种方式) matchQuery根据拆分进行全局搜索 matchPhraseQuery短语搜索--完整搜

    2024年02月12日
    浏览(29)
  • 【Elasticsearch】spring-boot-starter-data-elasticsearch的使用以及Elasticsearch集群的连接

    更多有关博主写的往期Elasticsearch文章 标题 地址 【ElasticSearch 集群】Linux安装ElasticSearch集群(图文解说详细版) https://masiyi.blog.csdn.net/article/details/131109454 基于SpringBoot+ElasticSearch 的Java底层框架的实现 https://masiyi.blog.csdn.net/article/details/121534307 ElasticSearch对标Mysql,谁能拔得头筹

    2024年02月11日
    浏览(26)
  • spring data elasticsearch使用7.x客户端兼容es 8.x和使用ssl构建RestHighLevelClient

    es在7.x中默认加入elastic security组件所以java client需要使用ssl连接es server. es 8.x 中废弃了 RestHighLevelClient ,使用新版的 java api client ,但是spring data elasticsearch还未更新到该版本.所以需要兼容es 8.x 如下是RestHighLevelClient构建方法: spring data elasticsearch客户端依赖(基于spring boot2.7使用最新

    2024年02月13日
    浏览(34)
  • spring data系列之Spring data ElasticSearch

    Spring data ElasticSearch简介:        Elasticsearch是一个实时的分布式搜索和分析引擎。它底层封装了Lucene框架,可以提供分布式多用户的全文搜索服务。        Spring Data ElasticSearch是SpringData技术对ElasticSearch原生API封装之后的产物,它通过对原生API的封装,使得程序员可以简单的

    2023年04月08日
    浏览(37)
  • spring-data-elasticsearch使用Sort排序时Please use a keyword field instead. ……异常解决

    核心提示在 Please use a keyword field instead. Alternatively, set fielddata=true on [dataTimestamp] in order to load field data by uninverting the inverted index. 待排序字段 dataTimestamp 没有为排序优化,所以无法排序,需要配置 FieldType.Keyword 或 fielddata = true ,可是代码中都配置了为什么还提示呢,往下看……

    2023年04月24日
    浏览(30)
  • spring Data Elasticsearch入门

    1.Elasticsearch Elasticsearch提供了两种连接方式: transport:通过TCP方式访问ES。(已废弃) rest:通过HTTP API 方式访问ES。 描述: Spring Data Elasticsearch 项目提供了与Elasticsearch 搜索引擎的集成。Spring Data ElasticSearch 的关键功能领域是以POJO为中心的模型,用于与Elastichsearch 文档交互并

    2024年02月02日
    浏览(37)
  • Spring Data ElasticSearch简介

    Spring Data是⼀个⽤于简化数据库访问,并⽀持云服务的开源框架。其主要⽬标是使得对数据的访问变 得⽅便快捷,并⽀持map-reduce框架和云计算数据服务。 Spring Data可以极⼤的简化JPA的写法,可 以在⼏乎不⽤写实现的情况下,实现对数据的访问和操作。除了CRUD外,还包括如分

    2023年04月19日
    浏览(33)
  • Spring Data Elasticsearch - 在Spring应用中操作Elasticsearch数据库

    Spring Data Elasticsearch为文档的存储,查询,排序和统计提供了一个高度抽象的模板。使用Spring Data ElasticSearch来操作Elasticsearch,可以较大程度的减少我们的代码量,提高我们的开发效率。 要使用Elasticsearch我们需要引入如下依赖: 还需要在配置文件中增加如下配置 类比于MyBat

    2024年02月14日
    浏览(37)
  • Spring Data Elasticsearch介绍(七)

            Spring Data Elasticsearch是Spring Boot套件中的一个组件,在Spring Boot中连接ES可以使用Spring Data Elasticsearch。         Spring Data Elasticsearch是Spring Data项目的一部分,该项目致力于提供一致的基于Spring的数据查询和存储编程模型。         Spring Data Elasticsearch封装了创

    2024年02月14日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包