Подтвердить что ты не робот

Лучший способ использования ElasticSearch в Spring java framework

Я разрабатываю систему, которая планирует использовать elasticsearch в качестве хранилища данных. Я пытаюсь выбрать лучший способ разработки моего приложения, которое может индексировать и запрашивать данные из elasticsearch. Система, которой я располагаю, построена поверх рамки Spring.

Можно ли использовать Spring -data-elasticsearch (https://github.com/spring-projects/spring-data-elasticsearch)?

Или это хороший выбор для использования основных библиотек elasticsearch?

Мне нужно обрабатывать вложенные данные (внутренний объект), но Spring -data-elasticsearch, похоже, не работает для этого в последнее время.

Надеюсь, я смогу найти решение вопроса. Спасибо заранее.

4b9b3361

Ответ 1

Spring data elasticsearch поддерживает большинство общих наборов признаков elasticsearch, включая вложенные, внутренние объекты и родительский ребенок (недавно)

когда вы сказали, что хотите использовать вложенные данные (внутренний объект), пожалуйста, убедитесь, что у elasticsearch есть два понятия Inner Object и Nested Object.

Подробное объяснение можно найти в управлении отношениями в elasticsearch

Пример вложенного документа

Сущность лица

<до > <Код >

  @Document (indexName = "person", type = "user" )
   public class Person {
       @Я бы       private String id;
       private String name;
       @Field (type = FieldType.Nested)       private List <Car> автомобиль;
       // сеттер-геттеры
   }
Код>

код >

Автомобильная организация



    public class Car {
    private String name;
    private String model;
    //setters and getters 
    }

Настройка данных



    Person foo = new Person();
    foo.setName("Foo");
    foo.setId("1");

    List cars = new ArrayList();
    Car subaru = new Car();
    subaru.setName("Subaru");
    subaru.setModel("Imprezza");
    cars.add(subaru);
    foo.setCar(cars);

Индексирование



        IndexQuery indexQuery = new IndexQuery();
        indexQuery.setId(foo.getId());
        indexQuery.setObject(foo);

       //creating mapping
       elasticsearchTemplate.putMapping(Person.class);
       //indexing document
       elasticsearchTemplate.index(indexQuery);
       //refresh
       elasticsearchTemplate.refresh(Person.class, true);

Поиск

 

    QueryBuilder builder = nestedQuery("car", boolQuery().must(termQuery("car.name",      "subaru")).must(termQuery("car.model", "imprezza")));

    SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build();
    List persons = elasticsearchTemplate.queryForList(searchQuery, Person.class);

вы можете найти больше тестовых примеров о вложенном и внутреннем объектах в Вложенные тестеры объектов

Ответ 2

Вы можете использовать IndexQuery для сохранения и обновления:

public Serializable saveOrUpdate(Car car) {
    return template.index(new IndexQueryBuilder().withObject(car).build());
}

Ответ 3

Spring data elasticsearch использует транспортный клиент, а транспортный клиент не поддерживается AWS elasticsearch. AWS elasticsearch поддерживает только HTTP-клиенты. Поэтому я считаю, что лучшим java-клиентом для elasticsearch является JEST. Он также обеспечивает поддержку аутентификации AWS с использованием IAM.