Как указать ключ маршрутизации в spring data elasticsearch во время индексирования.?

Как указать ключ маршрутизации в spring data elasticsearch во время индексирования.

Я создал приложение для весенней загрузки, которое использует данные spring elasticsearch для индексации документов.

Ниже представлена ​​моя структура документа (без геттеров-сеттеров).

@Document(indexName = Constants.ES_INDEX_NAME, type = Constants.ES_TYPE,createIndex = false)
public class EsDocument {

    @Id
    private String ID;

    private String group;

    private String request;

    private String response;

    private Filters filters;

    public EsDocument() {
    }
}

public class Filters {

    private String order_id;
    private String api_type;
    private int status;
    private String statusCode;
    private String createdAt;
}

Это код для индексации документа. Я использую ElasticSearchTemplate для индексации своих данных.

public void saveAll(List<EsDocument> esDocuments) {
        List<IndexQuery> queries = new ArrayList<>();
        for(EsDocument esDocument : esDocuments) {
            IndexQuery indexQuery = new IndexQuery();
            indexQuery.setObject(esDocument);
            indexQuery.setIndexName(esDocument.getGroup());
            queries.add(indexQuery);
        }
        if (queries.size() > 0) {
            elasticsearchTemplate.bulkIndex(queries);
        }
        logger.info("Batch Documents Saved to elastic search");
    }

Как теперь добавить настраиваемый ключ маршрутизации при индексировании ?. Я хочу добавить filter.order_id в качестве ключа маршрутизации во время индексации.

0
0
1 076
2

Ответы 2

В AFAIK ElasticsearchTemplate отсутствует поддержка маршрутизации в определенных областях, и вам нужно перейти к клиенту, чтобы предоставить необходимую информацию о маршрутизации.

Попробуйте что-нибудь вроде

Client client = elasticsearchTemplate.getClient();
IndexRequestBuilder builder = client.prepareIndex(...);
builder.setRouting(...);

Это то, что я выяснил с BulkOptions и IndexCoordinates при использовании метода bulkIndex шаблона Elasticsearch. Пожалуйста, найдите полный код ниже:

public void indexAllData(final List<MediaResourceEsDto> mediaResources, final String indexName, final String routingId) {
    final List<IndexQuery> queries = new ArrayList<>();
    for(final MediaResourceEsDto mediaResource : mediaResources) {
        final IndexQuery indexQuery = new IndexQuery();
        indexQuery.setObject(mediaResource);
        queries.add(indexQuery);
    }

    // set index name
    final IndexCoordinates indexCoordinates = IndexCoordinates.of(indexName);

    // set routing id
    final BulkOptions.BulkOptionsBuilder bulkOptionsBuilder = BulkOptions.builder();
    bulkOptionsBuilder.withRoutingId(routingId);
    final BulkOptions bulkOptions = bulkOptionsBuilder.build();

    if (queries.size() > 0) {
        elasticsearchTemplate.bulkIndex(queries, bulkOptions, indexCoordinates);
    }
}

Поскольку у меня уже есть данные в списке, который я отсортировал из базы данных, я просто передаю их методу:

indexAllData(mediaResourceList, "media_resource_index_2", "kaufland");

Надеюсь, это кому-то поможет.

Ваше здоровье :)

Немного информации об окружающей среде:

  • spring-data-elasticsearch: 4.0.0.RELEASE (самая последняя версия на сегодняшний день)

  • spring -boot: 2.3.0.RELEASE (самая последняя версия на сегодняшний день)

Другие вопросы по теме