본 내용은 윈도우에 설치된 Elasticsearch 7.10.2 버전으로 기준으로 작성되었습니다.
1. term query
term query는 정확한 매치를 찾기 위해 사용됩니다. 예를 들어, 특정 필드에서 "Elasticsearch"라는 값을 가지는 문서를 찾으려면 다음과 같이 사용할 수 있습니다.
GET http://localhost:9200/search_test_index/_search
{
"query": {
"term": {
"keyword_field": {
"value": "Elasticsearch"
}
}
}
}
2. terms query
terms query는 주어진 terms 중 하나라도 매칭되는 모든 문서를 찾습니다. 예를 들어, "test1" 또는 "Elasticsearch"라는 값을 가지는 문서를 찾으려면 다음과 같이 사용할 수 있습니다.
GET http://localhost:9200/search_test_index/_search
{
"query": {
"terms": {
"keyword_field": [
"test1",
"Elasticsearch"
]
}
}
}
3. exists query
exists query는 특정 필드가 존재하는 문서를 찾습니다. 모든 document가 같은 schema를 사용하지 않을 때 쓰일 수 있을 듯합니다.
GET http://localhost:9200/search_test_index/_search
{
"query": {
"exists": {
"field": "keyword_field"
}
}
}
4. prefix query
prefix query는 주어진 prefix로 시작하는 term을 찾습니다. 예를 들어, "E"로 시작하는 값을 가지는 문서를 찾으려면 다음과 같이 사용할 수 있습니다.
GET http://localhost:9200/search_test_index/_search
{
"query": {
"prefix": {
"keyword_field": {
"value": "E"
}
}
}
}
5. wildcard query
wildcard query는 주어진 와일드카드 패턴으로 매칭되는 term을 찾습니다. 예를 들어, "la"와 같은 패턴으로 매칭되는 값을 가지는 문서를 찾으려면 다음과 같이 사용할 수 있습니다.
GET http://localhost:9200/search_test_index/_search
{
"query": {
"wildcard": {
"keyword_field": {
"value": "*la*"
}
}
}
}
6. regexp query
정규표현식(regular expression)으로 매칭되는 term을 찾습니다. 이때, 정규표현식 패턴을 사용하여 검색할 수 있습니다.
GET http://localhost:9200/search_test_index/_search
{
"query": {
"regexp": {
"keyword_field": {
"value": "E[ls]+ticsearch"
}
}
}
}
7. fuzzy query
텀의 스펠링이나 철자가 약간 다른 경우에도 매칭되는 term을 찾습니다. fuzziness 파라미터를 이용하여 모호성(허용 가능한 오차 범위)을 지정할 수 있습니다.
GET http://localhost:9200/search_test_index/_search
{
"query": {
"fuzzy": {
"keyword_field": {
"value": "elasticserch",
"fuzziness": 2
}
}
}
}
8. bool query
여러 개의 다른 query를 조합하여 사용할 수 있습니다. must, must_not, should 파라미터를 사용하여 query를 조합할 수 있습니다.
GET http://localhost:9200/search_test_index/_search
{
"query": {
"bool": {
"must": [
{ "match": { "text_field": "Elasticsearch" } },
{ "range": { "date_field": { "gte": "2022-03-01" } } }
],
"must_not": [
{ "term": { "boolean_field": false } }
],
"should": [
{ "term": { "integer_field": 10 } },
{ "term": { "integer_field": 42 } }
]
}
}
}
위 예시에서는 text_field에서 Elasticsearch가 포함되어 있고, date_field가 2022-03-01 이후인 document를 찾으며, boolean_field가 false가 아닌 document를 찾습니다. 그리고 integer_field가 10 또는 42인 document 중에 하나 이상을 찾습니다.
※ must: must에 포함되는 구문은 모두 포함되어야 하는 조건 (AND)
※ must_not: 모두 포함되면 안되는 조건 (NOT)
※ should: should 조건 중 1개 이상 만족하면 됨. (OR)
'BigData > ElasticSearch' 카테고리의 다른 글
Elasticsearch 노드의 종류와 역할 (feat 동작 흐름) (0) | 2023.03.22 |
---|---|
Elasticsearch에서 사용되는 주요 용어 10가지 (0) | 2023.03.21 |
초보자를 위한 Elasticsearch 시작하기: CRUD (0) | 2023.03.19 |
Elasticsearch 주요 field data types (V7.10 기준) (0) | 2023.03.17 |
Elasticsearch에서 동적 매핑과 필드 정의하기 (0) | 2023.03.13 |