엘라스틱서치는 크게 리프 쿼리 leaf query
와 복합 쿼리 compound query
로 나눌 수 있다.
- leaf query
는 특정 필드에서 용어를 찾는 쿼리로, 매치 match
용어 term
범위 range
쿼리 등이 있다.
- compound query
는 쿼리를 조합해 사용되는 쿼리로, 논리 bool
쿼리 등이 있다.
[ leaf query ]
전문 쿼리 full text query
와 용어 수준 쿼리 term level query
의 차이점
- full text query
는 전문 검색을 하기 위해 사용되며, 전문 검색을 할 필드는 인덱스 매핑 시 텍스트 타입으로 매핑해야 한다.
> 텍스트 타입 필드에서 검색어를 찾을 때 사용한다.
> 분석기가 텍스트를 토큰화해서 전문 검색이 가능하다.
- term level query
는 정확히 일치하는 용어를 찾기 위해 사용되며, 인덱스 매핑 시 필드를 키워드 타입으로 매핑해야 한다.
> 키워드, 숫자형, 범위형 타입의 필드에서 검색어 찾을때 사용한다.
> 정확히 일치하는 도큐먼트를 검색할 때 유용하다.
전문 쿼리 full text query
1. 매치 쿼리
- 전문 쿼리의 가장 기본이 되는 쿼리로, 전체 텍스트 중에서 특정 용어나 용어들을 검색할 때 사용한다.
- 매치 쿼리를 사용하기 위해서는 검색하고 싶은 필드를 알아야 한다.
GET kibana_sample_data_ecommerce/_search
{
"_source": ["customer_full_name"],
"query": {
"match": {
"customer_full_name": "Mary"
}
}
}
GET kibana_sample_data_ecommerce/_search
{
"_source": ["customer_full_name"
],
"query": {
"match": {
"customer_full_name": "mary bailey"
}
}
}
- mary
혹은 bailey
가 포함된 도큐먼트를 찾는다.
GET kibana_sample_data_ecommerce/_search
{
"_source": ["customer_full_name"
],
"query": {
"match": {
"customer_full_name":
{
"query": "mary bailey",
"operator": "and"
}
}
}
}
- operator를 통해 두 단어 모두 들어간 도큐먼트를 검색할 수 있다.
2. 매치 프레이즈 쿼리
- 2개 이상 연결된 단어 검색할 때 사용한다.
- 검색어에 사용된 용어들이 모두 포함되면서 용어의 순서까지 맞아야 한다.
- 매치 프레이즈 쿼리는 검색 시 많은 리소스를 요구하기 때문에 자주 사용하는 것은 좋지 않다.
GET kibana_sample_data_ecommerce/_search
{
"_source": ["customer_full_name"
],
"query": {
"match_phrase": {
"customer_full_name": "mary bailey"
}
}
}
용어의 순서가 바뀐 bailey mary
나 중간에 다른 단어가 포함된 mary tony bailey
는 매칭되지 않는다.
3. 멀티 매치 쿼리
- 전문 검색 쿼리의 일종으로, 텍스트 타입으로 매핑된 필드에서 사용하는 것이 좋다.
- 멀티 매치 쿼리는 1개 이상의 필드에 쿼리를 요청할 수 있다.
- 개별 스코어를 각각 구한 다음에 그중 가장 큰 값을 대표 스코어로 구한다.
- 대표 스코어 선택 방식은 사용자가 결정할 수 있지만, 특별히 설정을 하지만 기본으로 가장 큰 스코어를 대표 스코어로 사용한다.
- explain
파라미터를 true
로 설정하면 개별 필드의 스코어가 어떻게 계산되었는지 알 수 있다.
GET kibana_sample_data_ecommerce/_search
{
"_source": ["customer_first_name", "customer_last_name", "customer_full_name"
],
"query": {
"multi_match": {
"query": "mary",
"fields": "customer_*_name"
}
},
"explain": false
}
필드에 가중치 두기 (boosting)
GET kibana_sample_data_ecommerce/_search
{
"_source": ["customer_first_name", "customer_last_name", "customer_full_name"
],
"query": {
"multi_match": {
"query": "mary",
"fields": [
"customer_full_name^2",
"customer_first_name",
"customer_last_name"
]
}
},
"explain": false
}
- 위의 경우 customer_first_name
이나 customer_last_name
에서 얻은 스코어보다 customer_full_name
에서 얻은 스코어를 2배 더 높게 측정된다.
- 대표 스코어는 각각의 필드에서 얻은 스코어 중에서 가장 큰 스코어로 정한다고 했는데, 이럴 경우 최종 대표 스코어는 customer_full_name
에서 얻은 결과를 체택할 확률이 높아진다.
term level query
1. 용어 쿼리 term
- 정확한 용어가 있는 경우에만 매칭이 된다.
GET kibana_sample_data_ecommerce/_search
{
"_source": ["customer_full_name"
],
"query": {
"term": {
"customer_full_name": "Mary"
}
}
}
2. 용어들 쿼리 terms
GET kibana_sample_data_ecommerce/_search
{
"_source": ["day_of_week"],
"query": {
"terms": {
"day_of_week": ["Monday", "Sunday"]
}
}
}
range query ...
아래 책 <엘라스틱 스택 개발부터 운영까지> 4.4절을 읽고 정리한 글입니다.
http://www.yes24.com/Product/Goods/103030516
'데이터베이스 > 엘라스틱서치' 카테고리의 다른 글
elasticsearch. 노리 분석기 [엘라스틱 스택 개발부터 운영까지] (1) | 2023.03.26 |
---|---|
elasticsearch. range query 와 bool query [엘라스틱 스택 개발부터 운영까지] (0) | 2023.03.21 |
elasticsearch. 역인덱싱과 분석기 [엘라스틱 스택 개발부터 운영까지] (0) | 2023.02.25 |
elasticsearch. 문자열 타입 (텍스트 타입 / 키워드 타입 / 멀티 타입) [엘라스틱 스택 개발부터 운영까지] (1) | 2023.02.19 |
elasticsearch. elasticsearch / kibana 설치 (맥 os) (1) | 2023.01.30 |