Spring Data ElasticSearch的初级使用及注意事项

本文介绍了Spring Data ElasticSearch的基本使用方法,包括所需依赖的引入,如ElasticSearch、Spring Data ElasticSearch等。同时,注意了版本匹配和特定依赖的排除,如transport-netty4-client的排除。此外,还提到了相关测试和日志处理库的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

注意事项见代码注释:

package com.ddao.es.test;

import com.ddao.es.entity.Article;
import com.ddao.es.repositories.ArticleRrpository;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.QueryStringQueryBuilder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
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.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


@SuppressWarnings("ALL")
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class Testes {

    @Autowired
    private ArticleRrpository articleRrpository;
    @Autowired
    private ElasticsearchTemplate template;


    @Test
    public void testes(){
        template.createIndex(Article.class);
        //配置mapping映射关系
        //template.putMapping(Article.class);
    }
    @Test
    public void save(){
        Article article = new Article();
        for (int i = 0; i < 100; i++) {
            article.setId((long)i);
            article.setTitle("你道哥还是你道哥 "+i);
            article.setContent("今夜阳光明媚,今晚不醉不归 "+i);
            articleRrpository.save(article);
        }

    }
    @Test
    public void delete(){
        articleRrpository.deleteById((long)1);
    }

    @Test
    public void search(){
        Page<Article> search = articleRrpository.search(new QueryStringQueryBuilder("道哥") {
        }, PageRequest.of(1, 10));
//        for (Article article : search) {
//            System.out.println(article);
//        }
        search.forEach(a->System.out.println(a));
    }
    @Test
    public void findbyid(){
        System.out.println(articleRrpository.findById((long) 1));

    }

    /**
     * 查询默认只有findbyId一个方法,如果有其他需求,比如根据标题或者内容。。或者其他已经定义的字段
     * 自需要根据驼峰式的命名规则,在dao层定义即可,并且不需要实现
     *  注意:
     *      分页默认是最多只显示10条
     *      如果要显示更多,需要在接口的方法中写一个重载方法,多传入一个阐述Pageable即可
     *
     *  额外注意:
     *      这种查询方法查询,虽然进行了先分词在查询的操作。但是,它底层是对每个分词的进行的“and”操作
     *      也就是说,我要查询一个字段,中的“中国你好”,该字段就必须同时包含“中国”和“你好”
     *    解决:
     *      采用原生的查询对象查询。
     */
    @Test
    public void findbyFeild(){

       //articleRrpository.findArticleByTitle("11").forEach(a-> System.out.println(a));
       Pageable pageable = PageRequest.of(0,15);
       articleRrpository.findArticleByTitle("道哥",pageable).forEach(a-> System.out.println(a));

    }

    //原声的查询方法查询
    @Test
    public void findByOld(){
        //创建一个SearchQuery对象
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
        //设置查询条件,此处可以使用QueryBuilders创建多种查询
        .withQuery(QueryBuilders.queryStringQuery("道哥真的帅").defaultField("title"))
        //还可以设置分页信息
        .withPageable(PageRequest.of(1,5))
        //创建SearchQuery对象
        .build();

        //使用模板对象执行查询
        template.queryForList(searchQuery,Article.class).forEach(a->System.out.println(a));
    }

}

导包:<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‐core</artifactId>
            <version>2.8.1</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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值