엘라스틱서치는 인덱스에 저장된 문서를 검색할 수 있도록 다양한 검색 기능을 제공한다.
문서는 색인 시 설정한 분석기에 의해 분석 과정을 거쳐 토큰으로 분리되는데, 이러한 분석기는 색인 시점에 사용할 수도 있지만 검색 시점에서 사용하는 것도 가능하다.
특정 문장이 검색어로 요청되면 분석기를 통해 분석된 토큰의 일치 여부를 판단해서 그 결과에 점수를 매긴다.
검색 대상이 되는 필드는 분석이 되는 Text 타입의 유형이 될 수도 있고, 분석이 되지 않는 Keywork 타입의 유형이 될 수도 있다. 엘라스틱서치에서는 다양한 검색 조건을 충족시키기 위해 Query DSL이라는 특수한 쿼리 문법을 제공한다.
uri로 검색어를 보내는 방법과 request Body로 검색하는 방법이 있다.
elastic search에서는 JSON 형태의 표현을 좀 더 효율적으로 하기 위해 Query DSL이라는 문법을 제공한다.
Quey DSL 쿼리와 필터로 나누어지는데 쿼리 컨텍스트는 전문 검색 시 사용하고, 필터 컨텍스트는 조건 검색 시 사용한다.
쿼리 컨텍스트 ex. "harry potter" 같은 문장 분석
필터 컨텍스트 ex. "create_year" 필드의 값이 2018년인지 여부, "status" 필드에 'use'라는 코드 포함 여부
Query DSL의 주요 쿼리
1. Match All Query
색인에 모든 문서를 검색하는 쿼리이다. 색인에 저장된 문서를 확인할 때 사용된다.
POST movie_search/_search
{
"query":{
"match_all":{}
}
}
2. Match Query
텍스트, 숫자, 날짜 등이 포함된 문장을 형태소 분석을 통해 텀으로 분리한 후 이 텀들을 이용해 검색 질의를 수행한다.
POST movie_search/_search
{
"query": {
"match": {
"movieNm" : "그대 장미"
}
}
}
-> "그대", "장미" 라는 2개의 텀으로 분리하여 OR 연산을 이용해 검색을 수행한다.
3. Multi Match Query
단일 필드가 아닌 여러개의 필드를 대상으로 검색해야할 때 사용하는 쿼리이다.
POST movie_search/_search
{
"query" : {
"multi_match" : {
"query": "가족",
"fields": ["movieNm","movieNmEn"]
}
}
}
4. Term Query
텍스트 형태의 값을 검색하기 위해 엘라스틱 서치는 두가지 매핑 유형을 지원한다.
Term query는 별도의 분석 작업을 수행하지 않고 입력된 텍스트가 존재하는 문서를 찾는다. 따라서 Keyword 데이터 타입을 사용하는 필드를 검색하려면 Term Query를 사용해야한다.
(일반적으로 숫자, keyword, 날짜, 데이터를 쿼리하는데 사용한다.)
POST movie_search/_search
{
"query" : {
"term" : {
"genreAlt" : " 코미디 "
}
}
}
-> 하나의 텀으로 처리하기 때문에 필드에 텀이 존재하지 않는 경우 검색이 되지 않는다.
4. Bool Query
엘라스틱 서치에서 하나의 쿼리나 여러개의 쿼리를 조합해서 더 높은 스코어를 가진 쿼리 조건으로 검색을 수행할 수 있다. 이러한 유형의 쿼리를 Compound Query라고 하는데, 이러한 것을 구현하기 위해서 엘라스틱서치에서는 Bool Query를 제공한다.
문법적으로 4가지의 속성을 적용할 수 있다.
{
"query" : {
"bool" : {
"must" : []
"must_not" : [],
"should" : [],
"filter" : []
}
}
}
must, must_not, should, filter가 있다.
must는 SQL에서 AND 칼럼 = 조건 과 유사한 기능을 한다. (반드시 조건에 만족하는 문서만 검색된다.)
must_not은 AND 칼럼 != 조건 과 유사한 기능을 한다. (조건을 만족하지 않는 문서가 검색된다.)
should는 OR 칼럼 = 조건 과 유사한 기능을 한다. (여러 조건 중 하나 이상을 만족하는 문서가 검색된다.)
filter는 칼럼 IN (조건) 과 유사한 기능을 한다. (조건을 포함하고 있는 문서를 출력한다. 해당 파라미터를 사용하면 스코어별로 정렬되지는 않는다.)
참고) 엘라스틱 서치 실무 가이드
'Backend Study > ELK Stack' 카테고리의 다른 글
[Elastic Search] 기본 개념잡기 (0) | 2023.04.20 |
---|---|
[Elastic Search] 동의어사전 (0) | 2023.03.08 |
[Elastic Search] 데이터 모델링 (0) | 2023.02.17 |
[ElasticSearch] Rdbms와 ElasticSearch 연동하기 (0) | 2023.02.14 |
[ElasticSearch] 기본 개념 (0) | 2023.01.29 |