@Document 를 지정후 

interface를 이용해서 쿼리를 하던 중

기본검색은 jpa사용하듯 하면되지만

match를 이용하여 모두 조건이 일치할 떄 데이터가 조회해야되는 이슈가 발생

ex) 화정동 현대, 화정동 힐스, 화정 힐스

모두 만족해야되는 상황이 발생

jpa는 match를 이용하면 elasticsearch에서는 기본 or조건이 걸림

 

[순서]

1- elasticsearch에서 Dev tools를 이용하여 쿼리 작성

GET idx_es_address/_search 
{
  "query": {
     "match": {
        "address": { 
          "query": "화정동 힐스",
          "operator": "and",
          "analyzer": "korean"
        }
      }
  }
}

2 - 작성된 쿼리를 query 부분을 제외함

{
  "match": {
      "title": {
        "query": "화정동 힐스",
        "operator": "and"
      }
    }
}

3 - 제외된 query를 

  - codebeautify.org/jsonminifier 가서 minify시킴

{"match":{"title":{"query":"화정동 힐스","operator":"and"}}}

 

4 -"화정동 힐스" -> ?0 로 변경 <-- 0번째 parameter라는 의미

{"match":{"title":{"query":"?0","operator":"and"}}}

 

5. interface작성<최종>

 @Query("{\"match\":{\"address\":{\"query\":\"?0\",\"operator\":\"and\"}}}")
 List<EsAddressVO> findAllByAddressMatches(String addr, Pageable pageable);

 

반드시 Pageable param을 넣어주는것을 권장

기본 pagesize = 10으로 세팅되어 있음

반응형
블로그 이미지

visualp

c#, java

,