es의 페이지
POST /_bulk
{ "create": { "_index": "us", "_type": "user", "_id": "1" }}
{ "email" : "[email protected]", "name" : "John Smith", "username" : "@john" }
{ "create": { "_index": "us", "_type": "user", "_id": "2" }}
{ "email" : "[email protected]", "name" : "Mary Jones", "username" : "@mary" }
{ "create": { "_index": "us", "_type": "tweet", "_id": "3" }}
{ "date" : "2014-09-13", "name" : "Mary Jones", "tweet" : "Elasticsearch means full text search has never been so easy", "user_id" : 2 }
{ "create": { "_index": "us", "_type": "tweet", "_id": "4" }}
{ "date" : "2014-09-14", "name" : "John Smith", "tweet" : "@mary it is not just text, it does everything", "user_id" : 1 }
{ "create": { "_index": "us", "_type": "tweet", "_id": "5" }}
{ "date" : "2014-09-15", "name" : "Mary Jones", "tweet" : "However did I manage before Elasticsearch?", "user_id" : 2 }
{ "create": { "_index": "us", "_type": "tweet", "_id": "6" }}
{ "date" : "2014-09-16", "name" : "John Smith", "tweet" : "The Elasticsearch API is really easy to use", "user_id" : 1 }
{ "create": { "_index": "us", "_type": "tweet", "_id": "7" }}
{ "date" : "2014-09-17", "name" : "Mary Jones", "tweet" : "The Query DSL is really powerful and flexible", "user_id" : 2 }
{ "create": { "_index": "us", "_type": "tweet", "_id": "8" }}
{ "date" : "2014-09-18", "name" : "John Smith", "user_id" : 1 }
{ "create": { "_index": "us", "_type": "tweet", "_id": "9" }}
{ "date" : "2014-09-19", "name" : "Mary Jones", "tweet" : "Geo-location aggregations are really cool", "user_id" : 2 }
{ "create": { "_index": "us", "_type": "tweet", "_id": "10" }}
{ "date" : "2014-09-20", "name" : "John Smith", "tweet" : "Elasticsearch surely is one of the hottest new NoSQL products", "user_id" : 1 }
{ "create": { "_index": "us", "_type": "tweet", "_id": "11" }}
{ "date" : "2014-09-21", "name" : "Mary Jones", "tweet" : "Elasticsearch is built for the cloud, easy to scale", "user_id" : 2 }
{ "create": { "_index": "us", "_type": "tweet", "_id": "12" }}
{ "date" : "2014-09-22", "name" : "John Smith", "tweet" : "Elasticsearch and I have left the honeymoon stage, and I still love her.", "user_id" : 1 }
{ "create": { "_index": "us", "_type": "tweet", "_id": "13" }}
{ "date" : "2014-09-23", "name" : "Mary Jones", "tweet" : "So yes, I am an Elasticsearch fanboy", "user_id" : 2 }
{ "create": { "_index": "us", "_type": "tweet", "_id": "14" }}
{ "date" : "2014-09-24", "name" : "John Smith", "tweet" : "How many more cheesy tweets do I have to write?", "user_id" : 1 }
1:size+from 간단한 페이지
일반적인 조회 절차로 말하자면, 내가 상위 10개의 데이터를 조회하고 싶다면:
· 1 클라이언트가 특정 노드에 보낼 것을 요청합니다
· 2 노드를 각 조각에 전달하고 각 조각의 상위 10개를 조회한다
·3 결과는 노드에 반환, 데이터 통합, 추출 상위 10개 항목
· 4 요청 클라이언트에게 반환
그럼 제가 10조에서 20조까지의 데이터를 조회하려면 어떻게 해야 하나요?이럴 때 페이지별로 조회하는 데 썼어요.
얕은 페이지는 간단한 의미의 페이지로 이해할 수 있다.그것의 원리는 매우 간단하다. 바로 전 20개의 데이터를 조회한 후에 전 10개의 데이터를 끊고 10-20의 데이터만 되돌려주는 것이다.
열자: 제5조에서 10조까지의 데이터를 찾습니다.
GET /us/_search?pretty
{
"from" : 5 , "size" : 5
}
from**는 대상 데이터의 오프셋 값을 정의하고,size는 현재 되돌아오는 이벤트 수를 정의합니다.**
"from": 5, "size": 5는 5조부터 10조까지 조회한다는 뜻이다
[주의] 이런 얕은 페이지는 소량의 데이터에만 적합하다. 왜냐하면from이 커지면 조회하는 시간이 커지고 데이터의 양이 클수록 조회의 효율 지수가 떨어지기 때문이다.
장점:from+size는 데이터 양이 많지 않은 상황에서 효율이 비교적 높다
단점: 데이터 양이 매우 많은 상황에서from+size 페이지는 모든 기록을 메모리에 불러옵니다. 이렇게 하면 속도가 매우 느릴 뿐만 아니라es가 메모리 부족으로 끊어지기 쉽습니다.
2: scroll "깊이" 페이지
위에서 소개한 간단한 페이지에 대해, Elasticsearch 응답 요청을 할 때, docs의 순서를 확정하고, 응답 결과를 배열해야 합니다.
요청한 페이지 수가 적으면 (페이지당 20개의docs를 가정하면) Elasticsearch는 아무런 문제가 없습니다.
그러나 페이지 수가 비교적 크면, 예를 들어 20페이지를 요청하면, Elasticsearch는 1페이지에서 20페이지까지의 모든 docs를 꺼내고, 1페이지에서 19페이지까지의 docs를 제거하고, 20페이지의docs를 얻어야 한다.
해결 방법은 scroll을 사용하는 것입니다. scroll은 현재 인덱스 단계의 스냅샷 정보를 유지하는 것입니다. 캐시 (이 스냅샷 정보는 당신이 이 scroll 조회를 실행할 때의 스냅샷입니다.)
scroll을 초기화와 두 단계로 나눌 수 있습니다. 1. 초기화할 때 검색 조건에 부합되는 모든 검색 결과를 캐시하여 스냅샷으로 상상할 수 있습니다.2. 이 스냅샷에서 데이터를 추출한다.
예:
1): 초기화
GET us/_search?scroll=3m
{
"query": {"match_all": {}},
"size": 3
}
초기화할 때 일반적인 검색과 같이 scroll=3m는 현재 검색된 데이터 캐시를 나타냅니다.
2): 두루 다니다
훑어볼 때, 지난번 훑어보았던_scroll_id, 그리고 scroll 파라미터를 가지고 지난번 반복 절차를 반복합니다. 되돌아오는 데이터가 비어 있음을 알면 반복 완료를 나타냅니다.
GET /_search/scroll
{
"scroll" : "1m",
"scroll_id" : "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAADiVFmc0QlJqSzhnUUhXT3ZiQjl2c2h5N3cAAAAAAAA71RZyNFJxSU1vOFJZQ2VRcVBHLXJvb29nAAAAAAAAOJQWZzRCUmpLOGdRSFdPdmJCOXZzaHk3dwAAAAAAADiTFmc0QlJqSzhnUUhXT3ZiQjl2c2h5N3cAAAAAAAA4lhZnNEJSaks4Z1FIV092YkI5dnNoeTd3"
}
[주의]: 매번 매개 변수 scroll을 전송하고 검색 결과의 캐시 시간을 갱신하며 index와 type을 지정할 필요가 없습니다
(캐시 시간을 너무 길게 설정하고 메모리를 차지하지 마세요)
다음으로 전송:https://www.cnblogs.com/niutao/p/10909091.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.