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;
}
당신이 대신 자바를 통해 (컬 또는 웹 기반 UI의 일종) elasticsearch에 직접 쿼리를 실행 시도가 ? 보통 그것은 나를 돕는 것입니다 – sfat
@sfat에 동의합니다. 직접 탄성 검색 쿼리를 사용해보십시오. 다음은 특정 조건에 따라 값을 검색하는 쿼리입니다. – Sree
다음은 예제 쿼리입니다. { "constant_score": { "filter": { "bool": { "should": [{ "term": { "employee": foo "}}}} }}}. method -> post, url -> http : // localhost : 9200///_search. –
Sree