티스토리 뷰

여러 유형의 쿼리를 복합적으로 사용할 때 사용 하는 쿼리로 다음과 같은 유형이 있습니다.

  • bool : 항목 내 쿼리에 일치하는 항목이 있을 때 검색
  • boosting : 검색 결과의 가중치를 높이기 위한 검색
  • constant_score :  filter query를 감싸서 매칭되는 모든 문서에 대해 boost parameter value와 동일한 relevance score를 반환합니다. 이를 통해 검색 결과의 정확도를 높일 수 있습니다
  • dis_max : 루씬의 DisjunctionMaxQuery에서 따온 용어로 예를 들어 멀티 키워드 검색을 수행 시 여러 필드에서 검색을 수행하게 되는 조건에서 멀티 키워드의 키워드와 동일한 키워드의 score를 더욱 높이 평가 하는 방식
  • function_score : 검색 결과의 정확도를 높이기 위해 사용하며, 이를 통해 검색 결과의 relevance score를 조정하고, 특정 필드의 중요도를 높이거나 낮출 수 있습니다.

자세한 학습은 참고 사이트을 활용하고 여기에서는 bool query에 대해서 간단히 기술합니다.

참고 : https://www.elastic.co/guide/en/elasticsearch/reference/7.17/compound-queries.html

 

Compound queries | Elasticsearch Guide [7.17] | Elastic

Compound queries wrap other compound or leaf queries, either to combine their results and scores, to change their behaviour, or to switch from query to filter context. The queries in this group are: bool query The default query for combining multiple leaf

www.elastic.co

1. bool query

query context와 filter context를 혼합해서 사용할 수 있습니다.

항목 설명 실행 스코어링 캐싱
must 항목 내 쿼리에 일치하는 문서 검색 
- 복수의 쿼리를 실행하면 AND 연산
query context O X
filter 항목 내 쿼리에 일치하는 문서 검색  
- 쿼리를 실행하여 '예/아니요' 형식의 필터 컨텍스트를 수행
filter context X O
should 검색 결과에 포함될 수 있는 조건을 지정하여 일치하는 문서 검색
- 단독으로 사용 시 쿼리를 실행하여 참인 도큐먼트
- 복수의 쿼리를 실행하면 OR 연산
- 다른 타입과 같이 사용할 경우 스코어에만 활용
query context O X
must_not 항목 내 쿼리에 일치하지 않는 문서 검색 
- 다른 타입과 같이 사용할 경우 도큐먼트에서 제외
filter context X O

예) title 필드에 가덕이 있고. createdtime 필드의 값이 지정한 조건에 만족하는 정보 검색

curl --location --request GET 'https://localhost:9200/tourlist/_search?pretty=null' \
--header 'Content-Type: application/json' \
--data '{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "title" : "가덕"
                }
            },
            "filter": {
                "range": {
                    "createdtime" : {
                        "lte" : "20221206000000"
                    }
                }
            }
        }
    }
}'

 

2. 패턴 검색

패턴 검색은 많은 리소스를 사용하기 때문에 권장하지 않지만 필요할 때 효율적으로 사용하면 됩니다. 와일드카드 쿼리와 정규식 쿼리

  •  와일드카드 쿼리
    •  *, ?라는 두 가지 기호를 사용
    •  * : 공백까지 포함하여 글자 수에 상관없이 모두 문자를 매칭
    •  ?:  오직 한 문자만 매칭할 수 있다.
  •  정규식 쿼리
    • ? *, ., +, ?, (), []를 사용
    • *:  앞 문자와 같은 문자가 0번, 혹은 여러 번 반복되면 매칭되었다고 판단
    • 점(.) :  하나의 문자를 의미하고 어떤 문자가 와도 상관없이 매칭되었다고 판단
    • + : 앞 문자와 같은 문자가 한 번 이상 반복되면 매칭되었다고 판단.
    • ? : 앞 문자와 같은 문자가 0번 혹은 한 번 나타나면 매칭되었다고 판단
    • () :  그룹핑하여 반복되는 문자들을 매칭
    • [] :  클래스 화하여 특정 범위의 문자들을 매칭.

 

'ElasticSearch' 카테고리의 다른 글

ElasticSearch Query - Aggregation  (0) 2023.09.02
ElasticSearch Query DSL - match, term  (0) 2023.08.30
검색 API  (0) 2023.08.29
Elasticsearch 문서 색인 / 조회  (0) 2023.08.29
Elasticsearch 연동  (0) 2023.08.15