머리말
회사 동료의 사직으로 인해 원래 그가 담당했던 프로젝트를 내가 인수해야 합니다. 여기에는 초등 및 중등 학교 문제 은행과 수천만 개의 데이터가 포함된 질문 은행 검색이 포함됩니다. 함수의 이 부분의 정상적인 반복이 미래에 효율적으로 완료될 수 있도록 보장하기 위해. Elasticsearch의 기본 사용법을 배우기 시작해야 했고, 이것이 이 학습 기록으로 이어졌습니다. 이 도구를 모르는 학생들도 이 기사를 통해 도움을 받을 수 있습니다.
읽기 전에 확인하십시오:
- 유닉스/리눅스 명령줄이 무엇인지 이해합니다.
- 네트워크 요청 및 tcp/udp 관련 지식이 무엇인지 이해하고 있으며 이러한 네트워크 요청을 모든 프로그래밍 언어로 구현했습니다.
curl
명령 사용을 이해합니다 .- REST 및 RESTful을 이해
get
하고 요청하고 이해합니다. 링크된 기사 " RESTFUL이란 무엇입니까?"를put
참조할 수 있습니다. REST의 요청 방법은 무엇이며 차이점은 무엇입니까? ".
텍스트
환경 준비
JDK8
yum, apt 및 brew와 같은 패키지 관리 도구도 소스 코드를 통해 다운로드, 컴파일 및 설치하거나 deb 및 .exe를 통해 설치할 수 있습니다.
ES6 다운로드 및 실행
나는 맥이므로 직접 다운로드하려면 brew를 사용하십시오.
brew install elasticsearch
다운로드가 완료되면 명령어를 직접 입력하여 시작합니다.
elasticsearch
명령 사용
건강 상태 확인
curl -XGET 'localhost:9200/_cat/health?v&pretty'
실행 결과는 다음과 같습니다.
노드 목록 보기
curl -XGET 'localhost:9200/_cat/nodes?v&pretty'
색인 목록 보기
다음 명령을 실행합니다.
curl -XGET 'localhost:9200/_cat/indices?v&pretty'
인덱스가 없으면 다음과 같이 하나의 테이블 헤더만 있게 됩니다.
인덱스가 있으면 다음과 같은 효과가 있습니다.
인덱스 생성
"test_index"라는 인덱스를 만들려면 다음 요청을 시작할 수 있습니다.
curl -XPUT 'localhost:9200/test_index&pretty'
그러면 위의 "인덱스 목록 보기"를 통해 확인 및 확인하실 수 있습니다. 실행 효과는 다음과 같습니다.
설명서 문서 추가
위에서 만든 index "test_index"에 id = 1
문서를 삽입하면 내용은 다음과 같습니다.
{
"content": "Test Data By Funco~~~"
}
그런 다음 명령줄은 다음과 같습니다.
curl -XPUT 'localhost:9200/test_index/doc/1?pretty&pretty' -H 'Content-Type: application/json' -d '{"content": "Test Data By Funco~~~"}'
그러면 실행 효과는 다음과 같습니다.
알아채다
- 존재하지 않는 색인에 문서를 추가하면 색인이 생성되고 문서가 성공적으로 추가됩니다.
- 동일한 id로 명령이 반복적으로 실행되면 이전 doc는 단순히 새 doc로 대체됩니다.
- id는 필수가 아니며 id가 지정되지 않은 경우 es는 임의로 id를 인덱스로 생성합니다. id 지정 여부와 관계없이 위 실행 다이어그램의 필드와 같이 반환된 결과에서 id를 얻을 수 있습니다
_id
.
문서 받기
여기에 추가된 문서를 가져옵니다 id = 1
.
curl -XGET 'localhost:9200/test_index/doc/1?pretty&pretty'
실행 효과는 다음과 같습니다.
인덱스 삭제
위에서 문서를 추가할 때 선택한 인덱스가 없으면 해당 인덱스가 추가된다고 언급했습니다. 이제 실수로 추가된 인덱스를 제거하려면 어떻게 해야 할까요? 다음 명령을 실행할 수 있습니다. 예를 들어 이제 customer
이라는 인덱스를 삭제하려고 합니다.
curl -XDELETE 'localhost:9200/customer?pretty&pretty'
실행 효과는 다음과 같으며, 실행 성공 후 인덱스 목록을 조회하는 위의 명령어를 통해 해당 인덱스가 더 이상 목록에 존재하지 않는 것을 확인할 수 있습니다.
문서 수정
바로 지금 "문서 추가" 섹션에서 새 문서가 단순히 이전 문서를 대체한다고 언급되어 있지만, 이때 컨텐츠를 대체하는 대신 컨텐츠의 일부만 수정하려면 어떻게 해야 합니까?
이제 우리가 인덱스에 있다고 가정하면 test_index
다음과 같이 id = 1인 문서가 있습니다.
curl -XPOST 'localhost:9200/test_index/doc/1/_update?pretty&pretty' -H 'Content-Type: application/json' -d '{"doc":{"author": "funco"}}'
실행 효과는 다음과 같습니다. POST를 사용하여 제출하고 의 -d
필드 doc
는 수정 전 문서, data
수정 중에 제출된 매개변수 및 수정된 문서를 비교하는 데 주의하십시오. 이해하실 수 있습니다.
문서 삭제
이것에 대해서는 할 말이 없습니다.REST DELETE 작업을 제출하고 인덱스 아래에 id가 가리키는 문서를 지정하십시오. id = 1
예를 들어 test_index에서 문서를 삭제하고 싶습니다 . 다음 명령을 실행할 수 있습니다.
curl -XDELETE 'localhost:9200/test_index/doc/1?pretty&pretty'
실행 효과는 다음과 같습니다. found
삭제 후 문서를 다시 가져오고 반환된 결과의 필드가 임을 알 수 있습니다 false
.
일괄 처리
일괄 삽입 문서
curl -XPOST 'localhost:9200/test_index/doc/_bulk?pretty&pretty' -H 'Content-Type: application/json' -d '
{"index":{"_id": 2}}
{"content":"test content2"}
{"index":{"_id": 3}}
{"content":"test content3"}
'
실행 효과는 다음과 같습니다.
일괄 삭제 및 수정
다음과 같은 경우 데이터를 삭제하고 수정하는 방법과 하나의 요청으로 다른 작업을 수행하는 방법을 배울 수 있습니다.
id = 2
먼저, 실행하기 전에 및 기록 id = 3
의 존재를 확인하십시오 .
그런 다음 다음 명령을 실행합니다.
curl -XPOST 'localhost:9200/test_index/doc/_bulk?pretty&pretty' -H 'Content-Type: application/json' -d '
{"update":{"_id": 2}}
{"doc":{"author":"funco"}}
{"delete":{"_id": 3}}
'
실행 효과는 다음과 같습니다.
마지막으로 다시 확인합니다. 성공적으로 실행되었음을 확인할 수 있습니다.
찾다
이전 섹션 "일괄 삭제 및 수정"을 예로 들어 작업 실행 전후에 id = 2 및 id = 3인 문서에 대해 두 개의 요청만 실행할 수 있습니다. 모든 문서를 가져오려면 어떻게 해야 합니까 /<index>/doc/<id>
? 현재 모든 문서를 GET
가져오고 싶다고 가정하면 다음 명령을 실행할 수 있습니다.test_index
curl -XGET 'localhost:9200/test_index/_search?q=*&pretty&pretty'
검색 결과가 필드별로 오름차순으로 정렬되도록 get
매개변수를 추가할 수도 있습니다 .sort=_id:asc
_id
curl -XGET 'localhost:9200/test_index/_search?q=*&sort=_id:asc&pretty&pretty'
이전 요청에서처럼 데이터에 매개변수를 넣을 수도 있다는 점에 유의해야 합니다 . 효과는 이전 예제와 동일합니다. 이는 코드를 사용하여 요청을 시작할 때 일관된 처리 스타일을 유지하는 데 유용합니다.
curl -XGET 'localhost:9200/test_index/_search?pretty&pretty' -H 'Content-Type: application/json' -d '
{
"query": {"match_all":{}},
"sort": {"_id": "asc"}
}
'
기본 검색 결과는 10입니다. 더 많은 데이터를 검색하려면 매개 변수를 통해 지정해야 합니다
size
. 검색과 관련하여 다른 블로그를 만들어 공유하겠습니다.