'Elastic Search/01. Getting Started'에 해당되는 글 21건

  1. 2015/04/22 용비 16. Exploring Your Data - The Search API
  2. 2015/04/22 용비 15. Exploring Your Data - Loading the Sample Dataset
  3. 2015/04/22 용비 14. Exploring Your Data - Sample Dataset
  4. 2015/04/21 용비 13. Modifying Your Data - Batch Processing
  5. 2015/04/21 용비 12. Modifying Your Data - Deleting Documents

[The Search API]

이제 간단한 검색을 시작해 보자. 검색을 실행하는 기본적인 2가지 방법이 있다. 하나는 REST Request URI 검색 파라미터를 보내는 것이고, 다른 하나는 REST Request Body 검색 파라미터를 보내는 것이다. Request Body 보내는 방법은 표현적이고 readable JSON 포맷으로 검색에 대한 정의를 있다. 우리는 Request URI 파라미터를 보내는 방법을 예제로 해보겠지만, tutorial 나머지 부분에서는 전부 Request Body 파라미터를 보내는 방법을 사용할 것이다.


검색에 대한 REST API _search endpoint 통해 접속할 있다. 다음 예제는 bank index 모든 document 리턴한다.


curl 'localhost:9200/bank/_search?q=*&pretty'


먼저 Search Call 해부해 보자. 우리는 _search endpoint 사용하여 bank index 검색 중이다. 그리고 q=* 파라미터는 index내의 모든 document 매칭하도록 Elasticsearch에 지시한다. Pretty 파라미터는, 다시 말하지만, Elasticsearch에게 pretty-printed JSON 결과를 리턴하라고 말하는 것이다.


응답 결과의 일부분은 다음과 같다.


