Your browser does not support JavaScript!

엘라스틱서치 검색 쿼리의 이해와 응용

일일 보고서 2024년 07월 11일
goover

목차

  1. 요약
  2. 엘라스틱서치 쿼리 DSL 기초
  3. 검색엔진으로서의 엘라스틱서치
  4. match와 term 쿼리 비교
  5. 결론

1. 요약

  • 본 리포트는 엘라스틱서치 검색 쿼리의 기초와 응용 지식을 포함하여, 엘라스틱서치를 검색엔진으로서 활용하는 방법을 다룹니다. 엘라스틱서치의 쿼리 DSL 기초부터 match와 term 쿼리의 차이점까지 다양한 주제를 포함하고 있습니다. 중요한 검색 옵션으로는 필드 선택, 페이지네이션, 정렬, 하이라이팅, 필터링, bool 쿼리, match_phrase 쿼리, dis_max 쿼리 등이 소개되었습니다. 또한, 엘라스틱서치의 기능을 Apache Lucene 기반의 텍스트 분석, ELK 스택의 구성 요소로서의 역할, 역 인덱스 구조, RESTful API 지원 등에 대해 설명합니다. 마지막으로, match 쿼리와 term 쿼리의 차이와 각 쿼리의 사용 사례에 대해 논의하였습니다.

2. 엘라스틱서치 쿼리 DSL 기초

  • 2-1. 기본 쿼리 (match_all, match)

  • 엘라스틱서치의 쿼리 DSL은 HTTP 요청 메시지 본문에 JSON 문서로 삽입됩니다. 모든 문서와 매치하는 match_all 쿼리와 특정 필드의 값과 매치하는 match 쿼리가 있습니다.

  • 2-2. 필드 선택

  • 검색된 문서의 모든 필드를 기본으로 출력하지만, fields 옵션을 사용하면 특정 필드만 선택해서 받아올 수 있습니다.

  • 2-3. 페이지네이션

  • from과 size 옵션을 사용하여 검색 결과를 분할할 수 있습니다. 예를 들어, from: 10, size: 5로 설정하면 10번째 문서부터 5개의 문서를 가져옵니다.

  • 2-4. 정렬

  • sort 옵션을 사용하면 검색 결과를 특정 필드 기준으로 정렬할 수 있습니다. 예를 들어, 작성자 오름차순, 작성일 내림차순으로 정렬할 수 있습니다.

  • 2-5. 하이라이팅

  • highlight 옵션으로 매치된 텀을 강조할 수 있습니다. pre_tags와 post_tags 옵션을 사용하면 강조 방식을 변경할 수도 있습니다.

  • 2-6. 필터링

  • 쿼리와 필터는 문서를 선택하는 데 비슷한 역할을 하며 필터는 문서를 조건에 따라 참/거짓으로 평가하고, 캐시도 지원합니다.

  • 2-7. bool 쿼리

  • bool 쿼리는 must, should, must_not 옵션을 사용하여 여러 조건을 논리 연산으로 결합하여 사용할 수 있습니다. 필터와 달리 연관성 점수도 매깁니다.

  • 2-8. term 쿼리

  • term 쿼리는 필터와 비슷하게 동작하지만, 연관성 점수를 매깁니다. 필드 값이 정확하게 일치할 때만 매치됩니다.

  • 2-9. match_phrase 쿼리

  • match_phrase 쿼리는 특정 구문을 정확히 검색하는 데 사용됩니다. slop 옵션으로 단어의 위치 도치 범위를 조절할 수 있습니다.

  • 2-10. explain 옵션

  • explain 옵션을 사용하면 검색 결과에 대한 점수 계산 방식을 설명하는 추가 정보를 얻을 수 있습니다.

  • 2-11. fuzziness 옵션

  • fuzziness 옵션을 사용하면 검색어와 필드 값이 약간 차이가 나더라도 매치될 수 있도록 설정할 수 있습니다. 예를 들어, '박연오' 대신 '박연차'로 검색이 가능합니다.

  • 2-12. dis_max 쿼리

  • dis_max 쿼리는 여러 필드에서 매치되는 문서 중 가장 유사한 문서에 높은 점수를 부여합니다. tie_breaker 옵션을 사용하여 가산점 비율을 조정할 수 있습니다.

  • 2-13. multi_match 쿼리

  • multi_match 쿼리는 여러 필드를 동시에 검색할 때 사용됩니다. type 옵션을 사용하여 다양한 다중 필드 검색 방식을 정할 수 있습니다.

  • 2-14. 스코어링을 위한 boost 옵션 조정

  • boost 옵션을 사용하면 특정 필드에 더 높은 가산점을 부여할 수 있습니다. 예를 들어, 제목에 특정 키워드가 포함된 문서에 가산점을 부여할 수 있습니다.

