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