Skip to content

Posts ElasticSearch 학습 #
Related pages Similar titles

개념이해 #

'검색엔진'

내부구성 #

  • Index -> Type -> Document -> Field 순으로 구성
  • RDB의 Schema는 'Mapping'으로 구성
  • Node: elasticsearch instance
  • 검색 방식
    • concrete field structured query
    • search keyword full text query
    • 또는 두 방식을 조합
  • 다른 건 black-box 지만 다음 세 가지는 이해해라
    • Mapping: 각 필드의 데이터가 어떻게 변환 되는가? (interpreted)
    • Analysis: 검색 가능하도록 어떻게 풀텍스트가 처리 되는지
    • Query DSL: ES에서 제공하는 유연하고, 강력한 쿼리 언어

생각해볼 문제 #

  • EL을 바라보는 시각

    lasticsearch is a distributed document store. It can store and retrieve complex data structures — serialized as JSON documents — in real-time. In other words, as soon as a document has been stored in Elasticsearch, it can be retrieved from any node in the cluster

  • 데이터를 입력하는 초기화 방법
  • 인덱스
    • 모든 데이터가 기본적으로 인덱싱 됨

설치 #

Sample01 #

  1. Document 생성

_meta -d 로 Index를 생성하고 시작할 수 있지만 바로 Document 생성 요청을 날리면, 해당 Index가 없을 때 생성해준다.

curl -XPUT localhost:9200/sampleindex/sampletype/1 '{
    "_id" : "1",
    "name" : "name1"
}'
  1. Document 조회

    curl -XGET localhost:9200/sampleindex/sampletype/1 {"_index":"sampleindex","_type":"sampletype","_id":"1","_version":1,"found":true, "_source" : { "_id" : "1", "name" : "name1" }}

  2. Document 검색 Type 내 검색: curl -XGET localhost:9200/sampleindex/sampletype/_search Index 내 검색

    • curl -XGET localhost:9200/sampleindex/_search
    • Index에 하나의 type만 있어서 그렇지 여러 type이 있다면 위 검색 결과와는 다르게 여러 type이 리턴됨 전체 검색: curl -XGET localhost:9200/_search
  3. Document 상태 보기

curl -XGET localhost:9200/sampleindex/_status

  1. Document 삭제

curl -XDELETE localhost:9200/sampleindex/sampletype/1

Tutorial 01 #

참조: http://joelabrahamsson.com/elasticsearch-101/

  1. Indexing CRUD

Upsert 개념.

update가 되면 수정이 되고 'verion' 필드 숫자가 1 증가함.

  1. Searching 검색 포맷: //_search

  2. .../{host}/_search : 모든 index와 모든 type 검색

  3. .../{host}/{index}/_search: 해당 index 내의 모든 type 검색
  4. .../{host}/{index}/{type}/_search: 해당 index와 type 내의 모든 document 검색

이번에는 QueryDsl.

  • query string query

    • 필드 지정 검색 가능. 아무것도 주지 않으면 기본이 '_all'이 적용되어 전체 필드로 검색 됨
  • Filter

  • Term Filter

  • Mapping

Twitter River plugin #

참조: https://github.com/elasticsearch/elasticsearch-river-twitter

  1. 설치: bin/plugin -install elasticsearch/elasticsearch-river-twitter/2.0.0.RC1
  2. https://github.com/elasticsearch/elasticsearch-river-twitter#prerequisites 링크대로 트위터 인증 하기
  3. 트위터리버 Index(맞나?) 생성

    curl -XPUT localhost:9200/twitter/tweet/_meta -d ' { "type" : "twitter", "twitter" : { "oauth" : { "consumer_key" : "vYxpSwOKWE9uByBYjKkaTw", "consumer_secret" : "IvcltHApCFc6r7JQGdBtqfyQGZOYEdzzOUesyGE9b5E", "access_token" : "37445584-ReWXOpGwdRhF0js3SPGZAHTFLnZFnaTYEfrGUtMNE", "access_token_secret" : "34OzKxxFU6wQbFYePvtuXc41ZytoNHA8vi8S7d1ek9QQA" } }, "index" : { "index" : "twitter", "type" : "status", "bulk_size" : 100 } } '

  4. 실행 결과 (정상이라면..)

    {"_index":"twitter","_type":"tweet","_id":"_meta","_version":1,"created":true}

  5. 조회

Java API #

Client #

http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/client.html 샘플로 학습

REST API #

포맷은 'http://host:port/[index]/[type]/[_action/id] GET, POST, PUT, DELETE의 HTTP Method

CaseStudy #

commercetools #

참조: http://www.elasticsearch.com/case-study/commercetools/

  • 검색을 하려면 ES에 데이터를 어떻게, 언제 넣을 수 있는가? 상품DB는 별도로 있을 텐데?
  • 검색 기능: 지원하는 검색 항목을 보니 '.. price ranges, define attributes such as color and size, and search through a variety of subcategories, with query results delivered quickly and efficiently in a single call ..'
  • 검색 성능:

TODO #

참조 #

Other Posts #