개발자
Express 연동해서 search 메서드로 search_after 사용해서 무한 스크롤 구현중입니다. 궁금한 점은 인덱스 안에 로그가 99개가 있다고 하면 size 10으로 했을 때 search_after로 9번까지는 데이터를 잘 가져오는데 마지막에 로그 호출할 때는 에러가 뜹니다.. 마지막 호출에서 이게 마지막이라고 감지하도록 만들고 싶은데 혹시 방법이 있을까요??
답변 2
조금 간단하게 접근해보겠습니다! size가 10인 요청인데 9개의 요청이 왔다면, 마지막 인덱스 라는 의미가 아닐지 생각해보세요 :) 또한, Express를 사용해보지 않아 잘 모르지만, ElasticSearch는 Size에서 Index보다 초과하게 [GET/POST(QueryMethod)] 요청 되었을 경우 아무런 반환값도 나오지 않습니다!(정확히는, 일치하는 결과가 없다고 Json으로 출력해줍니다.) Express에서 에러를 내뱉도록 내부적으로 동작하는 것 같은데, 그 부분을 예외처리 하는것도 또 하나의 방법이겠네요 :)-
엘라스틱서치에서 무한 스크롤을 구현할 때 마지막 페이지를 감지하는 방법은 다음과 같이 처리할 수 있습니다. 1. 결과 개수 확인하기: 'size'로 요청한 데이터 개수보다 실제로 받은 데이터 개수가 적다면, 마지막 페이지로 간주할 수 있습니다. 예를 들어, 'size'가 10개이고 받은 데이터가 7개라면, 마지막 페이지입니다. 2. 'total' 값 확인하기: 검색 결과의 'total' 값을 확인하여, 얼마나 많은 결과가 남아있는지 확인할 수 있습니다. 요청한 'size'와 'from' 값을 더해서 'total' 값보다 크거나 같다면, 마지막 페이지입니다. 이 두 가지 방법을 사용하여 마지막 페이지를 감지하고, 이에 따라 클라이언트 측에서 무한 스크롤이 중지되도록 구현할 수 있습니다. 다만, 'search_after'를 사용할 경우 첫 번째 방법이 더 적합합니다.
1#1
2const { body } = await client.search({
3 index: 'your_index',
4 size: 10,
5 body: {
6 query: {
7 // your query
8 },
9 search_after: [search_after_value], // search_after value from previous search
10 sort: [
11 // your sort condition
12 ]
13 }
14});
15
16if (body.hits.hits.length < 10) {
17 // 마지막 페이지입니다.
18}
19
20
21#2
22const { body } = await client.search({
23 index: 'your_index',
24 size: 10,
25 from: offset, // offset value based on the current page
26 body: {
27 query: {
28 // your query
29 },
30 sort: [
31 // your sort condition
32 ]
33 }
34});
35
36if (offset + 10 >= body.hits.total.value) {
37 // 마지막 페이지입니다.
38}
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!