Elasticsearch: search_ 활용after 깊이 페이지 나누기
8953 단어 elasticsearch
from에size를 추가하는 방법으로 페이지를 나누고 scroll 인터페이스를 이용하여 페이지를 나누는 것은 대량의 데이터에 대해 말하자면 우리는from+size를 사용하는 것을 최대한 피한다.여기 원인은 인덱스입니다.max_result_윈도우의 기본값은 10K, 즉from+size의 최대값은 1만이다.검색 요청이 메모리를 많이 사용하고 시간은from+size와 비례합니다. 이것은 메모리를 제한합니다.990에서 1000까지hit를 원한다면shard당 최소 1000개의 문서가 필요합니다.
과도하게 우리의cluster를 바쁘게 하는 것을 피하기 위해 일반적으로 Scroll 인터페이스는 심층적인 scrolling으로 추천되지만, scroll 상하문을 유지하는 것도 매우 비싸기 때문에 이런 방법은 실시간 사용자 요청으로 추천하지 않습니다.search_after 매개 변수는 실시간cursor를 제공함으로써 이 문제를 해결합니다.우리의 생각은 이전 페이지의 결과를 사용하여 다음 페이지를 검색하는 것을 돕는 것이다.
다음 문서를 트위터 인덱스에 입력하십시오.
POST _bulk {"index": {"_index": "twitter", "_id": 1}} {"user": "느릅나무-장삼", "DOB": 1980-01-01","message":"오늘 날씨가 좋네요. 나가서 돌아다녀요","uid": 2,"age": 20,"city":"베이징","province":"베이징","country":"중국","address":"중국 베이징시 해전구","location": {"lat": 39.97. 0718", "lon": "116.325747"} {"index": {"_index": "twitter", "_id": 2}} {"user": "동성구-노유", "DOB":"1981-01-01", "message": "출발, 다음 역은 윈난!""uid": 3, "age": 30, "city": "베이징", "province": "베이징", "country": "중국", "address": "중국 베이징시 동성구 대기공장 3개 3호", "location": {"lat": 39.904313","lon":"16.412754"} {"index": {"twitter","_id": 3} {"user":"동성구-이사","DOB": 1982-01-01", 메시지: "happy birthday!","uid": 4, "age": 30, "city": "베이징", "province": "베이징", "country": "중국", "address": "중국 베이징시 동성구,"location": {"lat": "39.893801", "lon": "116.408986"} {"index": "twitter", "_id": 4} {"user": 조양구-로자","DOB": 1983-01-01", "메시지": "123, 고고", "uid": 5, "age": 35, "시티": 베이징","province": 베이징", "country": 중국","address": 중국 북경시 조양구 건국문,"location": {"lat":"39.718256","lon":"116.367910"} {"index": {"_index":"twitter","_id": 5} {"user":'조양구-왕씨','DOB','1984-01-01','message','Happy BirthDay My Friend!',"uid": 6, "age": 50, "city": "베이징", "province": "베이징", "country": "중국", "address": 중국 베이징시 조양구 무역","location": {"lat": 39.918256", "lon": "116.467910"} {"index": {"twitter", "_id": 6} {"user": "홍교-노오", "DOB": "1985-01-01", "메시지": "친구가 오면 오늘 내 생일인데 친구가 오면 무슨 Birthday happy가 돼!","uid": 7, "age": 90, "city": "상하이", "province": "상하이", "country": "중국", "address": 중국 상해시 민행구","location": {"lat": 31.175927", "lon": "121.383328"} 이 안에는 모두 6개의 문서가 있습니다.첫 페이지의 질의를 다음과 같이 읽어들인다고 가정합니다.
GET twitter/_search
{
"size": 2,
"query": {
"match": {
"city": " "
}
},
"sort": [
{
"DOB": {
"order": "asc"
}
},
{
"user.keyword": {
"order": "asc"
}
}
]
}
다음 결과가 표시됩니다.
{
"took" : 29,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 5,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "twitter",
"_type" : "_doc",
"_id" : "1",
"_score" : null,
"_source" : {
"user" : " - ",
"DOB" : "1980-01-01",
"message" : " , ",
"uid" : 2,
"age" : 20,
"city" : " ",
"province" : " ",
"country" : " ",
"address" : " ",
"location" : {
"lat" : "39.970718",
"lon" : "116.325747"
}
},
"sort" : [
315532800000,
" - "
]
},
{
"_index" : "twitter",
"_type" : "_doc",
"_id" : "2",
"_score" : null,
"_source" : {
"user" : " - ",
"DOB" : "1981-01-01",
"message" : " , !",
"uid" : 3,
"age" : 30,
"city" : " ",
"province" : " ",
"country" : " ",
"address" : " 3 ",
"location" : {
"lat" : "39.904313",
"lon" : "116.412754"
}
},
"sort" : [
347155200000,
" - "
]
}
]
}
}
상기 요청의 결과는 문서마다sort 값 그룹을 포함합니다.이 sort 값은 search_이 결과 목록 뒤에 있는 모든 문서를 되돌려주기 위해 애프터 파라미터를 함께 사용합니다.예를 들어 우리는 이전 문서의sort 값을 사용하여 search_에 전달할 수 있다다음 페이지의 결과를 검색한 후:
GET twitter/_search
{
"size": 2,
"query": {
"match": {
"city": " "
}
},
"search_after": [
347155200000,
" - "
],
"sort": [
{
"DOB": {
"order": "asc"
}
},
{
"user.keyword": {
"order": "asc"
}
}
]
}
여기서 search_after에서, 우리는 이전 검색 결과의sort 값을 넣었습니다.다음 결과가 표시됩니다.
{
"took" : 47,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 5,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "twitter",
"_type" : "_doc",
"_id" : "3",
"_score" : null,
"_source" : {
"user" : " - ",
"DOB" : "1982-01-01",
"message" : "happy birthday!",
"uid" : 4,
"age" : 30,
"city" : " ",
"province" : " ",
"country" : " ",
"address" : " ",
"location" : {
"lat" : "39.893801",
"lon" : "116.408986"
}
},
"sort" : [
378691200000,
" - "
]
},
{
"_index" : "twitter",
"_type" : "_doc",
"_id" : "4",
"_score" : null,
"_source" : {
"user" : " - ",
"DOB" : "1983-01-01",
"message" : "123,gogogo",
"uid" : 5,
"age" : 35,
"city" : " ",
"province" : " ",
"country" : " ",
"address" : " ",
"location" : {
"lat" : "39.718256",
"lon" : "116.367910"
}
},
"sort" : [
410227200000,
" - "
]
}
]
}
}
주의: search_를 사용하면after 때,from 값은 0 또는 -1로 설정해야 합니다.
search_after는 무작위 페이지로 자유롭게 이동하는 것이 아니라 scroll 여러 개의 조회를 병행하는 해결 방안입니다.이것은 scroll API와 매우 비슷하지만, 그것과 달리, search_after 매개 변수는 무상태입니다. 최신 버전의 검색기를 항상 분석합니다.따라서 색인 업데이트와 삭제에 따라 정렬 순서가 보행 중에 바뀔 수 있습니다.저작권 성명: 본고는 CSDN 블로거인'Elastic 중국 지역사회 공식 블로그'의 오리지널 글입니다. CC4.0 BY-SA 저작권 협의에 따라 원문의 출처 링크와 본 성명을 첨부하십시오.원문 링크:https://blog.csdn.net/UbuntuTouch/article/details/101036040
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.