Changed the way we handle document sizes. The fbytes field should now be in most cases the most "natural" document size. pcbytes holds the top external container size and dbytes the text size
This commit is contained in:
+9
-4
@@ -210,6 +210,7 @@ bool Db::Native::dbDataToRclDoc(Xapian::docid docid, std::string &data,
|
||||
doc.syntabs = true;
|
||||
}
|
||||
parms.get(Doc::keyipt, doc.ipath);
|
||||
parms.get(Doc::keypcs, doc.pcbytes);
|
||||
parms.get(Doc::keyfs, doc.fbytes);
|
||||
parms.get(Doc::keyds, doc.dbytes);
|
||||
parms.get(Doc::keysig, doc.sig);
|
||||
@@ -1254,17 +1255,21 @@ bool Db::addOrUpdate(const string &udi, const string &parent_udi,
|
||||
}
|
||||
RECORD_APPEND(record, Doc::keyoc, doc.origcharset);
|
||||
|
||||
if (doc.fbytes.empty())
|
||||
doc.fbytes = doc.pcbytes;
|
||||
if (!doc.fbytes.empty())
|
||||
RECORD_APPEND(record, Doc::keyfs, doc.fbytes);
|
||||
if (!doc.pcbytes.empty())
|
||||
RECORD_APPEND(record, Doc::keypcs, doc.pcbytes);
|
||||
char sizebuf[30];
|
||||
sprintf(sizebuf, "%u", (unsigned int)doc.text.length());
|
||||
RECORD_APPEND(record, Doc::keyds, sizebuf);
|
||||
|
||||
// Note that we add the signature both as a value and in the data record
|
||||
if (!doc.sig.empty())
|
||||
RECORD_APPEND(record, Doc::keysig, doc.sig);
|
||||
newdocument.add_value(VALUE_SIG, doc.sig);
|
||||
|
||||
char sizebuf[30];
|
||||
sprintf(sizebuf, "%u", (unsigned int)doc.text.length());
|
||||
RECORD_APPEND(record, Doc::keyds, sizebuf);
|
||||
|
||||
if (!doc.ipath.empty())
|
||||
RECORD_APPEND(record, Doc::keyipt, doc.ipath);
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ namespace Rcl {
|
||||
const string Doc::keydmt("dmtime");
|
||||
const string Doc::keymt("mtime");
|
||||
const string Doc::keyoc("origcharset");
|
||||
const string Doc::keypcs("pcbytes");
|
||||
const string Doc::keyfs("fbytes");
|
||||
const string Doc::keyds("dbytes");
|
||||
const string Doc::keysz("size");
|
||||
@@ -53,6 +54,7 @@ namespace Rcl {
|
||||
LOGDEB(("Rcl::Doc::dump: dmtime: [%s]\n", dmtime.c_str()));
|
||||
LOGDEB(("Rcl::Doc::dump: origcharset: [%s]\n", origcharset.c_str()));
|
||||
LOGDEB(("Rcl::Doc::dump: syntabs: [%d]\n", syntabs));
|
||||
LOGDEB(("Rcl::Doc::dump: pcbytes: [%s]\n", pcbytes.c_str()));
|
||||
LOGDEB(("Rcl::Doc::dump: fbytes: [%s]\n", fbytes.c_str()));
|
||||
LOGDEB(("Rcl::Doc::dump: dbytes: [%s]\n", dbytes.c_str()));
|
||||
LOGDEB(("Rcl::Doc::dump: sig: [%s]\n", sig.c_str()));
|
||||
|
||||
+18
-11
@@ -87,15 +87,20 @@ class Doc {
|
||||
// as an indicative prefix at the beginning of the abstract (ugly hack)
|
||||
bool syntabs;
|
||||
|
||||
// File size. Index: Set by caller prior to Db::Add. Query: set by
|
||||
// rcldb from index doc data. Historically this always has
|
||||
// represented the whole file size (as from stat()), but there
|
||||
// would be a need for a 3rd value for multidoc files (file
|
||||
// size/doc size/ doc text size)
|
||||
string fbytes;
|
||||
// File size. This is the size of the compressed file or of the
|
||||
// external containing archive.
|
||||
// Index: Set by caller prior to Db::Add.
|
||||
// Query: not set currently (not stored)
|
||||
string pcbytes;
|
||||
|
||||
// Doc text size. Index: from text.length(). Query: set by rcldb from
|
||||
// index doc data.
|
||||
// Document size, ie, size of the .odt or .xls.
|
||||
// Index: Set in internfile from the filter stack
|
||||
// Query: set from data record
|
||||
string fbytes;
|
||||
|
||||
// Doc text size.
|
||||
// Index: from text.length().
|
||||
// Query: set by rcldb from index data record
|
||||
string dbytes;
|
||||
|
||||
// Doc signature. Used for up to date checks.
|
||||
@@ -126,6 +131,7 @@ class Doc {
|
||||
origcharset.erase();
|
||||
meta.clear();
|
||||
syntabs = false;
|
||||
pcbytes.erase();
|
||||
fbytes.erase();
|
||||
dbytes.erase();
|
||||
sig.erase();
|
||||
@@ -163,9 +169,10 @@ class Doc {
|
||||
static const string keydmt; // document mtime
|
||||
static const string keymt; // mtime dmtime if set else fmtime
|
||||
static const string keyoc; // original charset
|
||||
static const string keyfs; // file size
|
||||
static const string keyds; // document size
|
||||
static const string keysz; // dbytes if set else fbytes
|
||||
static const string keypcs; // document outer container size
|
||||
static const string keyfs; // document size
|
||||
static const string keyds; // document text size
|
||||
static const string keysz; // dbytes if set else fbytes else pcbytes
|
||||
static const string keysig; // sig
|
||||
static const string keyrr; // relevancy rating
|
||||
static const string keycc; // Collapse count
|
||||
|
||||
@@ -64,7 +64,8 @@ public:
|
||||
: m_fld(docfToDatf(f) + "=")
|
||||
{
|
||||
m_ismtime = !m_fld.compare("dmtime=");
|
||||
m_issize = !m_fld.compare("fbytes=") || !m_fld.compare("dbytes=");
|
||||
m_issize = !m_fld.compare("fbytes=") || !m_fld.compare("dbytes=") ||
|
||||
!m_fld.compare("pcbytes=");
|
||||
}
|
||||
|
||||
virtual std::string operator()(const Xapian::Document& xdoc) const
|
||||
|
||||
Reference in New Issue
Block a user