Merge pull request #526 from kiwix/lizim_search_api_change

Fixed the libkiwix build broken by the changed libzim search API
This commit is contained in:
Matthieu Gautier 2021-05-17 15:06:15 +02:00 committed by GitHub
commit 3c7faddb6e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 47 additions and 51 deletions

View File

@ -27,7 +27,7 @@
#include <cctype> #include <cctype>
#include <locale> #include <locale>
#include <string> #include <string>
#include <vector> #include <memory>
#include <vector> #include <vector>
#include "tools/pathTools.h" #include "tools/pathTools.h"
#include "tools/stringTools.h" #include "tools/stringTools.h"
@ -154,7 +154,7 @@ class Searcher
const bool verbose = false); const bool verbose = false);
std::vector<Reader*> readers; std::vector<Reader*> readers;
SearcherInternal* internal; std::unique_ptr<SearcherInternal> internal;
std::string searchPattern; std::string searchPattern;
unsigned int estimatedResultCount; unsigned int estimatedResultCount;
unsigned int resultStart; unsigned int resultStart;

View File

@ -495,14 +495,16 @@ bool Reader::searchSuggestionsSmart(const string& prefix,
bool retVal = false; bool retVal = false;
/* Try to search in the title using fulltext search database */ /* Try to search in the title using fulltext search database */
auto suggestionSearch = zim::Search(*zimArchive);
suggestionSearch.set_query(prefix);
suggestionSearch.set_range(0, suggestionsCount);
suggestionSearch.set_suggestion_mode(true);
if (suggestionSearch.get_matches_estimated()) { auto suggestionSearcher = zim::Searcher(*zimArchive);
for (auto current = suggestionSearch.begin(); zim::Query suggestionQuery;
current != suggestionSearch.end(); suggestionQuery.setQuery(prefix, true);
auto suggestionSearch = suggestionSearcher.search(suggestionQuery);
if (suggestionSearch.getEstimatedMatches()) {
const auto suggestions = suggestionSearch.getResults(0, suggestionsCount);
for (auto current = suggestions.begin();
current != suggestions.end();
current++) { current++) {
std::vector<std::string> suggestion; std::vector<std::string> suggestion;
suggestion.push_back(current->getTitle()); suggestion.push_back(current->getTitle());

View File

@ -35,7 +35,7 @@ namespace kiwix
class _Result : public Result class _Result : public Result
{ {
public: public:
_Result(zim::Search::iterator& iterator); _Result(zim::SearchResultSet::iterator iterator);
virtual ~_Result(){}; virtual ~_Result(){};
virtual std::string get_url(); virtual std::string get_url();
@ -48,26 +48,22 @@ class _Result : public Result
virtual int get_readerIndex(); virtual int get_readerIndex();
private: private:
zim::Search::iterator iterator; zim::SearchResultSet::iterator iterator;
}; };
struct SearcherInternal { struct SearcherInternal : zim::SearchResultSet {
const zim::Search* _search; explicit SearcherInternal(const zim::SearchResultSet& srs)
zim::Search::iterator current_iterator; : zim::SearchResultSet(srs)
, current_iterator(srs.begin())
SearcherInternal() : _search(NULL) {}
~SearcherInternal()
{ {
if (_search != NULL) {
delete _search;
}
} }
zim::SearchResultSet::iterator current_iterator;
}; };
/* Constructor */ /* Constructor */
Searcher::Searcher() Searcher::Searcher()
: internal(new SearcherInternal()), : searchPattern(""),
searchPattern(""),
estimatedResultCount(0), estimatedResultCount(0),
resultStart(0), resultStart(0),
resultEnd(0) resultEnd(0)
@ -78,7 +74,6 @@ Searcher::Searcher()
/* Destructor */ /* Destructor */
Searcher::~Searcher() Searcher::~Searcher()
{ {
delete internal;
} }
bool Searcher::add_reader(Reader* reader) bool Searcher::add_reader(Reader* reader)
@ -122,13 +117,13 @@ void Searcher::search(const std::string& search,
archives.push_back(*(*current)->getZimArchive()); archives.push_back(*(*current)->getZimArchive());
} }
} }
zim::Search* search = new zim::Search(archives); zim::Searcher searcher(archives);
search->set_verbose(verbose); zim::Query query;
search->set_query(unaccentedSearch); query.setQuery(unaccentedSearch, false);
search->set_range(resultStart, resultEnd); query.setVerbose(verbose);
internal->_search = search; zim::Search search = searcher.search(query);
internal->current_iterator = internal->_search->begin(); internal.reset(new SearcherInternal(search.getResults(resultStart, resultEnd)));
this->estimatedResultCount = internal->_search->get_matches_estimated(); this->estimatedResultCount = search.getEstimatedMatches();
} }
return; return;
@ -163,28 +158,28 @@ void Searcher::geo_search(float latitude, float longitude, float distance,
current++) { current++) {
archives.push_back(*(*current)->getZimArchive()); archives.push_back(*(*current)->getZimArchive());
} }
zim::Search* search = new zim::Search(archives); zim::Searcher searcher(archives);
search->set_verbose(verbose); zim::Query query;
search->set_query(""); query.setVerbose(verbose);
search->set_georange(latitude, longitude, distance); query.setQuery("", false);
search->set_range(resultStart, resultEnd); query.setGeorange(latitude, longitude, distance);
internal->_search = search; zim::Search search = searcher.search(query);
internal->current_iterator = internal->_search->begin(); internal.reset(new SearcherInternal(search.getResults(resultStart, resultEnd)));
this->estimatedResultCount = internal->_search->get_matches_estimated(); this->estimatedResultCount = search.getEstimatedMatches();
} }
void Searcher::restart_search() void Searcher::restart_search()
{ {
if (internal->_search) { if (internal.get()) {
internal->current_iterator = internal->_search->begin(); internal->current_iterator = internal->begin();
} }
} }
Result* Searcher::getNextResult() Result* Searcher::getNextResult()
{ {
if (internal->_search && if (internal.get() &&
internal->current_iterator != internal->_search->end()) { internal->current_iterator != internal->end()) {
Result* result = new _Result(internal->current_iterator); Result* result = new _Result(internal->current_iterator);
internal->current_iterator++; internal->current_iterator++;
return result; return result;
@ -218,14 +213,13 @@ void Searcher::suggestions(std::string& searchPattern, const bool verbose)
current++) { current++) {
archives.push_back(*(*current)->getZimArchive()); archives.push_back(*(*current)->getZimArchive());
} }
zim::Search* search = new zim::Search(archives); zim::Searcher searcher(archives);
search->set_verbose(verbose); zim::Query query;
search->set_query(unaccentedSearch); query.setVerbose(verbose);
search->set_range(resultStart, resultEnd); query.setQuery(unaccentedSearch, true);
search->set_suggestion_mode(true); zim::Search search = searcher.search(query);
internal->_search = search; internal.reset(new SearcherInternal(search.getResults(resultStart, resultEnd)));
internal->current_iterator = internal->_search->begin(); this->estimatedResultCount = search.getEstimatedMatches();
this->estimatedResultCount = internal->_search->get_matches_estimated();
} }
/* Return the result count estimation */ /* Return the result count estimation */
@ -234,7 +228,7 @@ unsigned int Searcher::getEstimatedResultCount()
return this->estimatedResultCount; return this->estimatedResultCount;
} }
_Result::_Result(zim::Search::iterator& iterator) _Result::_Result(zim::SearchResultSet::iterator iterator)
: iterator(iterator) : iterator(iterator)
{ {
} }