1. JSON 형태의 샘플 dataset import
- 샘플 데이터셋 출처 : accounts.json
   출처 : https://github.com/bly2k/files/blob/master/accounts.zip?raw=true
- 샘플 데이터셋 import
  ftp로 특정 폴더 하위에 account.json 위치시킴
- JOSN 형태의 dataset elasticsearch에 import
 curl -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary "@accounts.json"
- 확인
curl 'localhost:9200/_cat/indices?v'
결과)
health status index  pri rep docs.count docs.deleted store.size pri.store.size
 yellow open   bank     5   1       1000            0    454.8kb        454.8kb
 yellow open   movies   5   1          1            0      4.1kb          4.1kb

참고)
 _cat 명령어는 전체적인 정보를 보도록 함(v파라미터는 전체적인 정보의 컬럼을 표시여부)

 

 

 

2. 기본 Search (/_search)
 GET /_search 으로 검색할 경우
curl -XGET 'localhost:9200/_search?pretty' -p

결과
{
    "took": 21,
    "timed_out": false,
    "_shards": {
       "total": 10,
       "successful": 10,
       "failed": 0
    },
    "hits": {
       "total": 1001,
       "max_score": 1,
       "hits": [
          {
             "_index": "bank",
             "_type": "account",
             "_id": "25",
             "_score": 1,
             "_source": {
                "account_number": 25,
                "balance": 40540,
                "firstname": "Virginia",
                "lastname": "Ayala",
                "age": 39,
                "gender": "F",
                "address": "171 Putnam Avenue",
                "employer": "Filodyne",
                "email": "이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다.",
                "city": "Nicholson",
                "state": "PA"
             }
          },
          {
             "_index": "bank",
             "_type": "account",
             "_id": "44",
             "_score": 1,
             "_source": {
                "account_number": 44,
                "balance": 34487,
                "firstname": "Aurelia",
                "lastname": "Harding",
                "age": 37,
                "gender": "M",
                "address": "502 Baycliff Terrace",
                "employer": "Orbalix",
                "email": "이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다.",
                "city": "Yardville",
                "state": "DE"
             }
          },
  --이하생략--


1) hits
      - 쿼리 결과 갯수

2) hits 배열
 - hits 배열은 처음 10개의 결과를 반환
 - hits 배열에는 document의 _index, _type, _id와 _source 필드를 가지고 있고, 바로 사용 가능하다.
  - _score 필드는 쿼리와 document가 얼마나 매칭이 잘 되는지 연관 점수(relavance score)이다. 보통 연관성이 높은 필드를 먼저 반환한다.

 

 

 

3. Mult-index, Multitype
특정 인덱스에서 검색하기 위해서는 index와 type을 지정할 수 있다.
1) /_search : 저체 index와 type 검색
2) /bank/_search : bank 인덱스에서 모든 type 검색
3)/bank,movies/_search : bank와 movies에 있는 모든 타입 검색
4)/b*,m*/_search : b나 m로 시작하는 모든 인덱스 검색
5)/bank/account_number/_search : bank인덱스에 있는 account_number 타입 검색
6)/bank,movies/account_number,title/_search ; bank나 movies에 인덱스나 account_number, title 타입을 검색
7)/_all/title,account_number/_search : 모든 인덱스에서 title, account_number 타입 검색

 

 

 

4. 페이지 처리(Pagination)
- size : 리턴되는 갯수, 기본값 10
- from : 스킵되는 결과의 갯수, 기본값 0
예)
GET /_search?size=5
 -> from 이 생략된 형태로 0에서 부터 5개 표시
GET /_search?size=5&from=5
 ->5에서 부터 5개 표시
GET /_search?size=5&from=10
 ->10에서 부터 5개 표시

 

 

 

5. ElasticSearch 검색 방법의 종류
- query-string 버젼 : query string으로 파라미터를 보냄
- full request body 버젼 : query DSL이라 불리는 JSON request body에 검색 언어를 담는 방법

 

 

 

6. Lite 검색 (Lite Search)
예) GET /_all/tweet/_search?q=tweet:elasticsearch
- document에 tweet이나 ealsticsearch를 포함

예) GET /_search?q=%2Bname%3Ajohn+%2Btweet%3Amary
 +name:john +tweet:mary
이름이 john이고 tweet이 mary 검색, +를 다음과 같이 표시

참고)
 +의미 : 반드시 포함되어야함
-의미 : 반드시 포함되지 않아야함

 

 

 

7. _all 필드
- document 를 검색할 때, Elasticsearch는 모든 필드의 string 값을 모은다.
예) {
     "tweet":    "However did I manage before Elasticsearch?",
     "date":     "2014-09-14",
     "name":     "Mary Jones",
     "user_id":  1
 }
 ==> 내부적으로는 이런식으로 검색을 한다.
 "However did I manage before Elasticsearch? 2014-09-14 Mary Jones 1"

- query-string 검색에서 특정 필드이름을 지정하지 않으면, _all 필드를 사용한다.