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

Spring弹性搜索重新索引方法

马弘和
2023-03-14

我编写了一个reindex方法,可以执行以下操作:

public void reindex() {
    IndexOperations indexOperations = elasticsearchOperations.indexOps(Song.class);
    List<Song> songs = songRepository.findAll();
    songSearchRepository.deleteAll();
    indexOperations.delete();
    indexOperations.create();
    songSearchRepository.saveAll(songs);
}

它确实起到了作用,但我现在确定,仅仅删除然后创建一个索引是否有意义。如何改进此方法?

共有1个答案

轩辕亮
2023-03-14

事实上,我看不出重新为同一个索引编制索引有什么意义。

如果您想重新索引到不同的索引,您应该使用Elasticsearch的重新索引API。Spring Data Elasticsearch尚未直接支持这一点。

要使用Spring Data Elasticsearch重新索引到不同的索引,您应该在循环中使用分页查询来读取一个索引并将数据写入第二个索引。

编辑16.10.2020:

不要像我建议的那样在循环中使用复制,就像@joeyave评论的那样,这里的索引可能会不同步。

我在Spring Data Elasticsearch Jira中创建了一个问题,以实现reindex支持。

 类似资料:
  • 我有大量相同类型的实体,每个实体都有大量属性,并且我只有以下两种选择来存储它们: 将每个项存储在索引中并执行多索引搜索 将所有enties存储在单个索引中,并且只搜索1个索引。 一般而言,我想要一个时间复杂度之间的比较搜索“N”实体与“M”特征在上述每一种情况!

  • 我试图用Spring Boot和弹性搜索设置一个应用程序。这个应用程序已经使用Spring Data JPA存储库来持久化我的实体。当我试图在启用弹性搜索配置的情况下运行应用程序时,我遇到的问题是,当存储库被扫描时,我得到了一个异常。 我得到了以下例外: 我的存储库的定义如下: 异常似乎是由于count查询的签名导致的,该签名返回一个int。尽管这个存储库可以很好地处理JPA,但它会抛出一个异常,

  • 我已经将弹性搜索1.7.1与spring应用程序集成在一起。我有一个cron作业,它在每次运行时更新弹性搜索的索引。我遵循了github上的各种示例代码来使其工作。首先,我为索引目的自动连接了ElasticSearchOperations: 然后以以下方式执行内部循环索引 当我第一次运行它时,它就像预期的那样工作。我已经在config文件夹中的elasticsearch.yml中将cluster重

  • 我刚加入弹性搜索公司。而不知道如何在JSON请求中对索引和an类型发出正确的请求?(所以我不想像localhost:9200/myindex/mytype/_search那样在URL中使用索引和类型,而是向localhost:9200/_search发出JSON请求) 我试过这样的东西。但我得到的结果是'AAA'索引而不是'BBB'索引。如何只从bbb索引得到结果或者根本没有结果?

  • ElasticSearch索引会随机变空,但大多数情况下,它发生在部署用Rails构建的应用程序之后。 以下是有关ElastiSearch的一些信息: curl-xget“http://localhost:9200/_nodes?pretty” curl-xget“http://localhost:9200/_cluster/health?pretty” curl“localhost:9200/_

  • 假设我有三个指数:城市、博物馆和景点。 现在我正在查询一个术语的所有索引(),例如“维也纳” 作为结果,我得到: 维也纳:维也纳艺术博物馆 有没有办法优先考虑指数,这样我就可以得到第一个城市,而不是景点,最后是博物馆,就像这样: 维也纳 维也纳的Riesenrad 维也纳:维也纳艺术博物馆 维也纳:维也纳历史博物馆