Elasticsearch 검색 조정 권위 있는 가이드(2/3)
5230 단어 Elasticsearch검색 조정검색 엔진오리지널 건화물
카탈로그
Elasticsearch 검색 조정 권위 있는 안내서는 QBOX가 블로그에 발표한 시리즈 중 하나로 본고는 이 시리즈의 두 번째 편으로 색인 예처리, 맵핑 구축, 스크립트 사용 피하기, 색인 세그먼트 통합 등 검색 성능과 관련된 조정 방법을 소개했다.
본고는 Elasticsearch 검색 조정 시리즈 3편 중 2편, 1편은 여기를 참고합니다(클릭).이 강좌는 Elasticsearch 5.0 및 상기 버전에 대한 검색 조정 기술, 전략과 건의를 더욱 토론하는 데 목적을 둔다.
1. 사전 인덱스 데이터
데이터의 색인 방식을 최적화하기 위해서는 조회에서 일부 모델을 미리 설정해야 한다.예를 들어 모든 문서에price라는 가격 필드가 있고 대부분의 조회가 고정된 범위 목록에서range 집합을 실행한다면 미리 색인 범위를 색인에 적용하고terms 집합을 사용하여 이 집합을 가속화할 수 있다.
예를 들어 다음과 같은 문서가 있습니다.
curl -XPUT 'ES_HOST:ES_PORT/index/type/1
?pretty' -H 'Content-Type: application/json' -d '{
"designation": "bowl",
"price": 13
}'
다음과 같은 검색 요청이 있습니다.
curl -XGET 'ES_HOST:ES_PORT/index/_search
?pretty' -H 'Content-Type: application/json' -d '{
"aggs": {
"price_ranges": {
"range": {
"field": "price",
"ranges": [
{ "to": 10 },
{ "from": 10, "to": 100 },
{ "from": 100 }
]
}
}
}
}'
그리고 색인 단계에서 price_range 필드, 이 필드는 키워드로 매핑되어야 합니다.
curl -XPUT 'ES_HOST:ES_PORT/index
?pretty' -H 'Content-Type: application/json' -d '{
"mappings": {
"type": {
"properties": {
"price_range": {
"type": "keyword"
}
}
}
}
}'
curl -XPUT 'ES_HOST:ES_PORT/index/type/1
?pretty' -H 'Content-Type: application/json' -d '{
"designation": "bowl",
"price": 13,
"price_range": "10-100"
}'
다음 검색 요청은price 필드에서 범위 집합을 실행하는 것이 아니라 이 새로운 필드를 집합할 수 있습니다.
curl -XGET 'ES_HOST:ES_PORT/index/_search
?pretty' -H 'Content-Type: application/json' -d '{
"aggs": {
"price_ranges": {
"terms": {
"field": "price_range"
}
}
}
}'
2. 매핑
사실상, 일부 수치형 데이터는 항상 하나의 수치형 필드로 비추어야 한다는 것을 의미하지는 않는다.전형적으로, ISBN 같은 식별자나 다른 데이터베이스에 기록된 숫자를 표시하는 필드는 인덱스나 롱 형식보다 키워드로 비칠 수 있습니다.
키워드 형식은 이메일 주소, 호스트 이름, 상태 코드, 우편 번호, 라벨 등 색인 구조화 내용에 사용됩니다.
전형적으로 필터링 (예를 들어 발표된 모든 블로그 글 찾기), 정렬, 집합에 사용됩니다.키워드 필드는 정확한 값으로만 검색할 수 있습니다.
전자 메일 내용이나 제품 설명 같은 색인 전문 내용이 필요하면 텍스트 필드를 사용해야 할 수도 있습니다.
다음은 키워드 필드 매핑의 예입니다.
curl -XPUT 'ES_HOST:ES_PORT/my_index
?pretty' -H 'Content-Type: application/json' -d '{
"mappings": {
"my_type": {
"properties": {
"tags": {
"type": "keyword"
}
}
}
}
}'
부터x 버전에서 가져온 인덱스는 키워드를 지원하지 않습니다.반대로, 키워드 형식을string 형식으로 낮추려고 시도합니다.이것은 새로운 맵과 낡은 맵을 통합하는 것을 지원합니다.장기적으로 존재하는 인덱스는 6으로 업그레이드해야 합니다.x 버전 전에 재구성하지만, 맵 다운그레이드는 자신의 계획에 따라 재구축을 실시할 수 있는 기회를 제공합니다.
3. 스크립트 사용 피하기
일반적으로 스크립트 사용을 최대한 피해야 한다.필요한 경우 Painless 및 표현식 엔진을 먼저 선택합니다.
Painless는 Elasticsearch에서 사용하기 위해 설계된 간단하고 안전한 스크립트 언어로 Elasticsearch의 기본 스크립트 언어로 안전하게 스크립트를 연결하고 저장할 수 있습니다.Painless 문법과 언어 특성에 대한 자세한 설명은 Painless 언어 규범을 참조하십시오.
"Painless Scripting in Elasticsearch"를 참조하여 Painless 스크립트 언어 안내서를 더욱 깊이 있게 이해하십시오.
Lucene 표현식은javascript 표현식을 바이트 코드로 컴파일하여 고성능 사용자 정의 평가와 정렬 함수에 사용하도록 설계하고 inline과 기본 저장 스크립트를 지원합니다.
표현식은 사용자 정의 Lucene 코드에 비해 더욱 좋은 성능을 나타낸다.그 성능은 다른 스크립트 엔진에 비해 단일 문서 원가가 낮다. 표현식이 더욱 앞서는 것이다.
이것은 특히 자신이 쓴 로컬 스크립트보다 훨씬 빠른 실행을 허용한다.
표현식은 ja**vascript** 문법 서브집합을 지원합니다: 단독 표현식입니다.표현식 모듈의 문서를 참고하여 지원하는 조작부호와 함수를 이해하십시오.
표현식 스크립트에서 액세스할 수 있는 변수는 다음과 같습니다.
표현식 스크립트는 script_score、script_fields, 정렬 스크립트 및 수치형 집합 스크립트는 표현식에 파라미터를 간단하게 설정하면 됩니다.
4. 읽기 전용 색인 강제 병합
읽기 전용 인덱스는 단일 세그먼트로 통합되면 매우 이득을 볼 수 있습니다.전형적인 상황은 시간 기반 인덱스입니다. 현재 시간 창의 인덱스만 새 문서가 되고, 낡은 인덱스는 읽기 전용이 됩니다.
강제 병합 API는 API를 통해 하나 이상의 인덱스를 강제 병합할 수 있습니다.병합은 각 슬라이스의 Lucene 인덱스 세그먼트 수량과 관련이 있습니다.강제 병합 작업은 병합을 통해 세그먼트 수를 줄일 수 있습니다.
이 호출은 합병이 완료되기 전에 막힐 것입니다.http 연결이 끊어지면 요청은 백그라운드에서 계속됩니다. 이전 강제 합병이 완료되기 전에 모든 새로운 요청이 막힙니다.
curl _XPOST 'ES_HOST:ES_POST/twitter/_forcemer
ge?pretty'
강제 병합 API는 다음 요청 매개변수를 수용합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Embulk를 사용하여 ElasticCloud로 보내기Embulk에서 ElasticCloud에 보낼 수 있을까라고 생각비망록도 겸해 기술을 남깁니다 Embulk 설치 ElasticCloud (14 일 체험판) brew라면 아래 명령 입력 파일 만들기 파일 내용 seed...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.