Elasticsearch04_(검색 API)

2024. 12. 28. 20:15ELK가_뭐지/Elasticsearch

검색 API

  • 검색을 실행하는 2가지 방법
    • REST요청 "URI"를 통해 검색 매개변수를 보냄
    • REST요청 "본문"을 통해 검색 매개 변수를 보냄
  • 요청 본문 메서드를 사용하면 표현력을 높이고 더 쉽게 읽을 수 있는 JSON형식으로 검색을 정의
  • 검색용 REST API는 _search 엔드 포인트에서 액세스
  • bank인덱스의 모든 문서를 반환 예제
    • get /bank/_search?q=*&sort=account_number:asc&pretty
      • 인덱스 : bank
      • q=* : 인덱스의 모든 문서와 일치하도록 지시
      • sort=account_number:asc : 각 문서의 account_number필드를 사용해 결과를 오름차순으로 정렬
      • pretty : 보기 좋은 Json결과 반환

Query DSL

  • 쿼리를 실행하는데 사용할 수 있는 json스타일 도메인 관련 언어를 제공
// 선택적으로 확인하려는 필드 지정
get /bank/_search
{
    "query":{"match_all" : {}}
    "_source": ["account_number","balance"]
}

// match : Ava || Eva 일치하면 반환
post /bank/_search
{
    "query":{"match" : {"address": "Ava Eva"}}
}

// match_phrase : 완전히 일치하면 반환
post /bank/_search
{
    "query":{"match_phrase" : {"address": "Ava Eva"}}
}
// age가 40이고 state가 ID가 아닌 값
get /bank/_search
{
    "query":{
        "bool":{
            "must":[
                {"match":{"age":40}}
            ],
            "must_not":[
                {"math":{"state":"ID"}}
            ]
        }
    }
}

검색API 실습

kibana_sample_data_flights 인덱스 사용.(키바나에서 제공하는 샘플데이터)

# search API query
get _cat/indices
get kibana_sample_data_flights/_search?q=*

// url로 요청하는 방법
get kibana_sample_data_flights/_search?q=*&sort=AvgTicketPrice
// body로 요청하는 방법
post kibana_sample_data_flights/_search
{
  "query":{"match_all": {}},
  "sort":{"AvgTicketPrice":"asc"}
}
// 모든 데이터 조회 & 가격으로 내림차순 & "AvgTicketPrice","FlightNum"필드만 보이게
post kibana_sample_data_flights/_search
{
  "query":{"match_all": {}},
  "sort":{"AvgTicketPrice":"desc"},
  "_source" : ["AvgTicketPrice","FlightNum"]
}
// DestCountry 필드 값에 AU가 포함된 데이터
post kibana_sample_data_flights/_search
{
  "query":{"match": {"DestCountry":"AU"}},
  "sort":{"AvgTicketPrice":"desc"},
  "_source" : ["AvgTicketPrice","FlightNum","DestCountry"]
}
// DestCountry 필드 값이 AU와 일치한 데이터
post kibana_sample_data_flights/_search
{
  "query":{"match_phrase": {"DestCountry":"AU"}},
  "sort":{"AvgTicketPrice":"desc"},
  "_source" : ["AvgTicketPrice","FlightNum","DestCountry"]
}
// DestCountry 필드 값에 AU가 포함되고 FlightNum 필드 값이 "9HY9SWR"가 아닌 데이터
post kibana_sample_data_flights/_search
{
  "query":{
    "bool" : {
      "must": [
        {"match": {
          "DestCountry": "AU"
        }}
      ],
      "must_not": [
        {"match": {
          "FlightNum": "9HY9SWR"
        }}
      ]
    }
  }
}