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

通过Spring Data ElasticSearch批量索引Spring Data JPA条目到弹性

南门洋
2023-03-14

我们目前的设置是以MySQL为主要数据源,通过Spring data JPA,Hibernate Search对数据进行索引和搜索。我们现在决定使用弹性搜索来进行搜索,以更好地与其他特性保持一致,此外,我们还需要多个服务器共享索引和搜索。

我可以通过elasticsearchrepository轻松地使用Spring Data ElasticSearch设置弹性数据索引和搜索。但现在的挑战是如何将现有的所有MySQL记录索引到弹性搜索中。Hibernate Search提供了一个APIorg.Hibernate.Search.jpa.FulltExtentityManager#CreateIndexer,我们一直在使用它。但我在Spring Data ElasticSearch中找不到一个方便的解决方案。希望有人能在这里帮助我或提供一些指示。

这里有一个类似的问题,但是这里提出的解决方案不太符合我的需要,因为我更希望能够索引整个对象,其中的字段映射到多个DB表。

共有1个答案

宋宏儒
2023-03-14

到目前为止,我还没有找到比编写自己的代码将所有JPA条目索引到应用程序中的ES更好的解决方案,而这一方案对我来说效果很好

Pageable page = new PageRequest(0, 100);
Page<Instance> curPage = instanceManager.listInstancesByPage(page);    //Get data by page from JPA repo.
long count = curPage.getTotalElements();
while (!curPage.isLast()) {
    List<Instance> allInstances = curPage.getContent();
    for (Instance instance : allInstances) {
        instanceElasticSearchRepository.index(instance);    //Index one by one to ES repo.
    }
    page = curPage.nextPageable();
    curPage = instanceManager.listInstancesByPage(page);
}

逻辑是非常简单的,只是取决于数据量可能需要一段时间,所以分解成批并添加一些消息可能是有帮助的。

 类似资料:
  • 问题内容: 我们当前的设置是通过Spring Data JPA将MySQL作为主要数据源,并使用Hibernate Search索引和搜索数据。现在,我们决定去Elastic Search进行搜索,以更好地与其他功能保持一致,此外,我们需要让多个服务器共享索引和搜索。 我可以使用Spring Data ElasticSearch来设置Elastic,以通过轻松进行数据索引和搜索。但是现在的挑战是如

  • 问题内容: 这是我的要求: 这是错误: [3], expected START_OBJECT or END_OBJECT but found [VALUE_STRING]]“,“状态”:500} 基本上,每个文档都是{“ firstname”:,“ lastname”:_}我不想将它们包装到父字段中。我从根本上缺少什么? 问题答案: 您只是缺少第二和第三个文档的操作行,请尝试如下操作:

  • 问题内容: 可以说我有以下代码: 有没有一种方法可以以编号方式访问项目,例如: 问题答案: 如果是,则可以通过获取(key,value)对的元组的索引来轻松访问元素,如下所示 Python 3.X的注意事项 将返回一个可迭代的dict视图对象而不是一个列表。我们需要将调用包装到一个列表上,以使建立索引成为可能

  • 问题内容: 我正在尝试将JSON文件批量索引到新的Elasticsearch索引中,但无法这样做。我在JSON中有以下示例数据 我在用 当我尝试使用Elasticsearch的标准批量索引API时,出现此错误 任何人都可以帮助索引这种类型的JSON吗? 问题答案: 您需要做的是读取该JSON文件,然后使用端点期望的格式构建一个批量请求,即,一行用于命令,一行用于文档,并用换行符分隔…冲洗并重复以下

  • 我正在用spring数据存储库保存新的条目。我对每个条目都有10秒的TTL。 当我用索引保存一个条目时,下面是我在Redis中得到的结果 到期后,我还有数据: 没有任何TTL。 为什么他们不删除自己?我怎么能那么做?

  • 问题内容: 我正在使用Spring Data Repository保存新条目。每个条目的TTL为10秒。 当我保存带有索引的条目时,这就是我在Redis中得到的 到期后,我仍然有数据: 没有任何TTL。 他们为什么不删除自己?我该怎么办? 问题答案: Spring Data Redis存储库使用多个Redis功能将域对象持久存储在Redis中。 域对象主要存储在哈希()中。任何有效期都直接应用于哈