본문 바로가기

Elastic Search

[Elastic Search] Query 스터디-1편 Match, Match Phrase

반응형

인덱스 설명

현재 review 인덱스를 생성하였고, review 인덱스의 필드는 아래와 같이 구성되어 있다.

"mappings": {
    "properties": {
        "prd_id": {
            "type": "text"
        },
        "review_id": {
            "type": "text"
        },
        "review": {
            "type": "text"
        },
        "genders": {
            "type": "rank_features"
        }
    }
}

매칭 쿼리

전문(Full-text query) 쿼리로 Match 키워드를 가지고 검색하는 쿼리이다.

match에서 사용하는 검색어도 토큰화가 되어 검색한다. 저장된 원문 역시 토큰화 되어 저장되어 있어 가능하다.

하나의 용어를 검색하는 쿼리

GET review/_search
{
  "_source": ["review"],
  "query": {
     "match": {
       "review": {
          "query": "오버핏"
        }
     }
  }
}

하나의 용어를 검색하는 쿼리에서 키워드 사이에 공백이 있다면 or로 인식, 토큰화 되어 검색된다.

GET review/_search
{
  "_source": ["review"],
  "query": {
    "match": {
      "review": {
        "query": "오버핏 맨투맨"
      }
    }
  }
}

만약 and 조건으로 검색해야 한다면 아래 처럼 작성하면 된다.

GET review/_search
{
  "_source": ["review"],
  "query": {
    "match": {
      "review": {
        "query": "오버핏 맨투맨",
        "operator": "and"
      }
    }
  }
}

매치 프레이즈 쿼리(Match-Phrase)

구(phrase)를 검색하는 쿼리이다. 즉, 2개 이상의 단어가 연결된 문구를 조회할 때 사용한다.

이는 단어 순서까지 고려하여 결과를 추출한다.

예) 빨간 바지, 바지 빨간색은 검색 의도가 전혀 다를 수 있다.

// 이쁜 맨투맨
GET review/_search
{
  "_source": ["review"],
  "query": {
    "match_phrase": {
      "review": "이쁜 맨투맨"
    }
  }
}

검색 결과

"review" : "이쁜 맨투맨 적당하게 잘 샀네요. 이쁜상품 감사합니다."
"review" : "때에 맞는 맨투맨이네요ㅎㅎㅎ 이쁜 맨투맨 저렴하게 구입하고 가서 좋습니다~~"
//맨투맨 이쁜
GET review/_search
{
  "_source": ["review"],
  "query": {
    "match_phrase": {
      "review": "맨투맨 이쁜"
    }
  }
}

검색 결과

"review" : "파스텔톤 맨투맨 이쁜 비바스튜디오 강추합니다"
"review" : "그냥 진짜 무난한 맨투맨 이쁜 아우터 이너로 입기 적당"

🔥 용어(term) 쿼리를 공부하다보니, 현재 설정했던 필드 타입이 맞지 않았다. 모두 text 타입으로 했기 때문에 텍스트 내 키워드를 개별 검색하는 기능이 동작하지 않았다. 그래서 이번 기회에 nori-filter를 적용하거나 text 내부에 keyword 필드를 적용하는 연습을 해야겠다!

반응형