00001
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <xapian.h>
00022
00023 #include <iostream>
00024 #include <string>
00025
00026 #include <cstdlib>
00027 #include <cstring>
00028
00029 using namespace std;
00030
00031 int
00032 main(int argc, char **argv)
00033 try {
00034 if (argc != 2 || argv[1][0] == '-') {
00035 int rc = 1;
00036 if (argv[1]) {
00037 if (strcmp(argv[1], "--version") == 0) {
00038 cout << "simpleindex" << endl;
00039 exit(0);
00040 }
00041 if (strcmp(argv[1], "--help") == 0) {
00042 rc = 0;
00043 }
00044 }
00045 cout << "Usage: " << argv[0] << " PATH_TO_DATABASE\n"
00046 "Index each paragraph of a text file as a Xapian document." << endl;
00047 exit(rc);
00048 }
00049
00050
00051 Xapian::WritableDatabase db(argv[1], Xapian::DB_CREATE_OR_OPEN);
00052
00053 Xapian::TermGenerator indexer;
00054 Xapian::Stem stemmer("english");
00055 indexer.set_stemmer(stemmer);
00056
00057 string para;
00058 while (true) {
00059 string line;
00060 if (cin.eof()) {
00061 if (para.empty()) break;
00062 } else {
00063 getline(cin, line);
00064 }
00065
00066 if (line.empty()) {
00067 if (!para.empty()) {
00068
00069 Xapian::Document doc;
00070 doc.set_data(para);
00071
00072 indexer.set_document(doc);
00073 indexer.index_text(para);
00074
00075
00076 db.add_document(doc);
00077
00078 para.resize(0);
00079 }
00080 } else {
00081 if (!para.empty()) para += ' ';
00082 para += line;
00083 }
00084 }
00085
00086
00087
00088
00089 db.commit();
00090 } catch (const Xapian::Error &e) {
00091 cout << e.get_description() << endl;
00092 exit(1);
00093 }