반응형
환경 설정
- jvm.options
- elasticsearch.yml (실행 호나경 설정)
- cluster.name: <클러스터명>
- node.name: <노드명>
- path.data: [경로]
- 색인된 데이터를 저장하는 경로를 지정. 디폴트는 엘라스틱서치가 설치된 홈 경로 아래의 data 폴더. 배열 형태로 여러개의 경로값의 입력이 가능하기 때문에 한 서버에서 디스크 여러개를 사용 가능
- path.logs: <경로>
- bootstrap.memory_lock: true
- 엘라스틱서치가 사용중인 힙메모리 영역을 다른 자바 프로그램이 간섭 못하도록 미리 점유하는 설정. 엘라스틱서치는 많은 메모리를 필요로 하기 때문에 항상 true로 놓고 사용하는게 좋다.
- http.port: <포트 번호>
- transport.port: <포트 번호>
- 엘라스틱서치 노드들끼리 서로 통신하기 위한 tcp 포트를 설정. default 9300
- discovery.seed_hosts: [<호스트1>, <호스트2>, ...]
- 클러스터 구성을 위해 바인딩 할 원격 노드의 IP 또는 도메인 주소
기본 REST API 명령어
curl -X GET "localhost:9200/_cat"
curl -X GET "localhost:9200/_cat/indices?v"
curl -X GET "localhost:9200/_all/_search?pretty"
# 기본 CRUD
curl -X GET "localhost:9200/customer/_search?pretty"
curl -X POST "localhost:9200/customer/_doc?pretty" - H "Content-Type: application/json" -d "{\"name\": \"gildong\"}"
curl -X PUT "localhost:9200/customer/_doc/1?pretty" - H "Content-Type: application/json" -d "{\"name\": \"gildong2\"}"
curl -X PUT "localhost:9200/customer/_doc/1?pretty"
curl -X PUT "localhost:9200/customer/_doc/1?pretty&filter_path=_source"
curl -X PUT "localhost:9200/customer/_doc/1?pretty&filter_path=_source.name"
curl -X DELETE "localhost:9200/customer/_doc/1?pretty"
curl -X DELETE "localhost:9200/customer?pretty"
Search API
아래 링크에서 테스트용 데이터를 다운받고 등록한다.
Sample Bulk Data
# 벌크 데이터 등록
curl -X POST "localhost:9200/bank/account/_bulk?pretty&refresh" -H "Content-Type: application/json" --data-binary "@accounts.json"
# 검색
curl -X GET "localhost:9200/bank/account/_search?pretty"
curl -X GET "localhost:9200/bank/account/_search?q=age:39&pretty"
curl -X GET "localhost:9200/bank/account/_search?q=age:<21pretty"
Response
- took : 검색하는데 소요된 시간 (단위: ms)
- timed_out : rjatortl tlrks chrhk duqn
- _shards : 검색한 샤드 수 및 검색에 성공 또는 실패한 샤드의 수
- hits : 검색 결과
- total: 검색 조건과 일치하는 문서의 총 개수
- max_Score: 검색 조건과 결과 일치 수준의 최댓값
- hits : 검색 결과에 해당하는 실제 데이터들 (기본값으로 10이 설정되며, size를 통해 조절 가능)
- _score : 해당 도큐먼트가 지정된 검색 쿼리와 얼마나 일치하는지를 상대적으로 나타내는 숫자 값이며 높을수록 관련성이 높다
- sort : 결과 정렬 방식을 말하며 기본은 _score 내림차순(desc)이고, 다른 항목일 경우 오름차순(asc)으로 끼본 설정됨 (_score 기준일 경우 노출되지 않음)
Query DSL
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html
질의(Query) & 필터(Filter)
- 질의(Query) : 루씬 내부의 득점(score) 알고리즘을 사용해 일치하는 결과의 점수를 계산하는 것
- 필터(Filter) : 점수를 계산하지 않고 일치하는 것만 찾는것. 일반적으로 빠르며 캐시를 지원한다
Query Context & Filter Context
- Query Context
- Query Context에서 사용되는 쿼리절은 "해당 도큐먼트가 쿼리절과 얼마나 잘 일치하는가?"라는 질문에 응답하는데, 도큐먼트가 얼마나 잘 일치하는지를 스코어(_score, 관련성 점수, relevance score)로 표현한다.
- Filter Context
- Filter Context에서 사용되는 쿼리절은 "해당 도큐먼트가 쿼리절과 일치합니까?"라는 질문에 응답하는데, 그 대답은 true 또는 false이며 점수는 계산하지 않는다.
curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d' { "query": { "bool": { "must": [ { "match": { "title": "Search" }}, { "match": { "content": "Elasticsearch" }} ], "filter": [ { "term": { "status": "published" }}, { "range": { "publish_date": { "gte": "2015-01-01" }}} ] } } } '
- Filter Context에서 사용되는 쿼리절은 "해당 도큐먼트가 쿼리절과 일치합니까?"라는 질문에 응답하는데, 그 대답은 true 또는 false이며 점수는 계산하지 않는다.
Scroll
RDBMS의 cursor와 같은 기능을 제공한다.
- search 쿼리에 scroll 값을 추가한다.
- scroll이 생성되면 엘라스틱서치는 지정한 시간만큼 search context를 유지한다.
- 검색 시간을 고려하여 scroll 시간을 정하는게 좋다.
- search context는 지정한 시간이 지나면 자동 소멸되지만, 데이터가 예상한 시간보다 빨리 조회 및 사용될 경우에는 직접 scroll을 삭제해주는게 좋다.
curl -X POST "localhost:9200/customer/_search?scroll=1m&size?pretty" -H "Content-Type: application/json" curl -X POST "localhost:9200/_search?pretty" -H "Content-Type: application/json" -d "{\"scroll\": \"1m\", \"scroll_id\": \"AEFUAESR45SDZF4ASDFAFEEEEE49diASD\"}" curl -X DELETE "localhost:9200/_search/scroll" -H "Content-Type: application/json" -d "{ \"scroll_id\": \"AEFUAESR45SDZF4ASDFAFEEEEE49diASD\"}"
반응형
'개발' 카테고리의 다른 글
Elasticsearch #4 (0) | 2020.06.07 |
---|---|
Elasticsearch #3 (0) | 2020.06.07 |
Elasticsearch #1 (0) | 2020.06.07 |
리눅스 포트 확인 (0) | 2020.06.06 |
유니온파인드 (0) | 2019.07.20 |