diff --git a/src/server/internalServer.cpp b/src/server/internalServer.cpp index 54f0c311a..14aaf3a68 100644 --- a/src/server/internalServer.cpp +++ b/src/server/internalServer.cpp @@ -567,22 +567,31 @@ std::unique_ptr InternalServer::handle_search(const RequestContext& re } } + /* Make the search */ - std::shared_ptr searcher; - if (archive) { - searcher = searcherCache.getOrPut(bookId, [=](){ return std::make_shared(*archive);}); - } else { - for (auto& bookId: mp_library->filter(kiwix::Filter().local(true).valid(true))) { - auto currentArchive = mp_library->getArchiveById(bookId); - if (currentArchive) { - if (! searcher) { - searcher = std::make_shared(*currentArchive); - } else { - searcher->addArchive(*currentArchive); + // Try to get a search from the searchInfo, else build it + std::shared_ptr search; + search = searchCache.getOrPut(searchInfo, + [=](){ + std::shared_ptr searcher; + if (archive) { + searcher = searcherCache.getOrPut(bookId, [=](){ return std::make_shared(*archive);}); + } else { + for (auto& bookId: mp_library->filter(kiwix::Filter().local(true).valid(true))) { + auto currentArchive = mp_library->getArchiveById(bookId); + if (currentArchive) { + if (! searcher) { + searcher = std::make_shared(*currentArchive); + } else { + searcher->addArchive(*currentArchive); + } + } } } + return make_shared(searcher->search(searchInfo.getZimQuery(m_verbose.load()))); } - } + ); + auto start = 0; try { @@ -601,9 +610,6 @@ std::unique_ptr InternalServer::handle_search(const RequestContext& re } /* Get the results */ - std::shared_ptr search; - search = searchCache.getOrPut(searchInfo, [=](){ return make_shared(searcher->search(searchInfo.getZimQuery(m_verbose.load())));}); - SearchRenderer renderer(search->getResults(start, pageLength), mp_nameMapper, mp_library, start, search->getEstimatedMatches()); renderer.setSearchPattern(searchInfo.pattern);