当前位置: 首页 > 知识库问答 >
问题:

Spring Data Elasticsearch在引擎盖下使用了什么Elasticsearch客户端?

郭彬郁
2023-03-14

我想在我的项目中使用Spring Data Elasticsearch,我看到了这一点:

我的方法是只使用Spring数据Elasticsearch来执行CRUD操作(类似ORM),使用高级REST客户端进行搜索和所有其他操作。因此,我想知道ElasticsearchRepository使用哪个客户端来执行其操作,以及代码是否在Elasticsearch的8.0版中不再有效
使用3.1.5版仍然是一个好的决定吗?

共有2个答案

干宏邈
2023-03-14

是的,它确实使用传输客户端

叶浩荡
2023-03-14

一如既往,这取决于情况。

关于Elasticsearch:当前版本是6.7.0,TransportClient也将在ES7中可用,尽管已弃用,但只会在ES8中删除,因此有相当长的时间使用它——尽管您应该考虑更换它。

关于sping-data-elasticsearch:

  • 使用ElasticsearchTemplate时,您使用的是TransportClient

示例配置类:

@SpringBootApplication
@EnableElasticsearchRepositories
public class SpringdataElasticTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringdataElasticTestApplication.class, args);
    }

    @Bean
    RestHighLevelClient elasticsearchClient() {
        final ClientConfiguration configuration = ClientConfiguration.localhost();
        RestHighLevelClient client = RestClients.create(configuration).rest();
        return client;
    }

    @Bean
    ElasticsearchRestTemplate elasticsearchTemplate() {
        return new ElasticsearchRestTemplate(elasticsearchClient());
    }
}

示例存储库类:

public interface PersonRepository extends ElasticsearchRepository<Person, Long> {
}

POJO类示例:

@Document(indexName = "person")
public class Person {
    @Id
    private Long id;
    private String lastName;
    private String firstName;

    public Long getId() {
        return id;
    }

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

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
}

因此,当使用3.1. x时,您只有TransportClient,而3.2. x目前可作为里程碑M2使用,您也可以使用RestClient。

请确保您的应用程序。yaml(或属性)没有任何Spring。数据elasticsearch。集群-*属性,因为这些属性将注入ElasticsearchTemplate(传输客户端)。

您需要在pom中设置正确的elasticsearch和spring-data-elasticsearch版本(摘录):

<properties>
    <elasticsearch.version>6.6.1</elasticsearch.version>
</properties>

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-elasticsearch</artifactId>
        <!-- need 3.2.0 for REST client-->
        <version>3.2.0.M2</version>
    </dependency>

<repository>
    <id>Spring-Framework-Milestone</id>
    <name>Spring Framework Milestone</name>
    <url>http://maven.springframework.org/milestone/</url>
</repository>
 类似资料:
  • 我目前正在用C#编写一个纯粹出于学术目的的JVM(也许将来会构建一个混合的.NET和Java/Scala应用程序)。 我编写了一个简单的JAVA类: 并将其编译为。当我使用我的反编译程序(我已经将其作为JVM的一部分编写)反编译它时,我看到这个方法的如下说明: 在常量池中查找索引处的常量时,我看到一个InvokeDynamic-Constant条目,其中包含以下数据: 我想这是有道理的(我更多的是

  • 问题内容: 我一直在尝试React Hooks,它们似乎确实简化了诸如存储状态之类的事情。但是,他们似乎通过魔术来做很多事情,而我找不到关于它们实际工作方式的好文章。 看起来很神奇的第一件事是,每次调用setXXX方法时,调用诸如useState()之类的函数如何导致功能组件的重新渲染? 当功能组件甚至没有能力在Mount / Unmount上运行代码时,诸如useEffect()之类的东西如何伪

  • 我一直在尝试React钩子,它们似乎可以简化存储状态之类的事情。然而,他们似乎用魔法做了很多事情,我找不到一篇关于他们如何实际工作的好文章。 第一件看起来很神奇的事情是,调用像useState()这样的函数是如何在每次调用setXXX方法时导致函数组件的重新渲染的? 当功能组件甚至不具备在挂载/卸载上运行代码的能力时,像use效应()这样的东西是如何伪造组件的? useContext()实际上是如

  • 问题内容: 我想在项目中使用Spring Data Elasticsearch,并且看到了以下内容: 从Elasticsearch 7.0.0开始不推荐使用众所周知的TransportClient,并且应该在Elasticsearch 8.0中将其删除。 我的方法是仅使用Spring Data Elasticsearch进行CRUD操作(类似ORM),并使用High Level REST Clie

  • 除了阅读github中的代码之外,是否有关于signalr.redis包如何工作的白皮书类型的文档?具体地说,我想知道它为Redis添加了哪些键、更新/删除策略等。当查看Redis内部时,我只看到以下调用中指定的一个键(即“signalr.Redis.sample”): 这把钥匙好像是Redis的柜台。我假设正在创建其他键并迅速删除,以方便连接到Redis的每个应用服务器之间的消息。

  • 问题内容: 在阅读了戴夫·切尼(Dave Cheney)关于Go的地图的博客文章之后,对我来说,还有几件事尚不清楚。 TLDR: 为什么它们无序? 实际值存储在哪里? 深入研究运行时程序包后,我发现基本的映射结构如下: -是存储区数组,其中索引是键的哈希值的低位,其中存储区为: ..好吧,这只是每个项目是键的哈希值的第一个字节的数组。键值对存储为(每个存储桶八对)。但是到底在哪里?考虑到映射可能包