개발자
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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
#1 const { body } = await client.search({ index: 'your_index', size: 10, body: { query: { // your query }, search_after: [search_after_value], // search_after value from previous search sort: [ // your sort condition ] } }); if (body.hits.hits.length < 10) { // 마지막 페이지입니다. } #2 const { body } = await client.search({ index: 'your_index', size: 10, from: offset, // offset value based on the current page body: { query: { // your query }, sort: [ // your sort condition ] } }); if (offset + 10 >= body.hits.total.value) { // 마지막 페이지입니다. }
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!