티스토리 뷰

public List<ElasticVO > searchElastic(Map<String, Object> paramMap) {
        elasticVOcontent = new ElasticVO ();
        List<ElasticVO > contents = new ArrayList<>();
        List<SearchHit> list = null;

        try(RestHighLevelClient client = config.client()) {

            String indexName = "indexName";

            BoolQueryBuilder query = QueryBuilders.boolQuery();

            String searchName= MapUtils.getString(paramMap, "searchName", "");
            String searchKwon = MapUtils.getString(paramMap, "searchKwon", "");
            String searchEmail= MapUtils.getString(paramMap, "searchEmail", "");
            String searchYear= MapUtils.getString(paramMap, "searchYear", "");
            int searchPage = MapUtils.getInteger(paramMap, "searchPage", 0);
            
            if (StringUtils.isNotEmpty(searchName)) {
                query.must(QueryBuilders.termQuery("name.keyword", searchName));
            }

            if (StringUtils.isNotEmpty(searchKwon)) {
                query.must(QueryBuilders.termQuery("kwon.keyword", searchKwon));
            }

            if (StringUtils.isNotEmpty(searchEmail)) {
                query.must(QueryBuilders.termQuery("email.keyword", searchEmail));
            }

            if (StringUtils.isNotEmpty(searchYear)) {
                query.must(QueryBuilders.termQuery("year.keyword", searchYear));
            }

            if (searchPage > 0) {
                query.must(QueryBuilders.matchQuery("page", searchPage));
            }


            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices(indexName);
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

            searchSourceBuilder.query(query);
            searchRequest.source(searchSourceBuilder);
            SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
            SearchHit[] results = response.getHits().getHits();

            list = Arrays.asList(results);
            ElasticVO elasticVO= null;

            for(SearchHit hit : list) {
                String sourceAsString = hit.getSourceAsString();
                if (StringUtils.isNotEmpty(sourceAsString)) {
                    ElasticVO = mapper.readValue(sourceAsString, ElasticVO .class);

                    contents.add(elasticVO);

                }
            }

        } catch(Exception e) {
            e.printStackTrace();
            logger.error(e.getMessage());
        }

        return contents;
    }

 

엘라스틱 서치 컬럼명 뒤에 .keyword가 붙는것은 index 생성할 때 설정할 수 있다

컬럼.keyword로 검색하게 되면 엘라스틱서치에서

형태소분석으로 검색하지 않고 sql에서 like 구문처럼 사용할 수 있다.

'Development > JAVA' 카테고리의 다른 글

[JAVA] Bearer token Authorization  (0) 2021.08.22
[JAVA] URL 한글 인코딩  (0) 2021.08.20
[JAVA] 페이징 pageable example (without jpa)  (0) 2021.08.20
[JAVA] XSS Filter Config  (0) 2021.08.03
Spring Boot security OAuth2 연동  (1) 2021.07.27
댓글
링크
최근에 올라온 글
Total
Today
Yesterday