R&D/클라우드

Elastic Search Query (v5.x)

sunshout 2018. 10. 7. 23:47

출력 관련

출력 필터링

* _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