mirror of https://github.com/kiwix/libkiwix.git
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:
parent
d740ffe465
commit
7407f30790
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue