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 필드를 사용한다.