본문 바로가기

Elastic Stack/개념

Search API

Search API

Search API는 간단한 형태의 URI Search 형태도 제공하고, RequestBody작성을 통해서 다양한 옵션을 추가한 RequestBody Search 형태도 제공한다. 또한 index_name의 경우에는 한 개 이상의 인덱스를 지정해서 다수의 인덱스에 동시 쿼리를 날릴 수도 있다. 만약 모든 인덱스에 쿼리를 날린다면 _all이라는 형태의 API로 날릴 수도 있다.

URI Search를 이용한 검색 결과

Search API를 통해 country 필드에 South라는 단어가 들어 있는 문서에 대한 검색을 요청했고 그 결과가 검색되었음을 확인 할 수 있다. 

RequestBody Search 형태

RequestBody의 대표적인 옵션들

옵션 내용
query 실제 검색을 위한 쿼리문을 지정
from/size 검색 결과를 n개의 단위로 나눠서 볼 때 사용
sort 검색 결과를 _score가 아닌 별도의 필드를 기준으로 정렬
source 검색 결과 중 특정 필드의 내용만을 보고자 할 때 사용
highlighting 검색 결과 중 검색어와 매칭하는 부분을 강조하기 위해 사용
boost 검색 결과로 나온 스코어를 변경할 때 사용
scroll 검색 결과를 n개의 단위로 나눠서 볼 때 사용. from/size와 유사하지만  scroll id를 통해서 다음번 검색 결과를 가져올 수 있다

- from/size

from/size를 활용한 검색

결과를 보면 검색 결과는 205개지만, size 옵션을 2로 설정해 놓아서 0번부터 2개까지만 검색 결과가 내려오는 것을 확인할 수 있다. 

 

- sort

sort 옵션을 활용한 검색

보통 검색결과는 검색어를 바탕으로 계산된 score가 가장 높은 문서를 기준으로 정렬되지만, sort 옵션을 사용할 경우 해당 필드를 기준으로 오름차순 또는 내림차순으로 정렬된다. (asc: 오름차순, desc: 내림차순)

 

- _source

source 옵션을 활용한 검색

결과를 보면 source 옵션으로 지정한 country와 lat만 검색 결과에 포함된 것을 볼 수 있다. 위의 결과는 country 필드에 South라는 단어가 포함되어있고 그 중에서 country, lat 필드만 출력하는 것이다.

 

- highlighting

highlighting 옵션을 활용한 검색

위의 결과처럼 사용자가 입력한 검색어를 강조해준다. highlighting 옵션은 검색 결과 중 어떤 필드에 highlighting 효과를 줄 것인지 설정할 수 있다. 그리고 검색 결과의 _source필드가 아닌 별도의 highlight 필드를 통해서 결과가 제공된다.

 

- boost

boost 옵션을 활용한 검색

검색 결과로 나온 스코어를 변경할 때 사용한다. 특정 검색 쿼리의 스코어를 높이거나 낮추고 싶을 때 boost 옵션을 활용하면 검색 결과로 나온 스코어를 대상으로 boost 옵션에 설정된 값을 곱한 값이 스코어로 지정된다.

 

- scroll

scroll api를 통한 예제

scroll 옵션을 사용하면 scroll_id라는 항목이 추가로 내려온다. 그 후의 검색 결과는 별도의 쿼리 없이 scroll_id만으로 다음 검색 결과를 볼 수 있음을 알 수 있다. scroll은 이렇게 scroll_id를 이용해서 다음번 검색 결과를 받아올 수 있기 때문에 쿼리를 다시 날려야 하는 from/size보다 더 편하게 pagination을 구현할 수 있다. 특히 scroll 옵션은 대규모의 batch 처리에 주로 사용된다.

 

참고문헌: 기초부터 다지는 ElasticSearch 운영 노하우

http://www.yes24.com/Product/Goods/96520155

'Elastic Stack > 개념' 카테고리의 다른 글

Filter Context  (0) 2023.04.27
Query Context  (0) 2023.04.27
Query DSL  (0) 2023.04.27
analyzer  (0) 2023.04.26
inverted index  (2) 2023.04.26