3. 검색엔진으로서의 엘라스틱서치

  • 3-1. 엘라스틱서치 개요

  • 엘라스틱서치는 아파치 루씬을 기반으로 한 검색 및 분석 엔진으로, 다양한 유형의 데이터를 처리할 수 있습니다. 이 도구는 텍스트, 숫자, 위치 기반 정보, 정형 및 비정형 데이터를 위한 무료 검색 및 분석 기능을 제공합니다.

  • 3-2. Apache Lucene 기반

  • 엘라스틱서치는 Apache Lucene을 기반으로 합니다. Lucene은 텍스트 검색을 위한 도서관으로, 엘라스틱서치의 강력한 검색 기능의 기초가 됩니다.

  • 3-3. 텍스트 분석에 특화된 기능

  • 엘라스틱서치는 텍스트 분석에 특화된 기능을 제공하여, 동의어 및 유의어 검색, 형태소 분석 등을 지원합니다. 이를 통해 다양한 텍스트 형태의 데이터를 효율적으로 검색할 수 있습니다.

  • 3-4. ELK 스택 구성 요소로서의 역할

  • 엘라스틱서치는 ELK 스택(Elasticsearch, Logstash, Kibana)의 핵심 구성 요소 중 하나로, 데이터의 분석과 저장을 담당합니다. 이를 통해 데이터를 수집, 보강, 저장, 분석, 시각화할 수 있습니다.

  • 3-5. 전문 검색 지원

  • 엘라스틱서치는 전문 검색(Full Text Search)을 지원합니다. 이는 문서 전체를 색인해 특정 단어가 포함된 문서를 빠르게 검색할 수 있게 합니다.

  • 3-6. 스키마리스 데이터 분석

  • 엘라스틱서치는 스키마리스 구조를 지니고 있어, 미리 정의된 스키마 없이도 데이터를 분석하여 필드를 생성하고 저장할 수 있습니다.

  • 3-7. RESTful API 지원

  • 엘라스틱서치는 RESTful API를 지원함으로써 GET, POST, DELETE 등의 요청을 통해 데이터를 쉽게 CRUD(Create, Read, Update, Delete)할 수 있습니다.

  • 3-8. 역 인덱스 구조를 통한 효율적인 검색

  • 엘라스틱서치는 역 인덱스 구조(Inverted Index)를 통해 효율적인 검색을 수행합니다. 이는 색인된 데이터에 대한 링크를 제공해 문서 검색을 빠르고 정확하게 합니다.

  • 3-9. 분석기, 토크나이저, 토큰 필터의 이해

  • 엘라스틱서치는 형태소 분석을 위해 분석기(Analyzer), 토크나이저(Tokenizer), 토큰 필터(Token Filter)를 사용합니다. 분석기는 텍스트를 분할하고, 토크나이저는 이를 특정 단위로 쪼개며, 토큰 필터는 특정 규칙을 적용해 데이터를 처리합니다.

  • 3-10. 효과적인 데이터 검색을 위한 토크나이저 선택

  • 적절한 토크나이저를 선택하는 것은 효과적인 데이터 검색에 중요합니다. 예를 들어, 이메일과 URL을 처리하기 위한 토크나이저, 특수 문자를 구분하는 토크나이저 등이 있으며, 각 상황에 맞는 토크나이저를 선택해야 합니다.

