当前位置: 首页 > 面试题库 >

通过Spring Data ElasticSearch将Spring Data JPA条目批量索引到Elastic

傅献
2023-03-14
问题内容

我们当前的设置是通过Spring Data JPA将MySQL作为主要数据源,并使用Hibernate
Search索引和搜索数据。现在,我们决定去Elastic Search进行搜索,以更好地与其他功能保持一致,此外,我们需要让多个服务器共享索引和搜索。

我可以使用Spring Data
ElasticSearch来设置Elastic,以通过轻松进行数据索引和搜索ElasticsearchRepository。但是现在的挑战是如何将所有现有的MySQL记录索引到Elastic
Search中。Hibernate
Search提供了一个org.hibernate.search.jpa.FullTextEntityManager#createIndexer我们一直使用的API
。但是我在Spring Data ElasticSearch中找不到方便的解决方案。希望有人可以在这里帮助我或提供一些指示。

这里有一个类似的问题,但是那里提出的解决方案不能很好地满足我的需求,因为我希望能够为整个对象建立索引,这些对象的字段映射到多个数据库表。


问题答案:

到目前为止,我没有找到比编写自己的代码以将所有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);
}

逻辑非常简单,仅取决于可能要花费一段时间的数据量,因此分解成批并添加一些消息可能会有所帮助。



 类似资料:
  • 我们目前的设置是以MySQL为主要数据源,通过Spring data JPA,Hibernate Search对数据进行索引和搜索。我们现在决定使用弹性搜索来进行搜索,以更好地与其他特性保持一致,此外,我们还需要多个服务器共享索引和搜索。 我可以通过轻松地使用Spring Data ElasticSearch设置弹性数据索引和搜索。但现在的挑战是如何将现有的所有MySQL记录索引到弹性搜索中。Hi

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

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

  • ES5.5文档给出了一个大容量索引的明确示例: 但它也说 endpoint为/_bulk、/{index}/_bulk和{index}/{type}/_bulk。当提供了索引或索引/类型时,默认情况下将在未显式提供它们的批量项上使用它们。 但我不能让这一切奏效。 > 我尝试了/myindex/bulkendpoint,但元数据中没有指定类型。 我在指定了“_type”:“_default_”的情况

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

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