|
a/src/query/xadump.cpp |
|
b/src/query/xadump.cpp |
|
... |
|
... |
43 |
"-e <output encoding>\n"
|
43 |
"-e <output encoding>\n"
|
44 |
" -i docid -D : get document data for docid\n"
|
44 |
" -i docid -D : get document data for docid\n"
|
45 |
" -i docid -X : delete document docid\n"
|
45 |
" -i docid -X : delete document docid\n"
|
46 |
" -i docid -b : 'rebuild' document from term positions\n"
|
46 |
" -i docid -b : 'rebuild' document from term positions\n"
|
47 |
" -i docid -T : term list for doc docid\n"
|
47 |
" -i docid -T : term list for doc docid\n"
|
|
|
48 |
" -i docid -r : reconstructed text for docid\n"
|
48 |
" -t term -E : term existence test\n"
|
49 |
" -t term -E : term existence test\n"
|
49 |
" -t term -F : retrieve term frequency data for given term\n"
|
50 |
" -t term -F : retrieve term frequency data for given term\n"
|
50 |
" -t term -P : retrieve postings for term\n"
|
51 |
" -t term -P : retrieve postings for term\n"
|
51 |
" -T : list all terms\n"
|
52 |
" -T : list all terms\n"
|
52 |
" -f : precede each term in the list with its occurrence counts\n"
|
53 |
" -f : precede each term in the list with its occurrence counts\n"
|
|
... |
|
... |
81 |
#define OPT_q 0x1000
|
82 |
#define OPT_q 0x1000
|
82 |
#define OPT_s 0x2000
|
83 |
#define OPT_s 0x2000
|
83 |
#define OPT_t 0x4000
|
84 |
#define OPT_t 0x4000
|
84 |
#define OPT_x 0x8000
|
85 |
#define OPT_x 0x8000
|
85 |
#define OPT_l 0x10000
|
86 |
#define OPT_l 0x10000
|
|
|
87 |
#define OPT_r 0x20000
|
86 |
|
88 |
|
87 |
// Compute an exploded version of string, inserting a space between each char.
|
89 |
// Compute an exploded version of string, inserting a space between each char.
|
88 |
// (no character combining possible)
|
90 |
// (no character combining possible)
|
89 |
static string detailstring(const string& in)
|
91 |
static string detailstring(const string& in)
|
90 |
{
|
92 |
{
|
|
... |
|
... |
122 |
{
|
124 |
{
|
123 |
if (o_index_stripchars) {
|
125 |
if (o_index_stripchars) {
|
124 |
return trm.size() && 'A' <= trm[0] && trm[0] <= 'Z';
|
126 |
return trm.size() && 'A' <= trm[0] && trm[0] <= 'Z';
|
125 |
} else {
|
127 |
} else {
|
126 |
return trm.size() > 0 && trm[0] == ':';
|
128 |
return trm.size() > 0 && trm[0] == ':';
|
|
|
129 |
}
|
|
|
130 |
}
|
|
|
131 |
|
|
|
132 |
|
|
|
133 |
void wholedoc(Xapian::Database* db, int docid)
|
|
|
134 |
{
|
|
|
135 |
vector<string> buf;
|
|
|
136 |
Xapian::TermIterator term;
|
|
|
137 |
for (term = db->termlist_begin(docid);
|
|
|
138 |
term != db->termlist_end(docid); term++) {
|
|
|
139 |
Xapian::PositionIterator pos;
|
|
|
140 |
for (pos = db->positionlist_begin(docid, *term);
|
|
|
141 |
pos != db->positionlist_end(docid, *term); pos++) {
|
|
|
142 |
if (buf.size() < *pos)
|
|
|
143 |
buf.resize(2*((*pos)+1));
|
|
|
144 |
buf[(*pos)] = *term;
|
|
|
145 |
}
|
|
|
146 |
}
|
|
|
147 |
for (vector<string>::iterator it = buf.begin(); it != buf.end(); it++) {
|
|
|
148 |
if (!it->empty())
|
|
|
149 |
cout << *it << " ";
|
127 |
}
|
150 |
}
|
128 |
}
|
151 |
}
|
129 |
|
152 |
|
130 |
int main(int argc, char **argv)
|
153 |
int main(int argc, char **argv)
|
131 |
{
|
154 |
{
|
|
... |
|
... |
163 |
goto b1;
|
186 |
goto b1;
|
164 |
case 'l': op_flags |= OPT_l; break;
|
187 |
case 'l': op_flags |= OPT_l; break;
|
165 |
case 'n': op_flags |= OPT_n; break;
|
188 |
case 'n': op_flags |= OPT_n; break;
|
166 |
case 'P': op_flags |= OPT_P; break;
|
189 |
case 'P': op_flags |= OPT_P; break;
|
167 |
case 'q': op_flags |= OPT_q; break;
|
190 |
case 'q': op_flags |= OPT_q; break;
|
|
|
191 |
case 'r': op_flags |= OPT_r; break;
|
168 |
case 's': op_flags |= OPT_s; break;
|
192 |
case 's': op_flags |= OPT_s; break;
|
169 |
case 'T': op_flags |= OPT_T; break;
|
193 |
case 'T': op_flags |= OPT_T; break;
|
170 |
case 't': op_flags |= OPT_t; if (argc < 2) Usage();
|
194 |
case 't': op_flags |= OPT_t; if (argc < 2) Usage();
|
171 |
aterm = *(++argv);
|
195 |
aterm = *(++argv);
|
172 |
argc--;
|
196 |
argc--;
|
|
... |
|
... |
257 |
}
|
281 |
}
|
258 |
} else if (op_flags & OPT_D) {
|
282 |
} else if (op_flags & OPT_D) {
|
259 |
Xapian::Document doc = db->get_document(docid);
|
283 |
Xapian::Document doc = db->get_document(docid);
|
260 |
string data = doc.get_data();
|
284 |
string data = doc.get_data();
|
261 |
cout << data << endl;
|
285 |
cout << data << endl;
|
|
|
286 |
} else if (op_flags & OPT_r) {
|
|
|
287 |
wholedoc(db, docid);
|
262 |
} else if (op_flags & OPT_X) {
|
288 |
} else if (op_flags & OPT_X) {
|
263 |
Xapian::Document doc = db->get_document(docid);
|
289 |
Xapian::Document doc = db->get_document(docid);
|
264 |
string data = doc.get_data();
|
290 |
string data = doc.get_data();
|
265 |
cout << data << endl;
|
291 |
cout << data << endl;
|
266 |
cout << "Really delete xapian document ?" << endl;
|
292 |
cout << "Really delete xapian document ?" << endl;
|