4. match와 term 쿼리 비교

  • 4-1. match 쿼리 설명

  • match 쿼리는 지정한 필드가 질의어와 매치되는 문서를 찾는 쿼리입니다. 중요한 것은, 만약 지정한 필드에 analyzer가 존재하거나 search_analyzer가 지정되어 있다면 질의어 또한 analyzing 과정을 거칩니다. 예를 들어, 'this is something'이라는 텍스트는 'this', 'is', 'something'이라는 3개의 텀으로 분리되어 역색인 검색이 수행됩니다. 또한, match 쿼리는 기본적으로 OR로 동작하며, 이를 operator 필드를 통해 AND로 수정할 수도 있습니다.

  • 4-2. term 쿼리 설명

  • term 쿼리는 지정한 필드가 질의어와 정확히 일치하는 문서를 찾는 쿼리입니다. analyzer 처리 과정을 거치지 않으며, 질의어와 정확히 일치하는 값을 찾는 데 사용됩니다. 따라서 keyword 필드에 검색을 수행할 때 주로 사용되며, normalizer가 적용되어 있다면 질의어도 동일하게 normalizer 처리 과정을 거칩니다.

  • 4-3. 쿼리 동작 차이점

  • match 쿼리는 analyzer를 통해 질의어를 여러 텀으로 분리하여 검색을 수행하며, 기본적인 동작 방식이 OR 입니다. 반면 term 쿼리는 질의어의 원본 형태 그대로 검색을 수행하며 정확히 일치하는 값을 찾습니다. 이러한 차이로 인해 match 쿼리는 주로 text 필드에, term 쿼리는 keyword 필드에 주로 사용됩니다.

  • 4-4. 검색 결과에 미치는 영향

  • match 쿼리는 텍스트 분석을 거쳐 여러 단어로 분리된 형태로 검색을 수행하는 반면, term 쿼리는 정확한 일치 검색을 수행하므로, match 쿼리가 보다 포괄적인 검색 결과를 제공할 수 있습니다. 그러나 term 쿼리는 정확한 일치 검색이 필요한 경우에 유용합니다.

  • 4-5. 텍스트와 키워드 필드에 대한 쿼리 처리 방식

  • text 필드는 분석기를 통해 분석된 텍스트를 여러 텀으로 저장하며, 이를 활용해 match 쿼리로 검색합니다. 반면, keyword 필드는 분석 과정을 거치지 않은 하나의 텀으로 저장되므로 term 쿼리를 활용해 정확히 일치하는 결과를 검색합니다.

  • 4-6. 올바른 쿼리 설계를 통한 원하는 검색 결과 달성

  • match 쿼리와 term 쿼리의 동작 원리를 정확히 이해하고, 각 필드의 특성에 맞는 쿼리를 설계하는 것이 중요합니다. 이를 통해 보다 정확하고 효과적인 검색 결과를 달성할 수 있습니다.

5. 결론

  • 본 리포트는 엘라스틱서치의 쿼리 DSL과 그 기초적 및 응용적 측면을 폭넓게 이해할 수 있는 소중한 자료입니다. 엘라스틱서치의 강력한 분석 기능과 Apache Lucene 기반의 텍스트 분석 엔진 덕분에 사용자는 다양한 유형의 데이터를 효율적으로 검색할 수 있습니다. match 쿼리와 term 쿼리의 차이를 확실히 이해하는 것은 텍스트 및 키워드 필드에서 정확한 검색을 수행하는 데 중요한 역할을 합니다. 이 리포트는 엘라스틱서치를 사용하여 실제 데이터 분석 및 검색 작업을 수행하는 데 있어 중요한 기초 자료로 활용될 수 있습니다. 다만, 리포트가 다루지 않은 최신 기능이나 고급 설정에 대한 추가 연구가 필요할 수 있습니다. 엘라스틱서치의 다양한 응용 분야가 계속 발전함에 따라 새로운 기능과 옵션을 습득하여 데이터 검색의 효율성을 극대화하는 것이 중요합니다.

6. 용어집

  • 6-1. 엘라스틱서치 [기술]

  • 엘라스틱서치는 Apache Lucene 기반의 검색 및 분석 엔진으로, 텍스트 분석에 특화되어 있습니다. 이를 통해 효율적인 전문 검색 기능을 제공하며, ELK 스택의 주요 구성 요소로 분석 및 저장 역할을 수행합니다.

  • 6-2. 쿼리 DSL [전문용어]

  • 쿼리 DSL은 엘라스틱서치에서 검색 및 필터링 작업을 수행하기 위해 사용되는 도메인 특화 언어입니다. 다양한 쿼리 타입과 옵션을 제공하여 복잡한 검색 요구를 충족시킬 수 있습니다.

  • 6-3. match 쿼리 [전문용어]

  • match 쿼리는 검색어를 분석하여 분리된 토큰 단위로 매칭하는 쿼리 방식입니다. 텍스트 필드에 대한 일반적인 검색에 자주 사용됩니다.

  • 6-4. term 쿼리 [전문용어]

  • term 쿼리는 검색어를 분석하지 않고 정확히 일치하는 값을 찾는 쿼리 방식입니다. 키워드 필드와 같은 정밀한 검색에 유용합니다.

  • 6-5. ELK 스택 [제품]

  • ELK 스택은 Elasticsearch, Logstash, Kibana의 세 가지 오픈 소스 프로젝트를 포함한 소프트웨어 스택으로, 로그 및 이벤트 데이터를 수집, 분석, 시각화하는 데 사용됩니다.

  • 6-6. Apache Lucene [기술]

  • Apache Lucene은 고성능, 가용성 있는 텍스트 검색 엔진 라이브러리로, 엘라스틱서치의 기본 검색 기능을 제공하는 핵심 기술입니다.

7. 출처 문서