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,7 +567,12 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
}
}
/* Make the search */
// Try to get a search from the searchInfo, else build it
std::shared_ptr<zim::Search> search;
search = searchCache.getOrPut(searchInfo,
[=](){
std::shared_ptr<zim::Searcher> searcher;
if (archive) {
searcher = searcherCache.getOrPut(bookId, [=](){ return std::make_shared<zim::Searcher>(*archive);});
@ -583,6 +588,10 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
}
}
}
return make_shared<zim::Search>(searcher->search(searchInfo.getZimQuery(m_verbose.load())));
}
);
auto start = 0;
try {
@ -601,9 +610,6 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
}
/* 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,
search->getEstimatedMatches());
renderer.setSearchPattern(searchInfo.pattern);