삽입된 데이터는 이전 페이지를 참조해주세요

https://stdhsw.tistory.com/entry/Elasticsearch-%EA%B2%80%EC%83%89%ED%95%98%EA%B8%B01

 

match 쿼리

match는 term과 비슷해 보이지만 미묘한 차이가 있습니다. match의 경우 기본적인 검색을 수행하는데 사용을 하지만 저 같은 경우 text 필드에서 보다 상세한 검색을 수행할 경우 주로 사용됩니다.  즉 문서의 내용에서 특정 단어가 들어 갔는지 검색할때 많이 사용됩니다.

 

text 필드 검색하기

message 필드에 "aaa"라는 문자열이 포함된 모든 도큐먼트를 검색합니다.

api POST http://localhost:9200/my-log-index-2021-08-29/_search
header Content-type: application/json
body {
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "message": "aaa"
                    }
                }
            ]
        }
    }
}

 

term 쿼리

term의 경우 match와 비슷한 모습을 취하지만 term은 완전히 같은 데이터를 검색하는데 많이 사용됩니다. 저 같은 경우 주로 keyword타입에서 특정 단어를 검색하는데 많이 사용하고 있습니다.

 

keyword 타입 검색하기

level 필드의 값이 "info"인 값을 가진 도큐먼트를 검색합니다.

api POST http://localhost:9200/my-log-index-2021-08-29/_search
header Content-type: application/json
body {
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "level": "info"
                    }
                }
            ]
        }
    }
}

 

range 쿼리

range 쿼리는 값의 범위를 검색하는데 사용됩니다. 

 

range쿼리의 파라미터

파라미터명 설명
gte 크거나 같다
gt 크다
lte 작거나 같다
lt 작다

 

범위를 이용하여 검색하기

user_id가 2보다 크거나 같으면서 7보다 작은 도큐먼트 검색하기

api POST http://localhost:9200/my-log-index-2021-08-29/_search
header Content-type: application/json
body {
    "query": {
        "bool": {
            "must": [
                {
                    "range": {
                        "user_id": {
                            "gte": "2",
                            "lt": "7"
                        }
                    }
                }
            ]
        }
    }
}

 

 

데이터 넣기

지금 넣는 데이터로 앞으로 검색하는 데 사용하겠습니다.

(http request client를 사용하신다면 body에 반듯이 enter 한번 더 입력하세요)

api PUT http://localhost:9200/_bulk
header Content-type: application/json
body {"index": {"_index": "my-log-index-2021-08-29", "_id": 1}}
{"user_id":1, "level":"info", "timestamp": 1630230119, "action": "open_file", "message": "user1 aaa file open"}
{"index": {"_index": "my-log-index-2021-08-29", "_id": 2}}
{"user_id":2, "level":"debug", "timestamp": 1630230120, "action": "open_file", "message": "user2 bbb file open"}
{"index": {"_index": "my-log-index-2021-08-29", "_id": 3}}
{"user_id":3, "level":"info", "timestamp": 1630230121, "action": "open_socket", "message": "user3 socket open"}
{"index": {"_index": "my-log-index-2021-08-29", "_id": 4}}
{"user_id":4, "level":"debug", "timestamp": 1630230121, "action": "open_socket", "message": "user4 ddd socket open"}
{"index": {"_index": "my-log-index-2021-08-29", "_id": 5}}
{"user_id":5, "level":"info", "timestamp": 1630230122, "action": "open_file", "message": "user5 ccc file open"}
{"index": {"_index": "my-log-index-2021-08-29", "_id": 6}}
{"user_id":6, "level":"info", "timestamp": 1630230123, "action": "close_file", "message": "user6 aaa close open"}
{"index": {"_index": "my-log-index-2021-08-29", "_id": 7}}
{"user_id":7, "level":"info", "timestamp": 1630230124, "action": "close_socket", "message": "user7 ccc close socket"}
{"index": {"_index": "my-log-index-2021-08-29", "_id": 8}}
{"user_id":8, "level":"debug", "timestamp": 1630230125, "action": "open_file", "message": "user8 aaa file open"}
{"index": {"_index": "my-log-index-2021-08-29", "_id": 9}}
{"user_id":9, "level":"info", "timestamp": 1630230126, "action": "open_file", "message": "user9 bbb file open"}
{"index": {"_index": "my-log-index-2021-08-29", "_id": 10}}
{"user_id":10, "level":"info", "timestamp": 1630230127, "action": "open_file", "message": "user10 aaa file open"}
{"index": {"_index": "my-log-index-2021-08-29", "_id": 11}}
{"user_id":11, "level":"warn", "timestamp": 1630230128, "action": "open_file", "message": "user11 bbb file open"}
{"index": {"_index": "my-log-index-2021-08-29", "_id": 12}}
{"user_id":12, "level":"info", "timestamp": 1630230128, "action": "open_file", "message": "user12 aaa file open"}
{"index": {"_index": "my-log-index-2021-08-29", "_id": 13}}
{"user_id":13, "level":"info", "timestamp": 1630230129, "action": "open_file", "message": "user13 bbb file open"}


GET으로 데이터 가져오기

일상적으로 많이 사용하였던 방법입니다. GET으로는 도큐먼트 아이디를 통하여 해당 데이터를 가져올 수 있습니다.

 

도큐먼트 아이디 1 데이터 가져오기

api GET http://localhost:9200/my-log-index-2021-08-29/_doc/1

출력 결과

query를 이용하여 가져오기

이번에는 도큐먼트 아이디가 아닌 query를 통하여 값을 가져오는 방법을 알아보겠습니다.

 

인덱스의 모든 데이터 가져오기

size는 가져올 수 있는 최대 개수입니다. 이번 결과에서는 size가 없어도 무방합니다.

api POST http://localhost:9200/my-log-index-2021-08-29/_search
header Content-type: application/json
body {
    "size": 1000,
    "query": {
        "match_all": {}
    }
}

 

필드 값으로 검색하여 데이터 가져오기

active필드에 open_socket 값을 가지는 도큐먼트 가져오기

api POST http://localhost:9200/my-log-index-2021-08-29/_search
header Content-type: application/json
body {
    "query": {
        "match": {
            "action": "open_socket"
        }
    }
}

출력 결과

출력 결과에서 각 태그의 의미는 다음과 같습니다.

took 쿼리 수행 시간
timed_out 쿼리 수행 시간이 넘었는지 확인
_shard 쿼리를 수행한 shard의 정보
_shard.total 쿼리를 수행한 shard의 수
_shard.successful 쿼리 수행을 성공한 shard의 수
_shard.skipped 쿼리를 건너뛴 shard의 수
_shard.failed 쿼리를 실패한 shard의 수
hits 쿼리 수행 결과
hits.total 쿼리 수행에 일치하는 도큐먼트 수
hits.max_score 쿼리 수행후 가장 높은 점수를 가진 값
hits.hits 수행 결과의 도큐먼트 정보들

 

단어가 아닌 문장으로 검색하기

match_phrase를 이용하여 message필드에 "aaa file"문장을 포함한 도큐먼트를 검색합니다.

api POST http://localhost:9200/my-log-index-2021-08-29/_search
header Content-type: application/json
body {
    "query": {
        "match_phrase": {
            "message": "aaa file"
        }
    }
}

 

 

+ Recent posts