Drop wrapper structures from handle_search

Since we now have SearcherRenderer that can work with native libzim
structure, we will drop the wrapper and use them instead.
This commit is contained in:
Maneesh P M 2021-05-28 12:40:22 +05:30
parent bcece66960
commit bc821638da
1 changed files with 34 additions and 14 deletions

View File

@ -541,13 +541,13 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
} catch(const std::out_of_range&) {} } catch(const std::out_of_range&) {}
catch(const std::invalid_argument&) {} catch(const std::invalid_argument&) {}
std::shared_ptr<Reader> reader(nullptr); std::shared_ptr<zim::Archive> archive;
try { try {
reader = mp_library->getReaderById(bookId); archive = mp_library->getArchiveById(bookId);
} catch (const std::out_of_range&) {} } catch (const std::out_of_range&) {}
/* Make the search */ /* Make the search */
if ( (!reader && !bookName.empty()) if ( (!archive && !bookName.empty())
|| (patternString.empty() && ! has_geo_query) ) { || (patternString.empty() && ! has_geo_query) ) {
auto data = get_default_data(); auto data = get_default_data();
data.set("pattern", encodeDiples(patternString)); data.set("pattern", encodeDiples(patternString));
@ -557,14 +557,18 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
return std::move(response); return std::move(response);
} }
Searcher searcher; std::shared_ptr<zim::Searcher> searcher;
if (reader) { if (archive) {
searcher.add_reader(reader.get()); searcher = std::make_shared<zim::Searcher>(*archive);
} else { } else {
for (auto& bookId: mp_library->filter(kiwix::Filter().local(true).valid(true))) { for (auto& bookId: mp_library->filter(kiwix::Filter().local(true).valid(true))) {
auto currentReader = mp_library->getReaderById(bookId); auto currentArchive = mp_library->getArchiveById(bookId);
if (currentReader) { if (currentArchive) {
searcher.add_reader(currentReader.get()); if (! searcher) {
searcher = std::make_shared<zim::Searcher>(*currentArchive);
} else {
searcher->add_archive(*currentArchive);
}
} }
} }
} }
@ -589,14 +593,30 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
/* Get the results */ /* Get the results */
try { try {
zim::Query query;
if (patternString.empty()) { if (patternString.empty()) {
searcher.geo_search(latitude, longitude, distance, // Execute geo-search
start, end, m_verbose.load()); if (m_verbose.load()) {
cout << "Performing geo query `" << distance << "&(" << latitude << ";" << longitude << ")'" << endl;
}
query.setVerbose(m_verbose.load());
query.setQuery("", false);
query.setGeorange(latitude, longitude, distance);
} else { } else {
searcher.search(patternString, // Execute Ft search
start, end, m_verbose.load()); if (m_verbose.load()) {
cout << "Performing query `" << patternString << "'" << endl;
}
std::string queryString = removeAccents(patternString);
query.setQuery(queryString, false);
query.setVerbose(m_verbose.load());
} }
SearchRenderer renderer(&searcher, mp_nameMapper);
zim::Search search = searcher->search(query);
SearchRenderer renderer(search.getResults(start, end), mp_nameMapper, start,
search.getEstimatedMatches());
renderer.setSearchPattern(patternString); renderer.setSearchPattern(patternString);
renderer.setSearchContent(bookName); renderer.setSearchContent(bookName);
renderer.setProtocolPrefix(m_root + "/"); renderer.setProtocolPrefix(m_root + "/");