SpringDataElasticSearch(一)

SpringDataElasticsearch

SpringDataElasticsearch是SpringData模块的一个子模块,是对ES原生API的二次封装.
由于SpringData版本与ES版本有相关的依赖性.所以集成会有坑.以此记录

SpringBoot,SpringData,ES各个版本的支持情况

本文编写时候ES最新版已经是7.6.1,但是SpringData最高只支持到6.8.4,所以需要慎重选择

2786935-53d00747e6915d04.png
各个版本的支持

在下文的示例中,使用的版本如下

  • Elasticsearch: 6.8.4
  • SpringBoot: 2.2.5.RELEASE
  • SpringDataElasticSearch: 2.2.5.RELEASE

Docker安装ES

示例为Docker安装ES,其他方式请参考官网ES下载

1.Docker拉取镜像

docker pull elasticsearch:6.8.4

2.启动Docker

docker run --name "es6.8.4" -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.8.4 -d

3.访问http://localhost:9200/

2786935-894aa5e3096e866c.png
正常显示

有类似输出证明docker启动ES成功

SpringBoot工程使用ES

1.添加SpringBoot依赖

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
    </parent>

2.添加SpringDataElasticsearch依赖

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

3.配置ES连接
application.yml

spring:
  redis:
    cluster:
      nodes: 127.0.0.1:9300

配置请求的日志

在初学或者排查请求问题的时候,日志是非常重要的,但是官方文档或者网上有很难找到教程...在翻看源码后终于找到解决办法

在SpringData的官方文档中,只给出了Client Logging的配置方式,配置之后只能输出请求es的接口地址.
日志输出类org.elasticsearch.client.RequestLogger
查看源码后发现,RestClient输出日志的logger使用了不同的Log对象,如果想输出详细的requestresponse日志,需要使用tracer

配置logback.xml/log4j2.xml

根据自己的项目使用的log依赖配置.这里使用logback参考

logback.xml

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%d{ISO8601}] [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="WARN">
        <appender-ref ref="STDOUT"/>
    </root>

    <!--输出完整的请求es日志-->
    <logger name="tracer" level="TRACE" additivity="false">
        <appender-ref ref="STDOUT"/>
    </logger>

    <!-- 输出restClient的日志 -->
    <logger name="org.elasticsearch.client.RestClient" level="DEBUG" additivity="false">
        <appender-ref ref="STDOUT"/>
    </logger>
</configuration>
2786935-839b39db614dcd4b.png
看到完整日志输出

Demo

Country

@Document(indexName = "world")
public class Country implements Serializable {

    @Id
    private Integer id;

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

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

    @Override
    public String toString() {
        return "Country{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

CountryRepository

public interface CountryRepository extends ElasticsearchRepository<Country, Long> {
    List<Country> findCountryByName(String name);

    Page<Country> findCountryByName(String name, Pageable pageable);

    Country findCountryById(String name);

}

CountryTest

@RunWith(SpringRunner.class)
@SpringBootTest
class CountryServiceTest {


    @Autowired
    private CountryRepository countryRepository;


    @Test
    void saveCountry() {
        Country country = new Country();
        country.setName("中国");
        countryRepository.save(country);
        Country country1 = new Country();
        country1.setName("美国");
        countryRepository.save(country1);
    }

    @Test
    public void testDel(){
        countryRepository.deleteAll();
    }

    @Test
    void getCountryByName() {
        Page<Country> countryList = countryRepository.findCountryByName("国", PageRequest.of(0, 10));
        System.out.println(countryList.getContent());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值