본문 바로가기

Programming!

spring solr criteria query만들기

Repository에 일반적인 방식으로 @Query를 사용해서 다음과 같이 Solr에 질의를 한다고 해보자 

   @Query(

            filters = {"docType:region"},

            value = "(regionNameLong:?0 OR regionNameLongKr:?0) AND (regionType:?1)")

    Page<OutboundRegion> findByRegionNameAndRegionType(String regionName, String regionType, Pageable page);


그런데 공백구분이나 뭐 여튼 이런 저런 이유로 동적쿼리를 사용해야 하는 상황이 온다고 쳐보자.


그러면 멋지게 쓴다고 Criteria로 하나하나 and,or를 쓰기보다는 그냥 SimpleStringCriteria를 사용해서 처리하는게 좋다.

(아! 개인적인 생각이구요..)


코드는 다음과 같다.

....

String qeuryString = String.format("(regionNameLong:%s OR regionNameLongKr:%s) AND (regionType:%s)", regionName, regionName, regionType)

SimpleQuery simpleQuery = new SimpleQuery(new SimpleStringCriteria(qeuryString));

query.addFilterQuery(new SimpleQuery(new Criteria("docType").expression("region")));


... RepositoryCustom ...

Query query = simpleQuery.setPageRequest(page);

return solrTemplate.queryForPage(query, Xxxxxx.class);

...



주로 @Query를 쓰기는 하지만 요구사항의 복잡성이 증가하면 criteria 방식이 좋게되더라.