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 방식이 좋게되더라.