Better cache usage.

It is better to directly try to get the `Search` from the cache instead
of getting the `Searcher` first which could be useless in Search already
exist.
This commit is contained in:
Matthieu Gautier 2022-03-09 14:49:17 +01:00
parent d740ffe465
commit 7407f30790
1 changed files with 21 additions and 15 deletions

View File

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