P.S.
아래 내용은 Elastic Search 5.x 에서는 동작하지 않을 수 있습니다. (Deplicated)
출력 관련
출력 필터링
* fields: [필드, ...]
기본적으로는 매치된 문서의 모든 필드가 출력된다. 일부 필드만 출력하고 싶을 땐 "fields"를 추가하면 된다.
예제) 필드 중에 user, created_at 만 출력함
GET /_search
{
"fields" : ["user", "created_at"],
"query" : {
"term" : {"title" : "민주노총"}
}
}
페이지 나누기 (Pagination)
* from: 값 (default: 0)
* size: 값 (default: 10)
예제) 검색 결과 중 10번째 문서부터 5개의 문서 가져오기
GET /_search
{
"from": 10,
"size": 5,
"query" : {
"term" : {"title" : "민주노총"}
}
}
정렬
* sort: [{필드: {옵션, ...}}, ...]
예) 작성자 오름차순, 작성일 내림차순, 연관성 순으로 정렬
GET /_search
{
"sort": [
{"writer": {"order": "asc""}},
{"created_at": {"order": "desc""}},
"_score"
],
"query" : {
"term" : {"title" : "민주노총"}
}
}
쿼리와 필터
쿼리 | 필터 |
---|---|
연관성 | YES/NO |
캐시 불가 | 캐시 가능 |
느림 | 빠름 |
성능을 위해서는 필터를 먼저 한 뒤에 쿼리를 하는 것이 효과적이다.
GET /_search
{
"query": {
"filtered": {
"filter": {
"term": {"genre": "편지"}
},
"query": {
"match": {"title": "민주노총"}
}
}
}
}
필터
필터는 문서를 조건에 따라 참/거짓으로 평가하고, 참인 것만 골라낸다.
문서가 지정된 조건과 얼마나 유사한지(_score)는 평가하지 않는다. boost 옵션을 지정하지 않으면, 매치된 문서의 유사도(_score)는 모두 1점이다.
유사도를 평가하지 않기 때문에 쿼리에 비해 성능이 좋다. 캐시도 지원한다.
term 필터
* query: filtered: filter: term: <Field>: <Term>
지정된 필드에 지정된 텀이 들어있는 문서와 매치된다. 완전히 일치할 때만 매치한 것으로 본다.
예제) 장르가 편지인 문서
GET /_search
{
"query": {
"filtered": {
"filter": {
"term": {"genre": "편지"}
}
}
}
}
terms 필드
* query: filtered: filter: term: <Field>: [<Term1>, ...]
term 필터와 유사하지만, 복수의 텀을 배열로 지정할 수 있다. (OR 조건)
예제) 키워드에 민주노총 또는 민주노동당이 포함된 문서
GET /_search
{
"query": {
"filtered": {
"filter": {
"terms": {"keyword": ["민주노총", "민주노동당"]}
}
}
}
}
bool 필터
query: filtered: filter: bool: must|should|must_not: [필터]
query: filtered: filter: bool: must|should|must_not: {옵션}
필터를 AND, OR, NOT 논리 연산으로 결합하는 데 쓰인다.
- must: 문서가 모든 필터에 매치되어야 매치된다. (AND)
- should: 문서가 하나의 필터라도 매치되면 매치된다. (OR)
- must_not: 문서가 필터에 매치되지 않아야 매치된다. (NOT)
예) 장르가 편지, 키워드가 비정규직이고, 키워드에 현대자동차 또는 파업이 포함돼 있으며, 키워드에 현대중공업이 없는 문서
GET /_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{"term": {"genre": "편지"}},
{"term": {"keyword": "비정규직"}}
],
"should": [
{"term": {"keyword": "현대자동차"}},
{"term": {"keyword": "파업"}}
],
"must_not": [
{"term": {"keyword": "현대중공업"}}
]
}
}
}
}
}
예제는 모두 참조에서 가져온 것입니다.
참조: https://bakyeono.net/post/2016-08-20-elasticsearch-querydsl-basic.html