Elasticsearch--SpringData 整合 Elasticsearch

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

学习必须往深处挖,挖的越深,基础越扎实!

阶段1、深入多线程

阶段2、深入多线程设计模式

阶段3、深入juc源码解析


阶段4、深入jdk其余源码解析


阶段5、深入jvm源码解析

码哥源码部分

码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】

码哥讲源码【炸雷啦!炸雷啦!黄光头他终于跑路啦!】

码哥讲源码-【jvm课程前置知识及c/c++调试环境搭建】

​​​​​​码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】

码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】

码哥讲源码【你水不是你的错,但是你胡说八道就是你不对了!】

码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】

终结B站没人能讲清楚红黑树的历史,不服等你来踢馆!

打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】

引入依赖
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.example</groupId>
        <artifactId>ES_springData</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
                <version>5.6.8</version>
            </dependency>
            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>transport</artifactId>
                <version>5.6.8</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-to-slf4j</artifactId>
                <version>2.9.1</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.24</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-simple</artifactId>
                <version>1.7.21</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.12</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
    
    
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.8.1</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>2.8.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-elasticsearch</artifactId>
                <version>3.0.5.RELEASE</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.elasticsearch.plugin</groupId>
                        <artifactId>transport-netty4-client</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>5.0.4.RELEASE</version>
            </dependency>
        </dependencies>
    
    </project>
配置

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 ">
    
        <!--配置Client-->
        <elasticsearch:transport-client id="esClient" cluster-name="elasticsearch"
                                        cluster-nodes="127.0.0.1:9300"/>
        <!--Dao包扫描-->
        <elasticsearch:repositories base-package="pers.zhang.repository"/>
        <!--模板-->
        <bean id="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
            <constructor-arg name="client" ref="esClient"/>
        </bean>
    
    </beans>
实体
    package pers.zhang.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 = "article-index", type = "article")
    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 + '\'' +
                    '}';
        }
    }
Repository
    package pers.zhang.repository;
    
    import org.springframework.data.domain.Pageable;
    import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
    import pers.zhang.entity.Article;
    
    
    import java.util.List;
    
    
    public interface ArticleRepository extends ElasticsearchRepository<Article, Long> {
    
        //根据标题进行查询
        List<Article> findByTitle (String title);
    
        List<Article> findByTitleOrContent (String title, String context);
    
        List<Article> findByTitleOrContent (String title, String context, Pageable pageable);
    }
测试
    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 pers.zhang.entity.Article;
    import pers.zhang.repository.ArticleRepository;
    
    import java.util.List;
    import java.util.Optional;
    
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:applicationContext.xml")
    public class SpringDataElasticsearchTest {
    
        @Autowired
        ArticleRepository articleRepository;
    
        @Autowired
        ElasticsearchTemplate elasticsearchTemplate;
    
        @Test
        public void createIndex () {
            //创建索引,配置映射关系
            elasticsearchTemplate.createIndex(Article.class);
        }
    
        @Test
        public void addDocument () {
            Article article = new Article();
            article.setId(1l);
            article.setTitle("Maven对象模型");
            article.setContent("佛教圣地六块腹肌塑料袋放假了撒");
            articleRepository.save(article);
        }
    
        @Test
        public void deleteById () {
            articleRepository.deleteById(1l);
        }
    
        @Test
        //查询所有
        public void findAll () {
            Iterable<Article> all = articleRepository.findAll();
            all.forEach( a -> System.out.println(a));
        }
    
    
        @Test
        //根据id查询
        public void findById () {
            Optional<Article> byId = articleRepository.findById(2l);
            System.out.println(byId.get());
        }
    
        @Test
        public void findByTitle () {
            List<Article> list = articleRepository.findByTitle("对象");
            list.forEach( a -> System.out.println(a));
        }
    
    
        @Test
        //多条件查询
        public void findByTitleOrContent () {
            List<Article> list = articleRepository.findByTitleOrContent("ddd", "放假");
            list.forEach( a -> System.out.println(a));
        }
    
        @Test
        //分页查询
        public void findByPage () {
            Pageable pageable = PageRequest.of(0, 2);
            List<Article> list = articleRepository.findByTitleOrContent("ddd", "放假", pageable);
            list.forEach( a -> System.out.println(a));
        }
    
    
        //原生查询
        @Test
        public void testNativeSearchQuery () {
            NativeSearchQuery query = new NativeSearchQueryBuilder()
                    .withQuery(QueryBuilders.queryStringQuery("佛放假").defaultField("content"))
                    .withPageable(PageRequest.of(0, 5))
                    .build();
            List<Article> articles = elasticsearchTemplate.queryForList(query, Article.class);
            articles.forEach(a -> System.out.println(a));
    
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值