2017-12-03 12 views
0

ElasticSearch를 처음 사용했습니다. UserStatus를 나타내는 사용자 클래스에 문자열 필드가 있으므로 특정 상태의 모든 사용자를 검색해야합니다. 관계형 DB에서는 정확하게 "where in .."입니다."where .."Java API가있는 analog elasticsearch

다른 조합으로 termsQuery을 사용하여 예제를 보았지만 작동시키지 못했습니다 (아무 것도 반환하지 않았습니다).

그래서 문제는 전체 예제 또는 그런 문제에 직면 한 링크가 있습니까? 도움이 필요합니다.

// 엔티티 자체

@AllArgsConstructor 
    @NoArgsConstructor 
    @Data 
    @Builder 
    @Document(indexName = "users", type = "user") 
    public class User { 

     @Id 
     private String id; 

     private String userStatus; 
     private String firstName; 
     private String lastName; 
     private Date dateCreated; 
    } 

// 스프링 서비스 방법

@Override 
public List<User> findByParams(UserSearchRequest userSearchRequest) { 

    TermsQueryBuilder termsQueryBuilder = QueryBuilders 
      .termsQuery("userStatus", userSearchRequest.getUserStatuses()); 


    SearchQuery searchQuery = new NativeSearchQueryBuilder() 
      .withQuery(boolQuery().must(termsQueryBuilder)) 
      .withPageable(new PageRequest(0, 100)) 
      .build(); 


    return Lists.newArrayList(userRepository.search(searchQuery)); 

} 

// REST 요청 객체

@AllArgsConstructor 
@NoArgsConstructor 
@Data 
public class UserSearchRequest { 
    private List<String> userStatuses; 
} 
+1

당신이 대신 자바를 통해 (컬 또는 웹 기반 UI의 일종) elasticsearch에 직접 쿼리를 실행 시도가 ? 보통 그것은 나를 돕는 것입니다 – sfat

+0

@sfat에 동의합니다. 직접 탄성 검색 쿼리를 사용해보십시오. 다음은 특정 조건에 따라 값을 검색하는 쿼리입니다. – Sree

+0

다음은 예제 쿼리입니다. { "constant_score": { "filter": { "bool": { "should": [{ "term": { "employee": foo "}}}} }}}. method -> post, url -> http : // localhost : 9200///_search. – Sree

답변

0

Elasticsearch의 설명서를 확인 "Finding Multiple Exact Values"

에 대한

기본적으로 검색어 검색을 지속적인 점수 쿼리로 묶어야합니다.

Elasticsearch의 문서에서

GET /my_store/products/_search 
{ 
    "query" : { 
     "constant_score" : { 
      "filter" : { 
       "terms" : { 
        "price" : [20, 30] 
       } 
      } 
     } 
    } 
} 

이 예에서는 가격이 제품을 검색 말한다 (후세를 위해 유지) 중 20 (30)은

당신이 원하는 것은이 모든 사용자를 검색하다 userStatus로 전달하는 값 중 하나를 List으로 전달하십시오.

이 같은에서 NativeSearchQueryBuilder을 변경해야 구현의 측면에서

:

SearchQuery searchQuery = new NativeSearchQueryBuilder() 
       .withQuery(constantScoreQuery(termsQueryBuilder)) 
       .withPageable(new PageRequest(0, 100)) 
       .build();