1. RDB ElasticSearch 비교
RDB | ElasticSearch |
Database | Index |
Table | Type |
Row | Document |
Column | Field |
2. ElasticSearch Object 생성하기(Indexing) - CRUD에서 Create에 해당
- ElasticSearch 오브젝트의 생성은 indexing을 이용해서 생성함.
- HTTP 의 PUT이나 POST를 이용해서 ElasticSearch 오브젝트를 생성한다.
- 문법
curl -X PUT http://localhost:9200 / index / type / object_id -d '{ <document data> }'
인덱스 타입 Object ID JSON형태의 Document 데이터
- document에 해당 타입의 ID가 없으면 insert,있으면 update를 수행한다.
예)
curl -XPUT "http://localhost:9200/movies/movie/1" -d ' { "title": "Zootopia", "year": "2016", "genre":["action", "animation"] }'
- Movies라는 index(데이터베이스)에 데이터가 저장됨
- movie라는 type(테이블)에 데이터가 저장됨
- Field(컬럼)는 title, year, genre가 있음
- Document(Row)에는 title이 주토피아, 개봉년도(year)가 2016년, 장르(genre)가 액션 및 애니매이션에 해당하는 데이터가 있음
==>> 실습
1) ElasticSearch 서버 실행 (bin 파일 하위의 elasticsearch 실행)
[ec2-user@ ] elasticsearch-2.3.4]$ cd bin
[ec2-user@ bin]$ ./elasticsearch -d
2) 명령어 실행
curl -XPUT "http://localhost:9200/movies/movie/1" -d ' { "title": "Zootopia", "year": "2016", "genre":["action", "animation"] }'
- 명령어로 실행시 하위에 결과가 리턴된다.
3) Sense에서 실행방법
- 상단에 본인 아이피:포트번호(9200) 입력 예) 10.20.30.40:9200
- 왼쪽에 동일한 명령어 입력 후, 오른쪽 화살표(▶)를 누르면 실행이 됨 (참고:단축키 ctrl+enter)
- 오른쪽에 명령어 실행에 대한 결과가 표시된다.
4) 결과값 select 해보기
- select의 경우, HTTP GET 메소드 이용함
- 명령어 : curl -XGET 'http://localhost:9200/movies/movie/1'
- Sense에서 실행
* 참고) elasticsearch에서의 index의 의미는 때에 따라서 다음과 같이 해석될 수 있음
-명사 : RDB에서 database와 유사.
- 동사 : INSERT와 유사
- inverted index : RDB에서 사용하는 index와 유사한 개념. ElasticSearch와 Lucene은 inverted index라는 구조를 사용함.
3. search endpoint
- Elasticsearch에서 검색을 위해서, '_search'라고 하는 endpoint를 사용한다.
- 선택적으로 index와 type을 사용함
- URL 요청은 다음과 같이 보냄 : 인덱스/타입/_search
예) curl -XGET 'http://localhost:9200/_search' : 모든 인덱스들과 타입을 검색을 검색
curl -XGET 'http://localhost:9200/movies/_search' : movies 인덱스에서 모든 타입을 검색을
curl -XGET 'http://localhost:9200/movie/_search' : movices 인덱스 내 movie 타입에서의 document 검색
참고) ElasticSearh에서 get 후에 응답은 hits라는 배열안에 포함한다. 기본적으로 검색은 상위 10개의 결과를 반환한다.