Skip to content

Commit

Permalink
Fix usage of zim::Searcher::getResults() in libkiwix
Browse files Browse the repository at this point in the history
The correct usage does not require the user to calculate an `end` using
the `pageLength`. We can directly use getResults(start, pageLength)
  • Loading branch information
maneeshpm committed Jul 30, 2021
1 parent 20cdefc commit 7d67569
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 21 deletions.
14 changes: 7 additions & 7 deletions include/searcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,12 +85,12 @@ class Searcher
*
* @param search The search query.
* @param resultStart the start offset of the search results (used for pagination).
* @param resultEnd the end offset of the search results (used for pagination).
* @param resultMax Maximum results to get from start (used for pagination).
* @param verbose print some info on stdout if true.
*/
void search(const std::string& search,
unsigned int resultStart,
unsigned int resultEnd,
unsigned int resultMax,
const bool verbose = false);

/**
Expand All @@ -104,12 +104,12 @@ class Searcher
* @param longitude The longitude of the center point.
* @param distance The radius of the disc.
* @param resultStart the start offset of the search results (used for pagination).
* @param resultEnd the end offset of the search results (used for pagination).
* @param resultMax Maximum number of results to get from start (used for pagination).
* @param verbose print some info on stdout if true.
*/
void geo_search(float latitude, float longitude, float distance,
unsigned int resultStart,
unsigned int resultEnd,
unsigned int resultMax,
const bool verbose = false);

/**
Expand Down Expand Up @@ -148,22 +148,22 @@ class Searcher
zim::SearchResultSet getSearchResultSet();

unsigned int getResultStart() { return resultStart; }
unsigned int getResultEnd() { return resultEnd; }
unsigned int getResultMax() { return resultMax; }

protected:
std::string beautifyInteger(const unsigned int number);
void closeIndex();
void searchInIndex(string& search,
const unsigned int resultStart,
const unsigned int resultEnd,
const unsigned int resultMax,
const bool verbose = false);

std::vector<Reader*> readers;
std::unique_ptr<SearcherInternal> internal;
std::string searchPattern;
unsigned int estimatedResultCount;
unsigned int resultStart;
unsigned int resultEnd;
unsigned int resultMax;

private:
void reset();
Expand Down
22 changes: 11 additions & 11 deletions src/searcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ Searcher::Searcher()
: searchPattern(""),
estimatedResultCount(0),
resultStart(0),
resultEnd(0)
resultMax(0)
{
loadICUExternalTables();
}
Expand Down Expand Up @@ -95,7 +95,7 @@ Reader* Searcher::get_reader(int readerIndex)
/* Search strings in the database */
void Searcher::search(const std::string& search,
unsigned int resultStart,
unsigned int resultEnd,
unsigned int resultMax,
const bool verbose)
{
this->reset();
Expand All @@ -106,9 +106,9 @@ void Searcher::search(const std::string& search,

this->searchPattern = search;
this->resultStart = resultStart;
this->resultEnd = resultEnd;
this->resultMax = resultMax;
/* Try to find results */
if (resultStart != resultEnd) {
if (resultMax != 0) {
/* Perform the search */
string unaccentedSearch = removeAccents(search);
std::vector<zim::Archive> archives;
Expand All @@ -123,7 +123,7 @@ void Searcher::search(const std::string& search,
query.setQuery(unaccentedSearch, false);
query.setVerbose(verbose);
zim::Search search = searcher.search(query);
internal.reset(new SearcherInternal(search.getResults(resultStart, resultEnd)));
internal.reset(new SearcherInternal(search.getResults(resultStart, resultMax)));
this->estimatedResultCount = search.getEstimatedMatches();
}

Expand All @@ -133,7 +133,7 @@ void Searcher::search(const std::string& search,

void Searcher::geo_search(float latitude, float longitude, float distance,
unsigned int resultStart,
unsigned int resultEnd,
unsigned int resultMax,
const bool verbose)
{
this->reset();
Expand All @@ -147,10 +147,10 @@ void Searcher::geo_search(float latitude, float longitude, float distance,
oss << "Articles located less than " << distance << " meters of " << latitude << ";" << longitude;
this->searchPattern = oss.str();
this->resultStart = resultStart;
this->resultEnd = resultEnd;
this->resultMax = resultMax;

/* Try to find results */
if (resultStart == resultEnd) {
if (resultMax == 0) {
return;
}

Expand All @@ -165,7 +165,7 @@ void Searcher::geo_search(float latitude, float longitude, float distance,
query.setQuery("", false);
query.setGeorange(latitude, longitude, distance);
zim::Search search = searcher.search(query);
internal.reset(new SearcherInternal(search.getResults(resultStart, resultEnd)));
internal.reset(new SearcherInternal(search.getResults(resultStart, resultMax)));
this->estimatedResultCount = search.getEstimatedMatches();
}

Expand Down Expand Up @@ -206,7 +206,7 @@ void Searcher::suggestions(std::string& searchPattern, const bool verbose)

this->searchPattern = searchPattern;
this->resultStart = 0;
this->resultEnd = 10;
this->resultMax = 10;
string unaccentedSearch = removeAccents(searchPattern);

std::vector<zim::Archive> archives;
Expand All @@ -219,7 +219,7 @@ void Searcher::suggestions(std::string& searchPattern, const bool verbose)
query.setVerbose(verbose);
query.setQuery(unaccentedSearch, true);
zim::Search search = searcher.search(query);
internal.reset(new SearcherInternal(search.getResults(resultStart, resultEnd)));
internal.reset(new SearcherInternal(search.getResults(resultStart, resultMax)));
this->estimatedResultCount = search.getEstimatedMatches();
}

Expand Down
4 changes: 1 addition & 3 deletions src/server/internalServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -589,8 +589,6 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
pageLength = 25;
}

auto end = start + pageLength;

/* Get the results */
try {
zim::Query query;
Expand All @@ -615,7 +613,7 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
}

zim::Search search = searcher->search(query);
SearchRenderer renderer(search.getResults(start, end), mp_nameMapper, start,
SearchRenderer renderer(search.getResults(start, pageLength), mp_nameMapper, start,
search.getEstimatedMatches());
renderer.setSearchPattern(patternString);
renderer.setSearchContent(bookName);
Expand Down

0 comments on commit 7d67569

Please sign in to comment.