Arhn - архитектура программирования

Spring data Вложенный поиск Elasticsearch - jhipster

Я использую генератор проектов Jhipster для создания базового приложения CRUD. Приложение имеет функцию поиска с использованием org.spingframework.data.elasticsearch. У меня есть домен клиента и адресный домен, как показано ниже.

/**
 * A Customer.
 */
@Entity
@Table(name = "CUSTOMER")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Document(indexName="customer")
public class Customer implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "forename")
    private String forename;

    @Column(name = "surname")
    private String surname;

    @ManyToOne
    @Field(type = FieldType.Nested)
    private Address address;
}

/**
 * An Address.
 */
@Entity
@Table(name = "ADDRESS")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Document(indexName="address")
public class Address implements Serializable {



 @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Min(value = 1)
    @Max(value = 9999)        
    @Column(name = "number")
    private Long number;

    @NotNull
    @Size(min = 5, max = 50)        
    @Column(name = "line1", length = 50, nullable = false)
    private String line1;

    @Size(min = 5, max = 50)        
    @Column(name = "line2", length = 50)
    private String line2;

    @NotNull
    @Size(min = 2, max = 50)        
    @Column(name = "city", length = 50, nullable = false)
    private String city;

    @Size(min = 2, max = 50)        
    @Column(name = "county", length = 50)
    private String county;

    @Size(min = 2, max = 50)        
    @Column(name = "country", length = 50)
    private String country;

    @NotNull
    @Size(min = 7, max = 8)        
    @Column(name = "postcode", length = 8, nullable = false)
    private String postcode;

}

У каждого клиента есть адрес. У меня есть сопоставление «многие к одному», поэтому у каждого адреса может быть много клиентов.

Теперь в моем ресурсе у меня есть следующий поисковый запрос.

/**
     * SEARCH  /_search/customers/:query -> search for the customer corresponding
     * to the query.
     */
    @RequestMapping(value = "/_search/customers/{query}",
        method = RequestMethod.GET,
        produces = MediaType.APPLICATION_JSON_VALUE)
    @Timed
    public List<Customer> searchCustomers(@PathVariable String query) {
        return StreamSupport
            .stream(customerSearchRepository.search(queryString(query)).spliterator(), false)
            .collect(Collectors.toList());
    }

В настоящее время это вернет список клиентов на основе любых критериев, которые я ввожу, так же, как с помощью поисковой системы. Однако поиск не будет соответствовать полю адреса в домене клиента. В идеале я хотел бы найти определенную фамилию клиента по определенному почтовому индексу, однако в настоящее время он будет соответствовать только полям клиента, которые не являются адресом. Если я изменю поисковый запрос, чтобы использовать findByPostcode или что-то в этом роде, я потеряю возможность поиска по имени/данным клиента.

Проще говоря, как я могу выполнять поиск по полям сведений о клиенте и полям адреса клиента без денормализации моей базы данных?


Ответы:


1

Аннотация документа по адресу не требуется, я имею в виду:

`@ManyToOne
 @Field(type = FieldType.Nested)
 private Address address;`

должно было:

`@ManyToOne
 private Address address;`
19.11.2015
  • Спасибо за предложение. Я создал новый тестовый проект, чтобы вернуться к этой проблеме, и он работает так, как я хотел. Не уверен, что это потому, что на этот раз я не использую DTO. 20.11.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..