이번 포스트는 elastic search 를 활용하여 api 검색할때 사용되는 query를 정리해보겠습니다. 해당 쿼리를 api body 부분에 넣어서 사용 할 수 있습니다.
1. match_all
이 query는 해당 index의 모든 데이터를 가져 옵니다.
{
"query": {
"match_all": {}
}
}
2. match
- match는 특정 필드에 입력한 검색값이 포함된 데이터를 검색합니다.
- 띄어쓰기로 구분되는 term중 하나라도 겹치는 데이터를 출력합니다.
- 아래의 경우 title필드에 "엘라스틱"이나 "서치"가 포함된 데이터를 출력합니다.
{
"query":{
"match":{
"title":"엘라스틱 서치"
}
}
}
3. term
- 특정 필드에 검색값과 정확히 일치하는 데이터를 검색합니다
- title이 "엘라스틱 서치"인 경우만 반환하고 "엘라스틱 서치 소개"등 과 같은 데이터는 검색되지 않습니다.
{
"query":{
"term":{
"title":"엘라스틱 서치"
}
}
}
4. match_phase
- 필드에 검색어로 입력한 구문이 포함되어 있는 데이터를 검색합니다.
- title에서 "엘라스틱 서치 소개"나 "특강 엘라스틱 서치"등이 검색 됩니다. "엘라스틱 텍스트 서치"와 같이 사이에 다른 단어가 들어가면 검색되지 않습니다.
{
"query":{
"match_phrase":{
"title":"엘라스틱 서치"
}
}
}
5. multi_match
- 검색어를 여러 필드에서 검색합니다.
- title과 contents에서 "엘라스틱 서치"가 match 검색된 데이터가 출력됩니다.
{
"query":{
"multi_match":{
"query":"엘라스틱 서치",
"fields":["title","contents"]
}
}
}
6. range
- 검색 범위를 지정합니다.
- gt - 초과, gte - 이상, lte - 이하, lt - 미만, from - 시작점, to - 끝점
- count가 10~20 사이인 데이터를 출력합니다
{
"query":{
"range":{
"count":{
"gte":10,
"lte":20
}
}
}
}
7. bool 복합쿼리
- 여러 조건의 검색을 진행합니다.
- must, must_not, should, filter 등의 조건들을 사용할 수 있습니다.
- 함께 사용될경우 and연산으로 적용됩니다.
7-1. must, must_not
- 하위 검색에서 만족하거나(must) 만족하지 않는 데이터를 출력합니다.
- title에 "엘라스틱 서치"가 포함되고 "contents"에는 "SQL"이 포함되지 않는 데이터를 검색합니다.
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "엘라스틱 서치"
}
}
],
"must_not": [
{
"match": {
"contents": "SQL"
}
}
]
}
}
}
7-2 should
- 조건에 만족하는 데이터에 더 높은 score를 부여합니다. elastic search 에서는 score가 높에 부여된 데이터를 우선적으로 출력합니다.
- title에 "엘라스틱 서치"가 포함되어있는 데이터를 검색하되. "contents"에 "백엔드"가 포함되어있는 데이터에 더 높은 score를 부여합니다(우선적으로 검색합니다.)
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "엘라스틱 서치"
}
}
],
"must_not": [
{
"match": {
"contents": "백엔드"
}
}
]
}
}
}
7-3 filter
- 검색 결과를 필터링 하는데 사용됩니다.
- bool 복합 쿼리로 여러 조건으로 검색하는것과 비슷한 결과를 보여주지만 filter에 들어있는 조건은 결과 score에 영향을 주지 않습니다.(filter 내의 쿼리가 검색 우선순위에 영향을 주지 않습니다.)
- title에 "엘라스틱 서치"가 포함된 데이터 중에 author가 "challee"인 데이터만 출력합니다.
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "엘라스틱 서치"
}
}
],
"filter": [
{
"bool": {
{
"must":[
{
"match":{
"author":"challee"
}
}
]
}
}
}
]
}
}
}
이상으로 개발하면서 가장 흔하게 사용되는 elastic search query를 정리해 보았습니다. 이 외에도 다양한 queay가 존재하니 elastic 공식 사이트에서 어떤 것들이 있는지 한번 읽어보는 것을 추천 드립니다.
https://esbook.kimjmin.net/05-search
5. 검색과 쿼리 - Query DSL - Elastic 가이드북
인터넷 쇼핑몰에 상품이 100만개가 있을 때 검색창에 "무선 이어폰" 이라고 입력해서 시스템에 있는 전체 100만개의 상품들 중 무선 이어폰과 연관된 상품만 추려내는 과정을 검색이라고 할 수 있
esbook.kimjmin.net
'ElasticSearch' 카테고리의 다른 글
[elastic search] 한글 형태소 분석기(analyzer)설정 및 확인 (0) | 2023.05.25 |
---|