본문 바로가기

Computer/Study

엘라스틱서치 실무가이드(4-1)

4] 데이터 검색

: 특정 문장이 검색어로 요청되면 분석기를 통해 분석된 토큰의 일치 여부를 판단해서 그 결과에 대한 Score를 매긴다.

 

4.1] 검색 API

: 문장은 색인 시점에 Term을로 분해 됨 > 검색시에는 이 텀을 일치 시켜야 검색이 가능해짐.

: Term레벨의 쿼리 flow

: match의 쿼리 flow

> 검색시점에도 match, term 에 따라 인덱스를 분석후 문서번호를 찾는다.

 

4.1.1]검색 질의 표현 방식

: 엘라스틱서치에서 제공하는 API는 기본적으로 Query를 기반으로 동작

  • URI 검색 > HTTP GET 요청을 활용하여 표현의 한계(간단한 쿼리만 작성)
  • Requset Body검색 > JSON 형식으로 Body에 쿼리를 입력하여 작성

> uri 검색 이용시 자주 사용되는 파라미터로 & 추가로 검색 요청 할 수 있다.

 

4.2] Query DSL 이해하기

: 여러개의 쿼리를 조합하거나 결과에대해 재 검색이 쉬워짐.

 

4.2.1]Query DSL 쿼리의 구조

: 미리 정의된 문법에 따라 JSON구조를 작성

{

  "size":       // 리턴받는 결과의 개수

  "from" :    // 몇번째 문서부터 가져올지 지정

  "timeout": // 시간제한....

  "_source": // 검색시 필요한 필드만 출력하고 싶을시 사용.

  "query":   //검색조건문

  "aggs":    //집계 조건

  "sort":     //어떻게 출력할지

}

 

4.2.2] Query DSL 쿼리와 필터

  • 쿼리 컨텍스트 : 전문검색 시(상대적으로 느림) > 문서가 쿼리와 얼마나 유사한지, 루씬 이용, 캐싱 X, 디스크 연산을 수행
  • 필터 컨텍스트 : 조건 검색 시 사용 >문서가 일치하는지 여부(Y/N), 단순 매칭여부, 내부적으로 캐싱, 메모리 연산으로 상대적으로 빠름

> 필터가 상대적으로 유사도를 평가하지 않아 성능이 좋으며 캐시도 지원

> 필터의 캐시원리

: 필터 전용의 역색인표라고 할 수 있으며 역색인표의 일부를 뽑아낸 것과 비슷한 모양으로 비트벡터 형태로 저장해 둔다.

 

4.2.3] Query DSL의 주요 파라미터

  • Multi Index : 기본적으로 multi Index 밑 Multi Type 검색이 가능하여 요청시 ','으로 검색할 인덱스를 표시해주며 , "*"를 와일드카드로 사용가능하다.
  • 쿼리 결과 페이징 : from, page를 통해서 페이징이 가능하다. 문서의 번호인 from을 조정해 주면 된다.
  • 쿼리 결과 정렬 : sort 파라미터를 통해 특정 필드를 기준으로 재정렬 할 수 있다.
  • _soruce 필드 필터링 : 검색결과에 포함시키고 싶은 필드를 지정할 수있다.
  • 범위검색  : Range 기반으로 <, >, <=, >= 제공
  • operator 설정 : 기본적으로 OR 연산이나 AND 연산을 명시 가능
  • minimum_should_match 설정 : OR을 AND처럼쓸 수있는 건데(쿼리의 term 개수만큼 설정)...최소 term 매치 갯수를 설정하는 것
  • fuzziness : 유사한 검색 결과(허용범위내).. 어느정도 오타 처리.
  • boost : 관련성 높은 필드나 키워드에 가중치 부여

4.3]Query DSL의 주요 쿼리

4.3.1] Match All Query

> 색인에 모든 문서를 검색하는 쿼리

 

4.3.2] Match Query

> 조건에 맞춰 전문 검색을 수행.

 

4.3.3] Multi Match Query

> 여러 필드를 대상으로 검색시 사용

 

4.3.4] Term Query

> Text데이터 타입, Keyword 데이터 타입

> 별도의 분석 작업을 수행하지 않고 입력된 텍스트가 존재하는 문서를 찾음.

 

4.3.5] Bool Query

> 논리적으로 일치하는 문서를 복합적으로 검색

  • must : 반드시 조건에 만족하는 문서
  • must_not : 반드시조건에 만족하지 않는 문서
  • should : 여러 조건 중 하나 이상을 만족하는 문서
  • filter : 조건을포함하고 있는 문서

4.3.6] Query String

> 기본적으로 내장된 쿼리분석기를 사용

 

4.3.7] Prefix Query

> Prefix 비교

 

4.3.8] Exists Query

> 값이 존재하는 문서 찾는 쿼리

 

4.3.9] Wildcard Query

> * : 문자 길이 상관 없이 와일드카 일치하는 문서

> ? : 한글자 다른 문서