1

Я новичок в эластичных и упругих эластичных материалах. Я искал здесь и в других областях сети, но до сих пор не смог найти ответ на мой вопрос. Я надеюсь, что SO может помочь.Как запросить эластичный материал с эластичным эластичным материалом

Я индексирую некоторые записи из таблицы Users (firstName, lastName), и я ищу, чтобы иметь возможность разрешить расширенный поиск. Так, например, если у меня есть имя «Frances», и я вхожу в «Frank», тогда система достаточно умна, чтобы вернуть запись. То же самое для «Робинсон» и «Robinsen» и т.д.

Я насторить POJO быть следующим:

Public Users { 
    @Field(fieldType = FieldType.String) 
    private String firstName; 

    @Field(fieldType = FieldType.String) 
    private String lastName 

    // mutators 
    ... 

} 

В настоящее время я использую пружинные данные упругих ElasticRepository сделать свой поиск, который, я полагаю, вероятно, придется изменить, если я собираюсь разрешить расширенный поиск. Один из вариантов заключается в использовании EntityManager или Template непосредственно в UserService, однако я не уверен, как это сделать.

Как я описал проблему, это проблема индексирования или проблема поиска или, возможно, и то, и другое? Я не ищу никого, кто мог бы выполнить эту работу, просто чтобы указать мне в правильном направлении.

Спасибо!

+0

Вы видели http://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.query-methods? Кстати, EntityManager представляет собой концепцию JPA, а не elasticearch, поэтому нет смысла искать в этом направлении. – GPI

+0

Вы правы, это концепция JPA, поэтому она не подходит здесь. Я прочитал документацию, к которой вы привязались, но я до сих пор не знаю, как ее настроить, чтобы допускать нечеткую логику. Это вопрос с вопросом? Проблема индексирования? Нужно ли мне изменить свой домен? – Dan

+0

Быстрый поиск не дает возможности автоматического генерации запросов * нечеткого * из имени метода, но вы всегда можете прибегнуть к [критериям] (http://docs.spring.io/spring-data/elasticsearch/docs /current/api/org/springframework/data/elasticsearch/core/query/Criteria.html#fuzzy-java.lang.String-) одно или [написано вручную] (http://docs.spring.io/spring-data /elasticsearch/docs/current/reference/html/#elasticsearch.query-methods.at-query). – GPI

ответ

3

Во-первых, там не поддерживается для автоматической генерации нечетких запросов, насколько documentation tells

Таким образом, мы должны использовать пользовательские хранилища методы дополнения.

Произнесите база хранилище

@Repository 
public interface UserRepository extends CrudRepository<UserEntity, Long> 

Вы должны будете создать интерфейс пользовательского хранилища, чтобы добавить вам пользовательский метод (все это standard Spring data, ничего особенного)

public interface UserRepositoryCustom { 
    public List<User> findFuzzyByLastNameAndFirstName(String firstName, String lastName); 
} 

И сделать свой исторический репо реализует этот интерфейс, то есть:

@Repository 
public interface UserRepository extends CrudRepository<UserEntity, Long>, UserRepositoryCustom 

Теперь вам нужно каким-то образом реализовать свой «пользовательский» интерфейс. Это легко (еще раз обратитесь к руководству, вы должны уважать именование схемы, так что Spring может подключать интерфейсы и реализацию во время выполнения):

public class UserRepositoryCustomImpl implements UserRepositoryCustom { 
    @Autowired protected ElasticsearchTemplate elasticsearchTemplate; 

    public List<User> findFuzzyByLastNameAndFirstName(String firstName, String lastName) { 
     Criteria c = new Criteria("firstName").fuzzy(firstName).and(new Criteria("lastName").fuzzy(lastName)); 
     return elasticsearchTemplate.queryForList(new CriteriaQuery(c), CandidateEntity.class); 
    } 
} 

Recompile, перезапуск, и вы должны быть в состоянии иметь свой репозиторий сделать такой нечеткий поиск.

Затем, опять же (см. Комментарии к комментариям), вы также можете определить запрос как строку, и вам не нужны специальные реализации. Это зависит от вас.