출력 관련
출력 필터링
* _source: [필드, ...]
기본적으로는 매치된 문서의 모든 필드가 출력된다. 일부 필드만 출력하고 싶을 땐 "_source"를 추가하면 된다.
예제) 필드 중에 user, created_at 만 출력함
GET /_search
{
"_source" : ["user", "created_at"],
"query" : {
"term" : {"user" : "choonho"}
}
}
페이지 나누기 (Pagination)
* from: 값 (default: 0)
* size: 값 (default: 10)
예제) 검색 결과 중 10번째 문서부터 5개의 문서 가져오기
GET /_search
{
"from": 10,
"size": 5,
"query" : {
"term" : {"user" : "choonho"}
}
}
정렬
* sort: [{필드: {옵션, ...}}, ...]
예) 작성자 오름차순, 작성일 내림차순, 연관성 순으로 정렬
GET /_search
{
"sort": [
{"writer": {"order": "asc""}},
{"created_at": {"order": "desc""}},
"_score"
],
"query" : {
"term" : {"user" : "choonho"}
}
}
쿼리와 필터
쿼리 | 필터 |
---|---|
연관성 | YES/NO |
캐시 불가 | 캐시 가능 |
느림 | 빠름 |
성능을 위해서는 필터를 먼저 한 뒤에 쿼리를 하는 것이 효과적이다.
GET /_search
{
"query": {
"bool": {
"must": [],
"must_not": [],
"filter": [],
"should": [],
"minimum_should_match" : 1
}
}
}
bool 필터
필터를 AND, OR, NOT 논리 연산으로 결합하는 데 쓰인다.
- must: 문서가 모든 필터에 매치되어야 매치된다. (AND)
- should: 문서가 하나의 필터라도 매치되면 매치된다. (OR)
- must_not: 문서가 필터에 매치되지 않아야 매치된다. (NOT)
특정 prefix로 시작하는 검색
GET /_search { "query": { "prefix" : { "user" : "ki" } } }
특정 시간 대만 검색
{
"query":{
"range":{
"@timestamp":{
"gte":"2015-08-04T11:00:00",
"lt":"2015-08-04T12:00:00"
}
}
}
}
String query를 하고 싶을 때
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html