elasticsearch 검색엔진의 상용 방법 (3) 10000개의 데이터를 찾은 후의 데이터
2469 단어 elasticsearch검색페이지 나누기
es 자체가 기본적으로 검색량을 10000개로 제한합니다. 즉from+size<=10000
오류 보고:
Result window is too large, from + size must be less than or equal to:[10000] but was [10010]. See the scroll api for a more efficient way to requestlarge data sets. This limit can be set by changing the[index.max_result_window] index level parameter
해결 방법:
1. es의 기본 설정을 수정합니다
1. config/elasticsearch.yml에 설정 추가
max_result_window: 1000000000
2,api를 사용하여 index의 설정을 수정합니다
# es index
PUT _all/_settings
{
"index":{
"max_result_window": 1000000000
}
}
참고:
es도 max_result_윈도우의 크기는 최대 10억 원입니다.만약 당신이 검색한 양(from+size)이 10억 위안보다 크다면, 방법 2를 사용하십시오
2. search_ 사용after 방법
말 그대로 어떤 점 이후의 데이터를 찾기 위해from,size,sort,search_after.
페이지 넘기기 구현:search_after 자체는 무상태입니다. 지난 조회의 마지막 상태를 기록하고 이 상태부터 다음 조회를 해야 하기 때문에 또 하나의 통일된 정렬 필드가 필요합니다.
질의 방법:
1. 첫 번째 조회 문장
# , date
GET index_1/_search
{
"from": 0,
"size": 10000,
"sort": [
{
"date": {
"order": "desc"
}
}
],
"query": {
"match_all": {}
}
}
상술한 문장을 조회한 후에 모든 결과에'sort'필드가 하나 더 나올 것입니다. 마지막 데이터의sort, 즉
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 20000,
"max_score": null,
"hits": [
......
{
"_index": "index_1",
"_type": "type_1",
"_id": "107686",
"_score": null,
"_source": {
"content": " . . .",
"date": "2019-09-20 13:42:38"
},
"sort": [
1568986958000
]
}
]
}
}
2. 두 번째 조회 문장
# 1 10
GET index_1/_search
{
"from": -1,
"size": 10,
"sort": [
{
"date": {
"order": "desc"
}
}
],
"search_after":[1568986958000]
}
참고:
(1) 두 번째 조회는 첫 번째 조회 결과를 바탕으로 search_after의 값은 첫 번째 검색 결과의 마지막 데이터인sort입니다.
(2) 두 번째 조회의from은 반드시 -1이고from+size는 여전히 10000보다 크면 안 된다
(3) 페이지를 넘기려면 마지막 조회를 기록할 때마다sort
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.