Skip to content

Elastic Search

jaeseok.an edited this page Aug 6, 2020 · 12 revisions

기본

  • mapping 없을 때 동작
    • string type이면 모든 field가 term/keyword 두 개 생성. keyword는 256이상이면 truncate
    • number type은 long
  • Text type
    • 형태소 분석용이므로, aggregation 이나 정렬이 불가능
  • Keyword type
    • ignore_above 256 이면 256을 넘는 경우 empty로 저장되므로 조심할것
  • Aggregation
    • query의 결과 size와 관계없이 query 전체에 대해 aggregation은 동작함
    • query 한 결과에 대해 수행 하거나 query가 없으면 전체 문서에 수행
  • Query Debugging
POST movie/_validate/query?rewrite=true
 {
    "query" : {...} 
 }
  • rollup

    • index 변경량 보기
    GET _cat/indices/myinde,rollup?v
    
  • 새로운 index생성시 mapping을 template으로 부터 적용

    • 다음은 nginx-access-log 라는 템플릿을 생성하는 것으로, 인덱스가 nginx-access-* 에 해당하는 패턴이라면, 지정된 mapping 으로 인덱스를 생성한다.
    템플릿 생성하기
    다음은 nginx-access-log 라는 템플릿을 생성하는 것으로, 인덱스가 nginx-access-* 에 해당하는 패턴이라면, 지정된 mapping 으로 인덱스를 생성한다.
    ## nginx-access-log 템플릿 생성
    curl -X "PUT" "http://my-elasticsearch-server-host:9200/_template/nginx-access-log" \
     -H 'Content-Type: application/json; charset=utf-8' \
     -d $'{
    "index_patterns": [
     "nginx-access-*"
    ],
    "mappings": {
    "log": { // type name
      "properties": {
        "ip": {
          "type": "text"
        },
        "host": {
          "type": "keyword"
        },
        "uri": {
          "type": "text"
        },
        "datetime": {
          "type": "date"
        },
        "@timestamp": {
          "type": "date"
        }
      }
    }
    ........
      }
    }'
    

사용 예제

  • 생성

    • curl -XPUT 'localhost:9200/customer?pretty
  • index 리스트

    • curl -XGET 'localhost:9200/_cat/indices?v'
  • insert 1 document

    • curl -XPOST 'localhost:9200/customer2/info/1?pretty' -H 'Content-Type: application/json' -d '{ "name": "victolee" }'

  • 모든 index의 size보는 방법

    • GET _cat/indices/everjs-2018*,everjs_rollup_idx?v

운영

  • elasticsearch
    sudo docker run -d --restart="always" --name elasticsearch \
    -p 9200:9200 \
    -p 9300:9300 \
    -u 1000 \
    -e "discovery.type=single-node" \
    -e "bootstrap.memory_lock=true" --ulimit memlock=-1:-1 \
    -v `pwd`/data:/usr/share/elasticsearch/data \
    -v `pwd`/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
    -v `pwd`/jvm.options:/usr/share/elasticsearch/config/jvm.options \
    docker.elastic.co/elasticsearch/elasticsearch:6.7.0
    
    # kibana
    sudo docker run -d --restart="always" --name kibana \
    -p 5601:5601 \
    -e SERVER_NAME=aergo-kibana \
    --link elasticsearch:elasticsearch \
    -e ELASTICSEARCH_hosts=http://localhost:9200 \
    docker.elastic.co/kibana/kibana:6.7.0
    # --network=aergo-horde \

쿼리 예제

Elastic Query Example

test

Clone this wiki locally