728x90
Match All Query
POST movie_search/_search
{
"query": {
"match_all": {}
}
}
- matchAll Query는 색인된 모든 문서를 검색하는 쿼리이다.(색인에 저장된 문서를 확일할 때 사용한다.)
Match Query
POST movie_search/_search
{
"query": {
"match": {
"movieNm": "그대 장미"
}
}
}
- 텍스트, 숫자, 날짜 등이 포함된 문장을 형태소 분석을 통해 Term으로 분리한 후 Term을 이용해 검색 질의를 수행
- operator를 지정하지 않았기 때문에, OR 연산으로 "그대", "장미" 검색을 수행한다.
Multi Match Query
POST movie_search/_search
{
"query": {
"multi_match": {
"query": "가족",
"fields": ["movieNm", "movieNmEn"]
}
}
}
- Match Query와 기본적인 사용 방법은 동일하나, 여러 개의 필드를 대상으로 검색해야 할 때 사용하는 쿼리이다.
Term Query
POST movie_search/_search
{
"query": {
"term": {
"genreAlt": "코미디"
}
}
}
- 별도의 분석 작업을 수행하지 않고 입력된 텍스트가 존재하는 문서를 찾는다.
- Keyword 데이터 타입을 사용하는 필드를 검색하려면 Term Query를 사용해야 한다.
- Term Query의 경우 검색어를 하나의 텀으로 처리하기 때문에 텀이 정확히 존재하지 않는 경우 검색이 되질 않는다.(영문 대소문자가 다를 경우도 검색 X)
Bool Query
{
"query": {
"bool": {
"must": [ ],
"must_not": [ ],
"should": [ ],
"filter": [ ]
}
}
}
- Bool Query를 상위에 두고 하위에 다른 Query들을 사용해 복잡한 조건의 쿼리문을 작성할 수 있다.
- must: 반드시 조건에 만족하는 문서만 검색된다.
- must not: 조건에 만족하지 않는 문서가 검색된다.
- should: 여러 조건 중 하나 이상을 만족하는 문서가 검색된다.
- filter: 조건을 포함하고 있는 문서를 출력한다.(스코어별 정렬은 X)
Query String
POST movie_search/_search
{
"query": {
"query_string": {
"default_field": "movieNm",
"query": "(가정) AND (어린이 날)"
}
}
}
- 엘라스틱에서 내장된 쿼리 분석기가 있는데 query_string 파라미터를 사용하는 쿼리 작성 시 쿼리 분석기를 이용하는 질의를 할 수 있다.
Prefix Query
POST movie_search/_search
{
"query": {
"prefix": {
"movieNm": "자전차"
}
}
}
- 해당 접두어가 있는 모든 문서를 검색하는 데 사용한다.
- 역색인된 Term은 사전순으로 정렬되고, Prefix Query는 저장된 Term들을 스캔해서 일치하는 Term을 찾는다.
Exists Query
POST movie_search/_search
{
"query": {
"exists": {
"field": "movieNm"
}
}
}
- 실제 값이 존재하는 문서만 찾고 싶을 때 사용한다.
- 필드 값이 null이거나 문서에 필드 자체가 없는 문서를 찾고 싶다면 must_not을 사용하면 된다.
Wildcard Query
POST movie_search/_search
{
"query": {
"wildcard": {
"typeNm": "장*"
}
}
}
- 검색어가 와일드카드와 일치하는 구문을 찾는다.(형태소 분석이 이뤄지지 않는다.)
- *: 문자의 길이와 상관없이 와일드카드와 일치하는 모든 문서를 찾는다.
- ?: 지정된 위치의 한 글자가 다른 경우의 문서를 찾는다.
- 와일드카드를 사용할 경우 단어의 첫 글자로 절대 사용하면 안 된다(색인된 전체 문서를 찾아야 하는 불상사가 발생할 수 있기 때문)
Nested Query
GET movie_nested/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"reGenreNm": "멜로/로맨스"
}
},
{
"nested": {
"path": "companies",
"query": {
"bool": {
"must": [
{
"term": {
"companies.companyCd": "20173401"
}
}
]
}
}
}
}
]
}
}
}
- 분산 환경에서 SQL 조인과 유사한 기능을 제공하는 Nested Query를 제공한다.
- Nested 데이터 타입의 필드를 검색할 때 사용하며, Nested는 문서 안에 다른 문서가 있을 때 사용한다.
- path 옵션으로 중첩된 필드를 명시하고, query 옵션에 Nested 필드 검색에 사용할 쿼리를 입력한다.
- 엘라스틱서치는 성능상 Parent와 Child 문서를 모두 동일한 샤드에 저장하며, 이 방식으로 인해 네트워크 비용을 대폭 줄이는 것이 가능하다.
- 단, 특정 Parent 문서에 포함된 Child 문서가 비정상적으로 커질 경우 샤드의 크기가 일정하게 분배되지 못하는 문제점이 발생할 수 있기 때문에 설계가 중요하다.
728x90
'Elastic Search' 카테고리의 다른 글
| Ch05. 데이터 집계 - 집계 (0) | 2025.09.18 |
|---|---|
| Ch04. 데이터 검색 - 부가적인 검색 API (0) | 2025.09.14 |
| Ch04. 데이터 검색 - Query DSL 이해하기 (0) | 2025.09.14 |
| Ch04. 데이터 검색 - 검색 API (0) | 2025.09.14 |
| Ch03. 데이터 모델링 - Document API 이해하기 (0) | 2025.09.13 |