본문 바로가기

프로그래밍/ElasticSearch

Elasticsearch 명령어 모음

 

INDEX, DOCUMENT CRUD

INDEX 생성

PUT [인덱스]

PUT test_index
{
  "settings": {
    "analysis":{
        "analyzer":{
          ...
        },
        "tokenizer":{
          ...
        },
        "filter":{
            ...
        }
    }
  }
}

 

모든 INDEX 확인

GET _cat/indices?v

 

특정 INDEX 확인

GET [인덱스]?pretty

pretty는 json 형식으로 보기 위해서 추가

 

특정 INDEX 삭제

DELETE [인덱스]

 

특정 INDEX 열기

POST [인덱스]/_open

 

특정 INDEX 닫기

POST [인덱스]/_close

 

DOCUMENT 생성

PUT [인덱스]/_doc/[도큐먼트ID]

PUT test_index/_doc/test1

{
  "name":"테스트1",
  "content":"테스트1 내용입니다."
}

test1 도큐먼트 생성됨

 

POST [인덱스]/_doc

PUT test_index/_doc

{
  "name":"테스트1",
  "content":"테스트1 내용입니다."
}

test1 도큐먼트 생성됨

 

PUT, POST의 다른점은 POST는 도큐먼트ID를 입력하지 않아도 Elasticsearch에서 _id 값을 자동으로 생성함

 

DOCUMENT 업데이트

PUT [인덱스]/_doc/[도큐먼트ID]

PUT test_index/_doc/test1

{
  "name":"테스트1",
  "content":"테스트1 내용입니다."
}

같은 도큐먼트ID test1로 설정을 하면

내용이 업데이트 됩니다.

 

POST [인덱스]/_update/[도큐먼트ID]

POST test_index/_update/test1

{
  "content":"테스트1 수정 내용입니다."
}

위의 PUT을 이용해서도 가능하나 PUT으로 할 경우 전체 도큐먼트 내용을 입력해야 함

도큐먼트의 특정 필드만 업데이트 하고 싶을 경우 _update 이용

결과를 확인하면 content 내용이 변경된걸 확인 할 수 있습니다.

 

DOCUMENT 조회

GET [인덱스]/_doc/[도큐먼트ID]

GET test_index/_doc/test1

 

DOCUMENT 삭제

DELETE [인덱스]/_doc/[도큐먼트ID]

DELETE test_index/_doc/test1

URI 검색

단건검색

GET [인덱스]/_search?q=[검색어]

GET test_index/_search?q=테스트

 

AND, OR, NOT 검색

GET [인덱스]/_search?q=[검색어1] AND [검색어2]
GET [인덱스]/_search?q=[검색어1] OR [검색어2]
GET [인덱스]/_search?q=[검색어1] NOT [검색어2]

GET test_index/_search?q=테스트1 AND 테스트2
GET test_index/_search?q=테스트1 OR 테스트2
GET test_index/_search?q=테스트1 NOT 테스트2

* AND, OR, NOT대문자 필수

 

특정 필드에서 검색

GET [인덱스]/_search?q=[필드명]:[검색어2]

GET test_index/_search?q=content:테스트1

QUERY 검색

Elasticsearch의 QueryDSL은 JSON형식으로 작성되어야 함

 

match쿼리

일치 정보 조회

 

단건검색

GET [인덱스]/_search

{

    "query": {

         "match": {

              [필드명]:[검색어]

          }

     }

}

GET test_index/_search
{
  "query": {
    "match": {
      "content": "테스트"
    }
  }
}

content 필드의 내용 중 '테스트' 키워드로 검색

 

OR 검색

GET [인덱스]/_search

{

    "query": {

         "match": {

              [필드명]:[검색어1 검색어2]

          }

     }

}

GET test_index/_search
{
  "query": {
    "match": {
      "content": "테스트1 테스트2"
    }
  }
}

content 필드의 내용 중 '테스트1''테스트2' 키워드로 OR 검색

"content": "테스트1 테스트2" 에서 '테스트1'과 '테스트2' 사이의 띄어쓰기OR 검색

 

검색조건값설정

GET [인덱스]/_search

{

    "query": {

         "match": {

              [필드명]: {

                  "query": [검색어1 검색어2],

                  "operator": [검색조건값]

              }

          }

     }

}

GET test_index/_search
{
  "query": {
    "match": {
      "content": {
        "query": "테스트1 테스트2",
        "operator": "and"
      }
    }
  }
}

operator에 and, or, not을 입력해 검색조건을 변경 적용할 수 있다.

 

match_phrase쿼리

검색어의 순서까지 고려한 검색

slop 옵션을 통해 검색어 사이에 다른 검색어 허용 수를 설정할 수 있음

 

GET [인덱스]/_search

{

    "query": {

         "match_phrase": {

              [필드명]:[검색어1] [검색어2]

          }

     }

}

GET test_index/_search
{
  "query": {
    "match_phrase": {
      "content": "테스트1 테스트2"
    }
  }
}

 

GET [인덱스]/_search

{

    "query": {

         "match_phrase": {

              [필드명]:[검색어1] [검색어2],

              "slop": 1

          }

     }

}

GET test_index/_search
{
  "query": {
    "match_phrase": {
      "content": "테스트1 테스트2", 
      "slop": 1, 
    }
  }
}

slop: 1 설정으로 검색어 '테스트1''테스트2' 사이에 다른 검색어 1개 허용

 

query_string쿼리

URI검색의 q파라미터 이용과 같음

JSON 본문에 query_string을 이용해서 검색

 

일반적인 검색을 할 경우

AND, OR, NOT 사용 가능

GET test_index/_search
{
  "query": {
    "query_string": {
      "default_field": [필드명],
      "query": "[검색어1] AND [검색어2]"
    }
  }
}

GET test_index/_search
{
  "query": {
    "query_string": {
      "default_field": "content",
      "query": "테스트1 AND 테스트2"
    }
  }
}

 

match_phrase 처럼 검색을 할 경우 \" 따옴표 안에 검색어 입력

GET test_index/_search
{
  "query": {
    "query_string": {
      "default_field": [필드명],
      "query": \"[검색어1] [검색어2]\""
    }
  }
}

GET test_index/_search
{
  "query": {
    "query_string": {
      "default_field": "content",
      "query": "\"테스트1 테스트2\""
    }
  }
}

 

복합적으로 검색할 경우

GET test_index/_search
{
  "query": {
    "query_string": {
      "default_field": [필드명],
      "query": "([검색어1] AND [검색어2]) OR \"[검색어3] [검색어4]\""
    }
  }
}

GET test_index/_search
{
  "query": {
    "query_string": {
      "default_field": "content",
      "query": "(테스트1 AND 테스트2) OR \"테스트3 테스트4\""
    }
  }
}

 

Bool 검색

블라블라 작성예정


Range 검색

블라블라 작성예정


 

'프로그래밍 > ElasticSearch' 카테고리의 다른 글

Elasticsearch _termvectors  (0) 2020.08.28
Elasticsearch 특징  (0) 2020.08.26
Elasticsearch 7.9 + Kibana 7.9 설치 및 실행  (0) 2020.08.26
Elasticsearch 설치  (0) 2016.07.18