데이터는 이전 페이지를 참조해주세요
https://stdhsw.tistory.com/entry/Elasticsearch-%EA%B2%80%EC%83%89%ED%95%98%EA%B8%B01
bool 쿼리
Elasticsearch에서 보다 자세한 검색을 위해 복합 쿼리가 필요합니다. 이럴 때 bool을 사용하게 됩니다. bool 쿼리에는 must, must_not, should가 있고 이러한 쿼리를 이용하여 score에 점수를 매길 수 있습니다. score의 점수가 높을수록 보다 정확한 결괏값을 도출할 수 있습니다.
must
must는 검색 조건에 반듯이 포함한 도큐먼트를 가져옵니다.
keyword타입 검색하기
level필드에 값이 "info"값을 가지는 모든 도큐먼트를 검색합니다.
참고로 level필드의 타입은 keyword입니다.
api | POST http://localhost:9200/my-log-index-2021-08-29/_search |
header | Content-type: application/json |
body | { "query": { "bool": { "must": { "match": { "level": "info" } } } } } |
복합 쿼리 검색하기
level필드의 값이 "info"이며, message에 "aaa"값을 포함하는 도큐먼트를 검색합니다.
level필드는 keyword이며, message는 text입니다.
api | POST http://localhost:9200/my-log-index-2021-08-29/_search |
header | Content-type: application/json |
body | { "query": { "bool": { "must": [ { "match": { "level": "info" } }, { "match": { "message": "aaa" } } ] } } } |
text타입 OR 검색하기
message필드의 값이 "aaa" 또는 "open" 중 하나 이상의 값을 가지는 도큐먼트를 검색합니다.
만약 "aaa"와 "open"의 값 모두 가지고 있다면 score의 점수가 더 높습니다.
api | POST http://localhost:9200/my-log-index-2021-08-29/_search |
header | Content-type: application/json |
body | { "query": { "bool": { "must": [ { "match": { "message": "aaa open" } } ] } } } |
text타입 AND 검색하기
message필드의 값이 "aaa"와 "open" 모든 값을 가지는 도큐먼트를 검색합니다.
api | POST http://localhost:9200/my-log-index-2021-08-29/_search |
header | Content-type: application/json |
body | { "query": { "bool": { "must": [ { "match": { "message": "aaa" } }, { "match": { "message": "open" } } ] } } } |
must_not
must_not은 검색 조건에 반듯이 포함하지 않은 도큐먼트를 가져옵니다.
must_not 쿼리 검색하기
level필드에 값이 "info"가 아닌 모든 도큐먼트를 검색합니다.
api | POST http://localhost:9200/my-log-index-2021-08-29/_search |
header | Content-type: application/json |
body | { "query": { "bool": { "must_not": [ { "match": { "level": "info" } } ] } } } |
must_not 복합 쿼리 검색하기
message 필드의 값이 "open"을 가지며, level 필드의 값이 "info"가 아닌 도큐먼트를 검색합니다.
level은 keyword타입이며, message는 text타입입니다.
api | POST http://localhost:9200/my-log-index-2021-08-29/_search |
header | Content-type: application/json |
body | { "query": { "bool": { "must": [ { "match": { "message": "open" } } ], "must_not": [ { "match": { "level": "info" } } ] } } } |
should
should의 경우 반듯이 필요한 것은 아니지만 만약 있다면 score의 점수를 높여 줍니다.
keyword 타입의 경우 OR 검색을 지원하지 않습니다. 그러나 정상적인 방법은 아니지만 저 같은 경우 keyword 타입인 경우 should를 이용하여 OR 검색처럼 사용합니다.
should 쿼리 검색하기
level 필드의 값이 "debug"일 경우 보다 높은 점수를 부여하고 검색합니다.
api | POST http://localhost:9200/my-log-index-2021-08-29/_search |
header | Content-type: application/json |
body | { "query": { "bool": { "should": [ { "match": { "level": "debug" } } ] } } } |
should 복합 쿼리로 검색하기
message필드에는 "open"의 값을 가진 도큐먼트 중에 level필드에는 "info"의 값을 가지면 보다 높은 score 점수를 부여하여 검색합니다.
(level필드에는 info 이외의 값도 같이 검색됩니다. 그러나 info의 값을 가진 도큐먼트가 더 높은 score 점수를 가집니다.)
api | POST http://localhost:9200/my-log-index-2021-08-29/_search |
header | Content-type: application/json |
body | { "query": { "bool": { "must": [ { "match": { "message": "open" } } ], "should": [ { "match": { "level": "info" } } ] } } } |
참조
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html
'Elasticsearch > Elasticsearch 데이터' 카테고리의 다른 글
Elasticsearch Aggregations#1 min, max, sum, avg, stats (0) | 2021.09.13 |
---|---|
Elasticsearch 검색하기#3 match, term, range 쿼리 (0) | 2021.09.10 |
Elasticsearch 검색하기#1 GET, match, match_phrase (1) | 2021.09.06 |
Elasticsearch text, keyword의 차이 (0) | 2021.09.03 |
Elasticsearch Array 형식으로 저장하기 (0) | 2021.09.01 |