mirror of https://github.com/kiwix/libkiwix.git
Fix usage of zim::Searcher::getResults() in libkiwix
The correct usage does not require the user to calculate an `end` using the `pageLength`. We can directly use getResults(start, pageLength)
This commit is contained in:
parent
e74e7f5623
commit
9addd82d2d
|
@ -85,12 +85,12 @@ class Searcher
|
||||||
*
|
*
|
||||||
* @param search The search query.
|
* @param search The search query.
|
||||||
* @param resultStart the start offset of the search results (used for pagination).
|
* @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 maxResultCount Maximum results to get from start (used for pagination).
|
||||||
* @param verbose print some info on stdout if true.
|
* @param verbose print some info on stdout if true.
|
||||||
*/
|
*/
|
||||||
void search(const std::string& search,
|
void search(const std::string& search,
|
||||||
unsigned int resultStart,
|
unsigned int resultStart,
|
||||||
unsigned int resultEnd,
|
unsigned int maxResultCount,
|
||||||
const bool verbose = false);
|
const bool verbose = false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -104,12 +104,12 @@ class Searcher
|
||||||
* @param longitude The longitude of the center point.
|
* @param longitude The longitude of the center point.
|
||||||
* @param distance The radius of the disc.
|
* @param distance The radius of the disc.
|
||||||
* @param resultStart the start offset of the search results (used for pagination).
|
* @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 maxResultCount Maximum number of results to get from start (used for pagination).
|
||||||
* @param verbose print some info on stdout if true.
|
* @param verbose print some info on stdout if true.
|
||||||
*/
|
*/
|
||||||
void geo_search(float latitude, float longitude, float distance,
|
void geo_search(float latitude, float longitude, float distance,
|
||||||
unsigned int resultStart,
|
unsigned int resultStart,
|
||||||
unsigned int resultEnd,
|
unsigned int maxResultCount,
|
||||||
const bool verbose = false);
|
const bool verbose = false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -148,14 +148,14 @@ class Searcher
|
||||||
zim::SearchResultSet getSearchResultSet();
|
zim::SearchResultSet getSearchResultSet();
|
||||||
|
|
||||||
unsigned int getResultStart() { return resultStart; }
|
unsigned int getResultStart() { return resultStart; }
|
||||||
unsigned int getResultEnd() { return resultEnd; }
|
unsigned int getMaxResultCount() { return maxResultCount; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::string beautifyInteger(const unsigned int number);
|
std::string beautifyInteger(const unsigned int number);
|
||||||
void closeIndex();
|
void closeIndex();
|
||||||
void searchInIndex(string& search,
|
void searchInIndex(string& search,
|
||||||
const unsigned int resultStart,
|
const unsigned int resultStart,
|
||||||
const unsigned int resultEnd,
|
const unsigned int maxResultCount,
|
||||||
const bool verbose = false);
|
const bool verbose = false);
|
||||||
|
|
||||||
std::vector<Reader*> readers;
|
std::vector<Reader*> readers;
|
||||||
|
@ -163,7 +163,7 @@ class Searcher
|
||||||
std::string searchPattern;
|
std::string searchPattern;
|
||||||
unsigned int estimatedResultCount;
|
unsigned int estimatedResultCount;
|
||||||
unsigned int resultStart;
|
unsigned int resultStart;
|
||||||
unsigned int resultEnd;
|
unsigned int maxResultCount;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void reset();
|
void reset();
|
||||||
|
|
|
@ -67,7 +67,7 @@ Searcher::Searcher()
|
||||||
: searchPattern(""),
|
: searchPattern(""),
|
||||||
estimatedResultCount(0),
|
estimatedResultCount(0),
|
||||||
resultStart(0),
|
resultStart(0),
|
||||||
resultEnd(0)
|
maxResultCount(0)
|
||||||
{
|
{
|
||||||
loadICUExternalTables();
|
loadICUExternalTables();
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,7 @@ Reader* Searcher::get_reader(int readerIndex)
|
||||||
/* Search strings in the database */
|
/* Search strings in the database */
|
||||||
void Searcher::search(const std::string& search,
|
void Searcher::search(const std::string& search,
|
||||||
unsigned int resultStart,
|
unsigned int resultStart,
|
||||||
unsigned int resultEnd,
|
unsigned int maxResultCount,
|
||||||
const bool verbose)
|
const bool verbose)
|
||||||
{
|
{
|
||||||
this->reset();
|
this->reset();
|
||||||
|
@ -106,9 +106,9 @@ void Searcher::search(const std::string& search,
|
||||||
|
|
||||||
this->searchPattern = search;
|
this->searchPattern = search;
|
||||||
this->resultStart = resultStart;
|
this->resultStart = resultStart;
|
||||||
this->resultEnd = resultEnd;
|
this->maxResultCount = maxResultCount;
|
||||||
/* Try to find results */
|
/* Try to find results */
|
||||||
if (resultStart != resultEnd) {
|
if (maxResultCount != 0) {
|
||||||
/* Perform the search */
|
/* Perform the search */
|
||||||
string unaccentedSearch = removeAccents(search);
|
string unaccentedSearch = removeAccents(search);
|
||||||
std::vector<zim::Archive> archives;
|
std::vector<zim::Archive> archives;
|
||||||
|
@ -123,7 +123,7 @@ void Searcher::search(const std::string& search,
|
||||||
query.setQuery(unaccentedSearch, false);
|
query.setQuery(unaccentedSearch, false);
|
||||||
query.setVerbose(verbose);
|
query.setVerbose(verbose);
|
||||||
zim::Search search = searcher.search(query);
|
zim::Search search = searcher.search(query);
|
||||||
internal.reset(new SearcherInternal(search.getResults(resultStart, resultEnd)));
|
internal.reset(new SearcherInternal(search.getResults(resultStart, maxResultCount)));
|
||||||
this->estimatedResultCount = search.getEstimatedMatches();
|
this->estimatedResultCount = search.getEstimatedMatches();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ void Searcher::search(const std::string& search,
|
||||||
|
|
||||||
void Searcher::geo_search(float latitude, float longitude, float distance,
|
void Searcher::geo_search(float latitude, float longitude, float distance,
|
||||||
unsigned int resultStart,
|
unsigned int resultStart,
|
||||||
unsigned int resultEnd,
|
unsigned int maxResultCount,
|
||||||
const bool verbose)
|
const bool verbose)
|
||||||
{
|
{
|
||||||
this->reset();
|
this->reset();
|
||||||
|
@ -147,10 +147,10 @@ void Searcher::geo_search(float latitude, float longitude, float distance,
|
||||||
oss << "Articles located less than " << distance << " meters of " << latitude << ";" << longitude;
|
oss << "Articles located less than " << distance << " meters of " << latitude << ";" << longitude;
|
||||||
this->searchPattern = oss.str();
|
this->searchPattern = oss.str();
|
||||||
this->resultStart = resultStart;
|
this->resultStart = resultStart;
|
||||||
this->resultEnd = resultEnd;
|
this->maxResultCount = maxResultCount;
|
||||||
|
|
||||||
/* Try to find results */
|
/* Try to find results */
|
||||||
if (resultStart == resultEnd) {
|
if (maxResultCount == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ void Searcher::geo_search(float latitude, float longitude, float distance,
|
||||||
query.setQuery("", false);
|
query.setQuery("", false);
|
||||||
query.setGeorange(latitude, longitude, distance);
|
query.setGeorange(latitude, longitude, distance);
|
||||||
zim::Search search = searcher.search(query);
|
zim::Search search = searcher.search(query);
|
||||||
internal.reset(new SearcherInternal(search.getResults(resultStart, resultEnd)));
|
internal.reset(new SearcherInternal(search.getResults(resultStart, maxResultCount)));
|
||||||
this->estimatedResultCount = search.getEstimatedMatches();
|
this->estimatedResultCount = search.getEstimatedMatches();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,7 +206,7 @@ void Searcher::suggestions(std::string& searchPattern, const bool verbose)
|
||||||
|
|
||||||
this->searchPattern = searchPattern;
|
this->searchPattern = searchPattern;
|
||||||
this->resultStart = 0;
|
this->resultStart = 0;
|
||||||
this->resultEnd = 10;
|
this->maxResultCount = 10;
|
||||||
string unaccentedSearch = removeAccents(searchPattern);
|
string unaccentedSearch = removeAccents(searchPattern);
|
||||||
|
|
||||||
std::vector<zim::Archive> archives;
|
std::vector<zim::Archive> archives;
|
||||||
|
@ -219,7 +219,7 @@ void Searcher::suggestions(std::string& searchPattern, const bool verbose)
|
||||||
query.setVerbose(verbose);
|
query.setVerbose(verbose);
|
||||||
query.setQuery(unaccentedSearch, true);
|
query.setQuery(unaccentedSearch, true);
|
||||||
zim::Search search = searcher.search(query);
|
zim::Search search = searcher.search(query);
|
||||||
internal.reset(new SearcherInternal(search.getResults(resultStart, resultEnd)));
|
internal.reset(new SearcherInternal(search.getResults(resultStart, maxResultCount)));
|
||||||
this->estimatedResultCount = search.getEstimatedMatches();
|
this->estimatedResultCount = search.getEstimatedMatches();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -589,8 +589,6 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
|
||||||
pageLength = 25;
|
pageLength = 25;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto end = start + pageLength;
|
|
||||||
|
|
||||||
/* Get the results */
|
/* Get the results */
|
||||||
try {
|
try {
|
||||||
zim::Query query;
|
zim::Query query;
|
||||||
|
@ -615,7 +613,7 @@ std::unique_ptr<Response> InternalServer::handle_search(const RequestContext& re
|
||||||
}
|
}
|
||||||
|
|
||||||
zim::Search search = searcher->search(query);
|
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());
|
search.getEstimatedMatches());
|
||||||
renderer.setSearchPattern(patternString);
|
renderer.setSearchPattern(patternString);
|
||||||
renderer.setSearchContent(bookName);
|
renderer.setSearchContent(bookName);
|
||||||
|
|
|
@ -32,7 +32,7 @@ TEST(Searcher, incrementalRange) {
|
||||||
|
|
||||||
int suggCount = 0;
|
int suggCount = 0;
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
auto srs = search.getResults(i*5, (i + 1)*5); // get 5 results
|
auto srs = search.getResults(i*5, 5); // get 5 results
|
||||||
ASSERT_EQ(srs.size(), 5);
|
ASSERT_EQ(srs.size(), 5);
|
||||||
suggCount += srs.size();
|
suggCount += srs.size();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue