(7)elasticsearch의 정렬과 페이지 나누기 문제
8329 단어 elasticsearch
1、elasticsearch는 텍스트 형식을 정렬합니다
정렬의 과정은 실질적으로 필드의 원시 내용을 정렬하는 과정이다. 이 과정에서 역렬 인덱스는 역할을 발휘하지 못하기 때문에 정렬 인덱스를 사용해야 한다. 즉, 문서 id와 필드를 통해 필드의 원시 내용을 신속하게 얻을 수 있다.
es는 다음과 같은 2중 구현 방식을 제공합니다.
fielddata와 doc values는 다음과 같습니다.
대비
fielddata
docvalues
작성 시기
검색 시 즉시 생성
인덱스할 때 생성, 역렬 인덱스 생성 시기와 일치
위치 만들기
jvm heap
디스크
이점
추가 디스크 자원을 사용하지 않음
heap 메모리를 사용하지 않음
결점
문서가 너무 많을 때, 즉시 만드는 데 너무 많은 시간이 걸리고, 너무 많은 힙 메모리를 차지한다
인덱스 속도 감소(io 과다), 추가 디스크 자원 사용
fielddata 소개:
PUT testindex/_mapping
{
"doc": {
"properties": {
"name": {
"type": "text",
"fielddata": true
}
}
}
}
docvalues 설명:
2. 페이지 나누기와 훑어보기
(1)from+size
(2)scroll
(3)search after
(4) 장면 적용
유형
장면
from+size
맨 위에 있는 문서의 일부를 실시간으로 가져오고 자유롭게 넘기는 것이 필요합니다.
scroll
모든 데이터를 내보내는 기능과 같은 모든 문서가 필요하며, 실시간으로 페이지를 자유롭게 넘길 필요가 없다.
search after
모든 문서가 필요하고, 실시간으로 필요하지만, 자유롭게 페이지를 넘길 필요는 없다.
3. nested 정렬
DSL은 다음과 같습니다.GET test/_search
{
"query": {
"nested": {
"path": "clientInfo",
"query": {
"nested": {
"path": "clientInfo.requestInfo",
"query": {
"match": {
"clientInfo.requestInfo.uri": "hello"
}
}
}
}
}
},
"sort": [
{
"common.time": {
"nested": {
"path": "common"
},
"order": "desc"
}
}
]
}
JAVA 코드는 다음과 같습니다.transportClient.prepareSearch("index").setTypes("doc").setQuery(queryBuilder).setPreference(preference)
.addSort(SortBuilders.fieldSort("common.time").setNestedSort(new NestedSortBuilder("common")).order(SortOrder.DESC))
.setSize(size).setFrom(from).execute().actionGet();
참고: 홈페이지 nested 정렬
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
kafka connect e elasticsearch를 관찰할 수 있습니다.
No menu lateral do dashboard tem a opção de connectors onde ele mostra todos os clusters do kafka connect conectados atu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
GET test/_search
{
"query": {
"nested": {
"path": "clientInfo",
"query": {
"nested": {
"path": "clientInfo.requestInfo",
"query": {
"match": {
"clientInfo.requestInfo.uri": "hello"
}
}
}
}
}
},
"sort": [
{
"common.time": {
"nested": {
"path": "common"
},
"order": "desc"
}
}
]
}
transportClient.prepareSearch("index").setTypes("doc").setQuery(queryBuilder).setPreference(preference)
.addSort(SortBuilders.fieldSort("common.time").setNestedSort(new NestedSortBuilder("common")).order(SortOrder.DESC))
.setSize(size).setFrom(from).execute().actionGet();
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
kafka connect e elasticsearch를 관찰할 수 있습니다.No menu lateral do dashboard tem a opção de connectors onde ele mostra todos os clusters do kafka connect conectados atu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.