[ElasticSearch] ElasticSearch DSL 더보기
2021. 12. 22. 20:05ㆍ개발일지
1. Two Types of Clauses
- 두 가지 종류의 절(clauses)를 사용하여 query를 구성한다.
- leaf query clauses : 특정 필드에 특정 값이 있는지 확인하는 절 (예: match, term, range 등)
- compound query clauses: leaf query나 compound query를 감싸서 여러 쿼리를 논리적으로 연결하는 절(예: bool, dis_max)
2. Query and Filter Context
- Elasticsearch의 검색 결과는 relevance scores에 따라 정렬된다. search API 응답 결과의 _score이 relevance를 의미한다. Elasticsearch 기본적으로 BM25(관련 링크)를 사용하여 relevance를 계산한다.
- 쿼리절이 query context에서 쓰이는 경우 relavance 계산에 고려되고 filter context에서 쓰이는 경우 relevance가 계산되지 않는다.
- query context
- query context에서 사용되는 경우 해당 쿼리를 얼마나 만족하는지에 비례하여 relevance에 반영된다.
- filter context
- filter context에서 사용되는 경우 해당 쿼리를 만족하는지, 아닌지만 검색 결과에 반영된다. relevance에는 영향을 미치지 않는다.
# "query"에 해당하는 조건은 만족하는 정도에 따라 relevance 계산에 반영
# "filter"에 해당하는 조건은 만족하는지 여부만 검색 결과에 반영
GET /_search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Search" }},
{ "match": { "content": "Elasticsearch" }}
],
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2015-01-01" }}}
]
}
}
}
3. 쿼리의 종류
- Elasticsearch 공식 문서에 따르면 쿼리의 종류에는 Compound queries, Full text queries, Geo queries, Shape queries, Joining queries, Match all, Span queries, Specialized queries, Term-level queries가 있다.
- 이 중에서 Compound queries, Full text queries를 살펴본다.
자세한 설명 및 쿼리 별 사용 예시)
3.1 Compound queries(
자세한 설명 및 쿼리별 사용 예시)
3.2 Full text queries(- Full text queries를 이해하기 위해서는 analyzer를 알아야 한다. Full text queries는 쿼리와 문서를 모두 analyze하여, 그 결과를 대상을 검색을 진행하기 때문이다.
- analyzer는 자연어로 들어온 쿼리를 char_filter -> tokenizer -> token_filter의 과정을 거쳐 쪼개고 정제하는 과정이다.(참고)
# analyzer 각 단계별 예시
"char_filter": "html_strip", // html 태그 제거
"tokenizer": "whitespace" // whitespace 기준 토큰 생성
"filter": "lowercase // 모두 소문자로 변경
- 인덱스 생성시에, char_filter, tokenizer, token_filter를 조합하여 analyzer를 설정하며(설정 방법), 정의된 analyzer를 원하는 필드에 매핑한다(매핑 방법).
- 인덱스 생성시 매핑된 결과에 따라 데이터가 저장되기 때문에, 인덱스 생성 후에 필드별 analzyer를 변경할 수 없으며, 변경하려면 인덱스를 새로 생성해야 한다.
반응형
'개발일지' 카테고리의 다른 글
vscode tab 간격 설정 (0) | 2021.12.31 |
---|---|
cgi (common gateway interface) (0) | 2021.12.29 |
[linux] tmux 단축키 안 먹음 (0) | 2021.12.23 |
[ElasticSearch] ElasticSearch 개요 (0) | 2021.12.22 |
[git] submodule (0) | 2021.12.22 |