curl 'localhost:9200/bank/_search?q=*&pretty'
{
 
"took" : 63,
 
"timed_out" : false,
 
"_shards" : {
  
"total" : 5,
  
"successful" : 5,
  
"failed" : 0
 
},
 
"hits" : {
  
"total" : 1000,
  
"max_score" : 1.0,
  
"hits" : [ {
    
"_index" : "bank",
    
"_type" : "account",
    
"_id" : "1",
    
"_score" : 1.0, "_source" : {"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}
  
}, {
    
"_index" : "bank",
    
"_type" : "account",
    
"_id" : "6",
    
"_score" : 1.0, "_source" : {"account_number":6,"balance":5686,"firstname":"Hattie","lastname":"Bond","age":36,"gender":"M","address":"671 Bristol Street","employer":"Netagy","email":"hattiebond@netagy.com","city":"Dante","state":"TN"}
  
}, {
    
"_index" : "bank",
    
"_type" : "account",


응답 결과에서 우리는 다음 항목을 있다.

  • took : Elasticsearch 검색 실행에 걸린 시간 (ms)
  • timed_out : 검색 타임 아웃 발생 여부
  • _shards : 얼마나 많은 shard 검색했는지. 성공한 shard , 실패한 shard
  • hits : 검색 결과
  • hits.total : 검색된 전체 document
  • hits.hits : 검색된 실제 Array (기본적으로는 처음 10)
  • _score, max_score : 불필요한 필드 (무시)

Request Body 이용하여 동일한 검색을 수행하는 경우는 다음과 같다.

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match_all": {} }
}'


차이점은 URI q=* 전달하는 대신에 POST 사용하여 _search API Request Body JSON 스타일의 쿼리를 보낸 것이다. 다음 섹션에서 JSON query 대해서 논의할 것이다.


응답 결과는 다음과 같다.


curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match_all": {} }
}'

{
 
"took" : 26,
 
"timed_out" : false,
 
"_shards" : {
  
"total" : 5,
  
"successful" : 5,
  
"failed" : 0
 
},
 
"hits" : {
  
"total" : 1000,
  
"max_score" : 1.0,
  
"hits" : [ {
    
"_index" : "bank",
    
"_type" : "account",
    
"_id" : "1",
    
"_score" : 1.0, "_source" : {"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}
  
}, {
    
"_index" : "bank",
    
"_type" : "account",
    
"_id" : "6",
    
"_score" : 1.0, "_source" : {"account_number":6,"balance":5686,"firstname":"Hattie","lastname":"Bond","age":36,"gender":"M","address":"671 Bristol Street","employer":"Netagy","email":"hattiebond@netagy.com","city":"Dante","state":"TN"}
  
}, {
    
"_index" : "bank",
    
"_type" : "account",
    
"_id" : "13",


여러분이 검색 결과를 받았을 , Elasticsearch request 완벽하게 수행하고, 어떤 종류의 server-side resource 정보를 가지고 있지 않고, 결과에 대한 커서도 오픈하고 있지 않다. 이것은 SQL like 다른 플랫폼에서 대용량의 결과를 조회할 경우, 부분적으로 data subset 유지하거나 server-side stateful cursor open하고 있어서 서버로 다음 결과를 fetch하는 요청을 보내면 continuous하게 다음 결과를 가져오는 경우와 다른 점이다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/700

[Loading the Sample Dataset]

여러분은 샘플 dataset (accounts.json) https://github.com/bly2k/files/blob/master/accounts.zip?raw=true 에서 다운로드 받을 있다. 압축을 현재 directory 풀고, 다음과 같이 cluster data load 보자.


curl -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary @accounts.json
curl
'localhost:9200/_cat/indices?v'


응답 결과는 다음과 같다.


curl 'localhost:9200/_cat/indices?v'
health index pri rep docs
.count docs.deleted store.size pri.store.size
yellow bank   
5   1       1000            0    424.4kb        424.4kb


이것으로 bank index (account type 아래) 1000개의 document 성공적으로 bulk index되었음을 있다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/699

[Sample Dataset]

, 이제 우리는 기본에 대해서 잠깐 들여다 보았다. 이제 실제적인 dataset으로 작업을 수행해 보자. 여기 가상의 고객 은행 계좌 정보를 담고 있는 JSON document 준비했다. Document Schema 다음과 같다.


{
  
"account_number": 0,
  
"balance": 16623,
  
"firstname": "Bradshaw",
  
"lastname": "Mckenzie",
  
"age": 29,
  
"gender": "F",
  
"address": "244 Columbus Place",
  
"employer": "Euron",
  
"email": "bradshawmckenzie@euron.com",
  
"city": "Hobucken",
  
"state": "CO"
}


데이터는 www.json-generator.com 에서 생성되었다. 따라서 실제 값과 데이터의 semantics 랜덤으로 생성된 것이므로 무시하기 바란다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/698

[Batch Processing]

개별 document index, update, delete하기 위하여 elasticsearch _bulk API 통해서 batch 위의 작업을 수행할 있는 기능을 제공한다. 기능은 가능한 적은 network roundtrip (왕복)으로 가능한 빠르게 여러 작업을 효율적으로 수행하기 위한 메커니즘을 제공하는데 중요하다.


빠른 예제로, 다음 예제는 2개의 document 하나의 bulk 작업으로 index한다. (ID 1 : John Doe, ID 2 : Jane Doe)


curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d '
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }
'


다음 예제는 ID 1 첫번째 document 업데이트하고, ID 2 두번째 document 삭제하는 하나의 bulk operation이다.


curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d '
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}
'


위의 delete action 대하여 삭제할 document ID 필요하고, source document 대한 다른 내용이 없음을 주목하라.


Bulk API 순차적으로 모든 action 실행한다. 어떤 이유에서건 하나의 action 실패하면 다음에 남아 있는 operation 계속해서 진행한다. Bulk API 작업이 완료되면, action 대한 status 제공한다. 따라서, 어느 action 성공하고 실패했는지 있다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/697

[Deleting Documents]

Document 삭제하는 것은 정말 간단하다. 다음 예제는 ID 2 이전 customer document 어떻게 삭제하는지를 보여준다.


curl -XDELETE 'localhost:9200/customer/external/2?pretty'


Query 조건을 입력하여 매칭되는 여러 document 한번에 삭제할 수도 있다. 다음 예제는 "John"이라는 이름을 가진 모든 customer 어떻게 삭제하는지를 보여준다.


curl -XDELETE 'localhost:9200/customer/external/_query?pretty' -d '
{
  "query": { "match": { "name": "John" } }
}'


위의 URI query 의해 삭제됨을 의미하는 _query 변경되었음에 유의하라. 삭제할 query body 있다. 그러나 여전히 DELETE를 사용한다. Query 문법에 대해서는 걱정하지 않아도 된다. tutorial 뒤에서 다룰 것이다.


받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/696