Add support of embedded ft-index in zim for kiwix-serve and kiwix-search.

- kiwix-search will try the embedded ft-index if no indexPath is specified
  in the library.xml or command argument.
- kiwix-search also uses xapianSearcher and xapianSearcher needs zimlib,
  so add zimlib in compilation flag for searcher.
- kiwix-serve already depends on zimlib.
This commit is contained in:
Matthieu Gautier 2016-08-11 17:42:51 +02:00
parent a348856c21
commit 6074b5e557
1 changed files with 22 additions and 1 deletions

View File

@ -18,6 +18,12 @@
*/
#include "xapianSearcher.h"
#include <zim/zim.h>
#include <zim/file.h>
#include <zim/article.h>
#include <zim/error.h>
#include <sys/types.h>
#include <unistd.h>
namespace kiwix {
@ -30,7 +36,22 @@ namespace kiwix {
/* Open Xapian readable database */
void XapianSearcher::openIndex(const string &directoryPath) {
this->readableDatabase = Xapian::Database(directoryPath);
bool indexInZim = false;
try
{
zim::File zimFile = zim::File(directoryPath);
zim::Article xapianArticle = zimFile.getArticle('Z', "/Z/fulltextIndex/xapian");
if (xapianArticle.good())
{
zim::offset_type dbOffset = xapianArticle.getOffset();
int databasefd = open(directoryPath.c_str(), O_RDONLY);
lseek(databasefd, dbOffset, SEEK_SET);
this->readableDatabase = Xapian::Database(databasefd);
}
} catch (zim::ZimFileFormatError)
{
this->readableDatabase = Xapian::Database(directoryPath);
}
}
/* Close Xapian writable database */