IT/Elasticsearch

[Elasticsearch] 4. 검색 API - _search API

snapcoder 2023. 12. 5. 15:39
728x90
반응형
SMALL

 

하단 쿼리소스의 일부분 캡쳐

 

 

📌 검색 API

- GET <인덱스명>/_search

# Click the Variables button, above, to create your own variables.
GET ${exampleVariable1} // _search
{
  "query": {
    "${exampleVariable2}": {} // match_all
  }
}



# 모든 인덱스 조회
GET /_cat/indices?v

# 인덱스 생성
PUT /movie_index
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "year": {
        "type": "integer"
      },
      "genre": {
        "type": "text"
      }
    }
  }
}

# 인덱스 삭제
DELETE movie_index

# 매핑정보 조회
GET /movie_index/_mapping





# movie라는 인덱스에 데이터 삽입
# id값 랜덤삽입
POST /movie_index/_doc
{
  "name":"game of throne 1",
  "year": 2020,
  "genre": "액션"
}
# id값 3으로 명시
POST /movie_index/_doc/3
{
  "name":"game of throne 6",
  "year": 2028,
  "genre": "애니메이션 호러 스릴러 여름맞이 19세이상"
}
# 추가 삽입
POST /movie_index/_doc
{
  "name":"game of throne 9",
  "year": 2023,
  "genre": "액션 19세이상"
}
# 추가 삽입
POST /movie_index/_doc
{
  "name":"game of throne 2",
  "year": 2024,
  "genre": "액션 호러"
}
# 추가 삽입
POST /movie_index/_doc
{
  "name":"game of throne 3",
  "year": 2025,
  "genre": "호러 공포"
}





# 기본검색(1) - 모든 도큐먼트 조회 (=match_all)
GET movie_index/_search

# 기본검색(2) - 카운팅
GET movie_index/_count



# URI 검색(1) - 기본
GET movie_index/_search?q=액션

# URI 검색(2) - 연산자 (무조건 대문자로)
GET movie_index/_search?q=애니메이션 OR 2025

# URI 검색(3) - 특정 컬럼
GET movie_index/_search?q=genre:스릴러



# 멀티테넌시(1) - 쉼표로 여러 인덱스 검색 가능 (띄어쓰기 불가)
PUT drama_index
GET movie_index,drama_index/_search?q=스릴러

# 멀티테넌시(2) - 별표로 여러 인덱스 검색 가능
GET *_index/_search?q=스릴러

# 멀티테넌시(3) - 모든 인덱스를 _all로 검색 가능 (웬만하면 미사용 권장)
GET _all/_search?q=스릴러



# 모든문서 검색(1) - 쿼리 없이 실행
GET movie_index/_search

# 모든문서 검색(2) - 쿼리로 실행
GET movie_index/_search
{
  "query": {
    "match_all": {}
  }
}







# 조건검색(1) - match 특정필드 ex) like '%String%'
GET movie_index/_search
{
  "query": {
    "match": {
      "genre" : "스릴러"
    }
  }
}

# 조건검색(2) - 띄어쓰기로 OR 연산 ex) like '%String%' OR like '%String%'
GET movie_index/_search
{
  "query": {
    "match": {
      "genre" : "스릴러 공포"
    }
  }
}

# 조건검색(3) - operator AND 연산자 명시
GET movie_index/_search
{
  "query": {
    "match": {
      "genre" : {
        "query" : "스릴러 공포",
        "operator" : "and" 
      }
    }
  }
}

# 조건검색(4) - match_phrase 완전일치(공백포함)
GET movie_index/_search
{
  "query": {
    "match_phrase": {
      "genre" : "액션 19세이상"
    }
  }
}

# 조건검색(5) - slop 빈칸 포함 검색 ex) "공포 ㅇㅇㅇ 스릴러" 조회됨 (slop 2이상 비추)
GET movie_index/_search
{
  "query": {
    "match_phrase": {
      "genre" : {
        "query": "공포 스릴러",
        "slop" : 1
      }
    }
  }
}

# 조건검색(6) - query_string 루씬의 URI 검색 문법을 본문에 적용하여 검색
# match_phase처럼 구문 검색시 \"String\" 사용해야함
# 한정적인 옵션 사용의 한계점 > 단순 조건에 적합
GET movie_index/_search
{
  "query": {
    "query_string": {
      "default_field": "genre",
      "query": "(애니메이션 AND 스릴러) OR \"공포\""
    }
  }
}








# 조건검색 bool - must, must_not, should, filter > 복합 조건에 적합
# must : 참
# must_not : 거짓
# should : 점수높이기
# filter : 참, 점수계산x, must보다빠른속도, 캐싱가능
# match : sql의 like로 생각하면 편함
# match_phrase : sql의 =로 생각하면 편함
GET movie_index/_search
{
  "query": {
    "bool": {
      "must" : [{   "match" : {"genre" : "액션"}   }],
      "must_not" : [{   "match_phrase": {"genre" : "액션 19세이상"}   }],
      "should" : [{   "match": {"genre" : "호러"}   }],
      "filter" : [{   "match": {"genre" : "호러"}   }]
    }
  }
}

 

 

📌 참고자료

- 검색 API - _search API

- 이전 게시글 : 2023.11.30 - [IT공부/ElasticSearch] - [Elastic Search] 3. 벌크 API - _bulk API

 

728x90
반응형
LIST