elasticsearch 학습 노트 (28) - Elasticsearch 실전 각종query 검색

4157 단어 elasticsearch

각종query 검색 문법


match_all

GET /{index}/_search
{
  "query": {
    "match_all": {}
  }
}

match

GET /{index}/_search
{
  "query": {
    "match": {
      "FIELD": "TEXT"
    }
  }
}

multi match

GET /{index}/_search
{
  "query": {
    "multi_match": {
      "query": "",
      "fields": []
    }
  }
}

range query

GET /{index}/_search
{
  "query": {
    "range": {
      "FIELD": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

term query

GET /{index}/_search
{
  "query": {
    "term": {
      "FIELD": {
        "value": "VALUE"
      }
    }
  }
}

terms query

GET /{index}/_search
{
  "query": {
    "terms": {
      "FIELD": [
        "VALUE1",
        "VALUE2"
      ]
    }
  }
}

exist query

GET /{index}/_search
{
  "query": {
    "exists": {
       "field": ""
    }
  }
}

다중 검색 조건 조합 조회


bool: must, must_not, should, filter


모든 하위 조회는 문서의 관련도 점수를 계산한 다음bool은 모든 점수를 종합하여 하나의 점수로 합친다. 물론 filter는 점수를 계산하지 않는다.예:
{
    "bool": {
        "must":     { "match": { "title": "how to make millions" }},
        "must_not": { "match": { "tag":   "spam" }},
        "should": [
            { "match": { "tag": "starred" }}
        ],
        "filter": {
          "bool": { 
              "must": [
                  { "range": { "date": { "gte": "2014-01-01" }}},
                  { "range": { "price": { "lte": 29.99 }}}
              ],
              "must_not": [
                  { "term": { "category": "ebooks" }}
              ]
          }
        }
    }
}

GET /{index}/_search
{
  "query": {
    "constant_score": {
      "filter": {},
      "boost": 1.2
    }
  }
}

잘못된 검색 위치 지정


일반적으로 매우 복잡하고 방대한 검색에 사용된다. 예를 들어 백 줄에 달하는 검색을 한꺼번에 썼을 때, 이 때 먼저validateapi로 검색이 합법적인지 검증할 수 있다.
GET /employee/_validate/query?explain
{
  "query": {
    "constant_score": {
      "filter": {},
      "boost": 1.2
    }
  }
}
{
  "valid" : false,
  "error" : "ParsingException[Failed to parse]; nested: IllegalArgumentException[query malformed, empty clause found at [4:18]];; java.lang.IllegalArgumentException: query malformed, empty clause found at [4:18]"
}
GET /employee/_validate/query?explain
{
  "query": {
    "constant_score": {
      "filter": {
        "term": {
          "name": "tom"
        }
      },
      "boost": 1.2
    }
  }
}
{
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "valid" : true,
  "explanations" : [
    {
      "index" : "employee",
      "valid" : true,
      "explanation" : "(ConstantScore(name:tom))^1.2"
    }
  ]
}

검색 결과 정렬 규칙 사용자 정의


기본적으로 되돌아오는 문서는 _score 내림차순으로 배열된만약 우리가 스스로 정렬 규칙을 정의하고 싶다면 어떻게,sort만 사용하면 된다
#  
"sort": [
    {
      "FIELD": {
        "order": "desc"
      }
    }
  ]
#  
GET /{index}/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "exists": {
          "field": ""
        }
      },
      "boost": 1.2
    }
  },
  "sort": [
    {
      "FIELD": {
        "order": "desc"
      }
    }
  ]
}

좋은 웹페이지 즐겨찾기