mhs-xapian 1.0.18a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +3 -0
- data/AUTHORS +1 -0
- data/COPYING +340 -0
- data/ChangeLog +5876 -0
- data/HACKING +101 -0
- data/INSTALL +293 -0
- data/Makefile +722 -0
- data/Makefile.am +26 -0
- data/Makefile.in +722 -0
- data/NEWS +2110 -0
- data/README +59 -0
- data/Rakefile +51 -0
- data/TODO +47 -0
- data/aclocal.m4 +7675 -0
- data/config.guess +1501 -0
- data/config.h +56 -0
- data/config.h.in +55 -0
- data/config.status +1298 -0
- data/config.sub +1705 -0
- data/configure +18536 -0
- data/configure.ac +944 -0
- data/csharp/.deps/xapian_wrap.Plo +1 -0
- data/csharp/AssemblyInfo.cs +40 -0
- data/csharp/AssemblyInfo.cs.in +40 -0
- data/csharp/Auto.cs +46 -0
- data/csharp/BM25Weight.cs +107 -0
- data/csharp/BoolWeight.cs +103 -0
- data/csharp/Database.cs +275 -0
- data/csharp/DateValueRangeProcessor.cs +61 -0
- data/csharp/Document.cs +177 -0
- data/csharp/ESet.cs +94 -0
- data/csharp/ESetIterator.cs +117 -0
- data/csharp/Enquire.cs +274 -0
- data/csharp/ExpandDecider.cs +76 -0
- data/csharp/Flint.cs +58 -0
- data/csharp/InMemory.cs +46 -0
- data/csharp/MSet.cs +193 -0
- data/csharp/MSetIterator.cs +141 -0
- data/csharp/Makefile +868 -0
- data/csharp/Makefile.am +106 -0
- data/csharp/Makefile.in +868 -0
- data/csharp/MatchDecider.cs +76 -0
- data/csharp/MultiValueSorter.cs +63 -0
- data/csharp/NumberValueRangeProcessor.cs +61 -0
- data/csharp/PositionIterator.cs +101 -0
- data/csharp/PostingIterator.cs +125 -0
- data/csharp/Quartz.cs +58 -0
- data/csharp/Query.cs +150 -0
- data/csharp/QueryParser.cs +174 -0
- data/csharp/RSet.cs +102 -0
- data/csharp/Remote.cs +100 -0
- data/csharp/SWIGTYPE_p_std__string.cs +30 -0
- data/csharp/SWIGTYPE_p_std__vectorTXapian__Query_t.cs +30 -0
- data/csharp/SWIGTYPE_p_std__vectorTstd__string_t.cs +30 -0
- data/csharp/SimpleStopper.cs +64 -0
- data/csharp/SmokeTest.cs +178 -0
- data/csharp/Sorter.cs +76 -0
- data/csharp/Stem.cs +66 -0
- data/csharp/Stopper.cs +91 -0
- data/csharp/StringValueRangeProcessor.cs +53 -0
- data/csharp/TermGenerator.cs +152 -0
- data/csharp/TermIterator.cs +125 -0
- data/csharp/TradWeight.cs +107 -0
- data/csharp/ValueIterator.cs +102 -0
- data/csharp/ValueRangeProcessor.cs +76 -0
- data/csharp/Version.cs +60 -0
- data/csharp/Weight.cs +93 -0
- data/csharp/WritableDatabase.cs +153 -0
- data/csharp/Xapian.cs +65 -0
- data/csharp/XapianPINVOKE.cs +1527 -0
- data/csharp/docs/Makefile +450 -0
- data/csharp/docs/Makefile.am +16 -0
- data/csharp/docs/Makefile.in +450 -0
- data/csharp/docs/examples/SimpleExpand.cs +109 -0
- data/csharp/docs/examples/SimpleIndex.cs +71 -0
- data/csharp/docs/examples/SimpleSearch.cs +78 -0
- data/csharp/docs/index.html +211 -0
- data/csharp/util.i +233 -0
- data/csharp/xapian_wrap.cc +10338 -0
- data/csharp/xapian_wrap.h +93 -0
- data/depcomp +632 -0
- data/extconf.rb +20 -0
- data/generic/except.i +80 -0
- data/generic/generic.mk +48 -0
- data/install-sh +520 -0
- data/java-swig/.deps/xapian_wrap.Plo +1 -0
- data/java-swig/Auto.java +35 -0
- data/java-swig/BM25Weight.java +81 -0
- data/java-swig/BoolWeight.java +77 -0
- data/java-swig/Database.java +195 -0
- data/java-swig/DateValueRangeProcessor.java +51 -0
- data/java-swig/Document.java +135 -0
- data/java-swig/ESet.java +71 -0
- data/java-swig/ESetIterator.java +71 -0
- data/java-swig/Enquire.java +246 -0
- data/java-swig/ExpandDecider.java +59 -0
- data/java-swig/Flint.java +43 -0
- data/java-swig/InMemory.java +35 -0
- data/java-swig/MSet.java +143 -0
- data/java-swig/MSetIterator.java +87 -0
- data/java-swig/Makefile +781 -0
- data/java-swig/Makefile.am +132 -0
- data/java-swig/Makefile.in +781 -0
- data/java-swig/MatchDecider.java +59 -0
- data/java-swig/MultiValueSorter.java +51 -0
- data/java-swig/NumberValueRangeProcessor.java +51 -0
- data/java-swig/PositionIterator.java +63 -0
- data/java-swig/PostingIterator.java +83 -0
- data/java-swig/Quartz.java +43 -0
- data/java-swig/Query.java +189 -0
- data/java-swig/QueryParser.java +214 -0
- data/java-swig/RSet.java +79 -0
- data/java-swig/Remote.java +71 -0
- data/java-swig/SWIGTYPE_p_std__string.java +25 -0
- data/java-swig/SimpleStopper.java +51 -0
- data/java-swig/SmokeTest.java +161 -0
- data/java-swig/Sorter.java +59 -0
- data/java-swig/Stem.java +51 -0
- data/java-swig/Stopper.java +63 -0
- data/java-swig/StringValueRangeProcessor.java +43 -0
- data/java-swig/TermGenerator.java +158 -0
- data/java-swig/TermIterator.java +83 -0
- data/java-swig/TradWeight.java +81 -0
- data/java-swig/ValueIterator.java +67 -0
- data/java-swig/ValueRangeProcessor.java +59 -0
- data/java-swig/Version.java +47 -0
- data/java-swig/Weight.java +68 -0
- data/java-swig/WritableDatabase.java +123 -0
- data/java-swig/Xapian.java +39 -0
- data/java-swig/XapianConstants.java +15 -0
- data/java-swig/XapianJNI.java +508 -0
- data/java-swig/run-java-test +6 -0
- data/java-swig/xapian_wrap.cc +12594 -0
- data/java-swig/xapian_wrap.h +91 -0
- data/java/Makefile +660 -0
- data/java/Makefile.am +35 -0
- data/java/Makefile.in +660 -0
- data/java/README +76 -0
- data/java/SmokeTest.java +148 -0
- data/java/native/.deps/Database.Plo +1 -0
- data/java/native/.deps/Document.Plo +1 -0
- data/java/native/.deps/ESet.Plo +1 -0
- data/java/native/.deps/ESetIterator.Plo +1 -0
- data/java/native/.deps/Enquire.Plo +1 -0
- data/java/native/.deps/MSet.Plo +1 -0
- data/java/native/.deps/MSetIterator.Plo +1 -0
- data/java/native/.deps/PositionIterator.Plo +1 -0
- data/java/native/.deps/Query.Plo +1 -0
- data/java/native/.deps/RSet.Plo +1 -0
- data/java/native/.deps/Stem.Plo +1 -0
- data/java/native/.deps/TermIterator.Plo +1 -0
- data/java/native/.deps/WritableDatabase.Plo +1 -0
- data/java/native/.deps/org_xapian_XapianJNI.Plo +1 -0
- data/java/native/.deps/utils.Plo +1 -0
- data/java/native/Database.cc +222 -0
- data/java/native/Document.cc +173 -0
- data/java/native/ESet.cc +79 -0
- data/java/native/ESetIterator.cc +82 -0
- data/java/native/Enquire.cc +271 -0
- data/java/native/MSet.cc +169 -0
- data/java/native/MSetIterator.cc +107 -0
- data/java/native/Makefile +594 -0
- data/java/native/Makefile.am +51 -0
- data/java/native/Makefile.in +594 -0
- data/java/native/PositionIterator.cc +64 -0
- data/java/native/Query.cc +180 -0
- data/java/native/RSet.cc +98 -0
- data/java/native/Stem.cc +75 -0
- data/java/native/TermIterator.cc +107 -0
- data/java/native/WritableDatabase.cc +118 -0
- data/java/native/XapianObjectHolder.h +115 -0
- data/java/native/org_xapian_XapianJNI.cc +78 -0
- data/java/native/org_xapian_XapianJNI.h +1369 -0
- data/java/native/utils.cc +51 -0
- data/java/native/xapian_jni.h +116 -0
- data/java/org/xapian/Database.java +148 -0
- data/java/org/xapian/Document.java +135 -0
- data/java/org/xapian/ESet.java +66 -0
- data/java/org/xapian/ESetIterator.java +97 -0
- data/java/org/xapian/Enquire.java +136 -0
- data/java/org/xapian/ExpandDecider.java +30 -0
- data/java/org/xapian/MSet.java +104 -0
- data/java/org/xapian/MSetIterator.java +132 -0
- data/java/org/xapian/Makefile +580 -0
- data/java/org/xapian/Makefile.am +38 -0
- data/java/org/xapian/Makefile.in +580 -0
- data/java/org/xapian/MatchDecider.java +30 -0
- data/java/org/xapian/PositionIterator.java +89 -0
- data/java/org/xapian/Query.java +190 -0
- data/java/org/xapian/RSet.java +89 -0
- data/java/org/xapian/Stem.java +80 -0
- data/java/org/xapian/TermIterator.java +142 -0
- data/java/org/xapian/WritableDatabase.java +92 -0
- data/java/org/xapian/Xapian.java +114 -0
- data/java/org/xapian/XapianJNI.java +444 -0
- data/java/org/xapian/errors/AssertionError.java +40 -0
- data/java/org/xapian/errors/DatabaseCorruptError.java +40 -0
- data/java/org/xapian/errors/DatabaseError.java +40 -0
- data/java/org/xapian/errors/DatabaseLockError.java +40 -0
- data/java/org/xapian/errors/DatabaseModifiedError.java +40 -0
- data/java/org/xapian/errors/DatabaseOpeningError.java +40 -0
- data/java/org/xapian/errors/DocNotFoundError.java +40 -0
- data/java/org/xapian/errors/FeatureUnavailableError.java +40 -0
- data/java/org/xapian/errors/InternalError.java +40 -0
- data/java/org/xapian/errors/InvalidArgumentError.java +40 -0
- data/java/org/xapian/errors/InvalidOperationError.java +40 -0
- data/java/org/xapian/errors/LogicError.java +40 -0
- data/java/org/xapian/errors/Makefile +416 -0
- data/java/org/xapian/errors/Makefile.am +32 -0
- data/java/org/xapian/errors/Makefile.in +416 -0
- data/java/org/xapian/errors/NetworkError.java +40 -0
- data/java/org/xapian/errors/NetworkTimeoutError.java +40 -0
- data/java/org/xapian/errors/RangeError.java +40 -0
- data/java/org/xapian/errors/RuntimeError.java +40 -0
- data/java/org/xapian/errors/UnimplementedError.java +40 -0
- data/java/org/xapian/errors/XapianError.java +40 -0
- data/java/org/xapian/errors/XapianRuntimeError.java +49 -0
- data/java/org/xapian/examples/Makefile +391 -0
- data/java/org/xapian/examples/Makefile.am +8 -0
- data/java/org/xapian/examples/Makefile.in +391 -0
- data/java/org/xapian/examples/SimpleIndex.java +68 -0
- data/java/org/xapian/examples/SimpleSearch.java +71 -0
- data/java/run-java-test +6 -0
- data/libtool +7618 -0
- data/ltmain.sh +6956 -0
- data/mhs-xapian.gemspec +368 -0
- data/missing +378 -0
- data/php/.deps/xapian_wrap.Plo +1 -0
- data/php/Makefile +871 -0
- data/php/Makefile.am +82 -0
- data/php/Makefile.in +871 -0
- data/php/docs/Makefile +453 -0
- data/php/docs/Makefile.am +19 -0
- data/php/docs/Makefile.in +453 -0
- data/php/docs/examples/simpleexpand.php4 +108 -0
- data/php/docs/examples/simpleexpand.php5 +104 -0
- data/php/docs/examples/simpleindex.php4 +76 -0
- data/php/docs/examples/simpleindex.php5 +73 -0
- data/php/docs/examples/simplesearch.php4 +75 -0
- data/php/docs/examples/simplesearch.php5 +72 -0
- data/php/docs/index.html +313 -0
- data/php/except.i +98 -0
- data/php/php4/php_xapian.h +323 -0
- data/php/php4/xapian.php +32 -0
- data/php/php4/xapian_wrap.cc +27656 -0
- data/php/php5/php_xapian.h +319 -0
- data/php/php5/xapian.php +1566 -0
- data/php/php5/xapian_wrap.cc +24330 -0
- data/php/smoketest.php +246 -0
- data/php/smoketest4.php +84 -0
- data/php/smoketest5.php +79 -0
- data/php/util.i +187 -0
- data/python/.deps/xapian_wrap.Plo +1 -0
- data/python/Makefile +891 -0
- data/python/Makefile.am +105 -0
- data/python/Makefile.in +891 -0
- data/python/doccomments.i +5134 -0
- data/python/docs/Makefile +448 -0
- data/python/docs/Makefile.am +14 -0
- data/python/docs/Makefile.in +448 -0
- data/python/docs/examples/simpleexpand.py +98 -0
- data/python/docs/examples/simpleindex.py +65 -0
- data/python/docs/examples/simplematchdecider.py +78 -0
- data/python/docs/examples/simplesearch.py +65 -0
- data/python/docs/index.html +420 -0
- data/python/except.i +290 -0
- data/python/extra.i +1048 -0
- data/python/extracomments.i +28 -0
- data/python/generate-python-exceptions +189 -0
- data/python/generate-python-exceptions.in +189 -0
- data/python/modern/xapian.py +5662 -0
- data/python/modern/xapian_wrap.cc +35170 -0
- data/python/modern/xapian_wrap.h +244 -0
- data/python/pythontest.py +1110 -0
- data/python/smoketest.py +328 -0
- data/python/testsuite.py +382 -0
- data/python/util.i +517 -0
- data/ruby/.deps/xapian_wrap.Plo +494 -0
- data/ruby/.libs/_xapian.bundle +0 -0
- data/ruby/.libs/_xapian.bundle.dSYM/Contents/Info.plist +25 -0
- data/ruby/.libs/_xapian.bundle.dSYM/Contents/Resources/DWARF/_xapian.bundle +0 -0
- data/ruby/.libs/_xapian.la +35 -0
- data/ruby/.libs/_xapian.lai +35 -0
- data/ruby/Makefile +854 -0
- data/ruby/Makefile.am +62 -0
- data/ruby/Makefile.in +854 -0
- data/ruby/_xapian.la +35 -0
- data/ruby/docs/Makefile +487 -0
- data/ruby/docs/Makefile.am +50 -0
- data/ruby/docs/Makefile.in +487 -0
- data/ruby/docs/examples/simpleexpand.rb +98 -0
- data/ruby/docs/examples/simpleindex.rb +60 -0
- data/ruby/docs/examples/simplematchdecider.rb +74 -0
- data/ruby/docs/examples/simplesearch.rb +63 -0
- data/ruby/docs/index.html +197 -0
- data/ruby/smoketest.rb +211 -0
- data/ruby/util.i +232 -0
- data/ruby/xapian.rb +280 -0
- data/ruby/xapian_wrap.cc +25837 -0
- data/ruby/xapian_wrap.h +65 -0
- data/ruby/xapian_wrap.lo +12 -0
- data/skiptest +2 -0
- data/stamp-h1 +1 -0
- data/tcl8/.deps/xapian_wrap.Plo +1 -0
- data/tcl8/Makefile +835 -0
- data/tcl8/Makefile.am +49 -0
- data/tcl8/Makefile.in +835 -0
- data/tcl8/docs/Makefile +448 -0
- data/tcl8/docs/Makefile.am +14 -0
- data/tcl8/docs/Makefile.in +448 -0
- data/tcl8/docs/examples/simpleexpand.tcl +104 -0
- data/tcl8/docs/examples/simpleindex.tcl +68 -0
- data/tcl8/docs/examples/simplesearch.tcl +66 -0
- data/tcl8/docs/index.html +208 -0
- data/tcl8/except.i +48 -0
- data/tcl8/pkgIndex.tcl +1 -0
- data/tcl8/pkgIndex.tcl.in +1 -0
- data/tcl8/run-tcl-test +15 -0
- data/tcl8/runtest.tcl +29 -0
- data/tcl8/smoketest.tcl +155 -0
- data/tcl8/util.i +76 -0
- data/tcl8/xapian_wrap.cc +20900 -0
- data/xapian-bindings.spec +206 -0
- data/xapian-bindings.spec.in +206 -0
- data/xapian-version.h +1 -0
- data/xapian-version.h.in +1 -0
- data/xapian.i +939 -0
- metadata +395 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
// Index each paragraph of a text file as a Xapian document.
|
2
|
+
//
|
3
|
+
// Copyright (c) 2003 James Aylett
|
4
|
+
// Copyright (c) 2004,2006,2007 Olly Betts
|
5
|
+
//
|
6
|
+
// This program is free software; you can redistribute it and/or
|
7
|
+
// modify it under the terms of the GNU General Public License as
|
8
|
+
// published by the Free Software Foundation; either version 2 of the
|
9
|
+
// License, or (at your option) any later version.
|
10
|
+
//
|
11
|
+
// This program is distributed in the hope that it will be useful,
|
12
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
// GNU General Public License for more details.
|
15
|
+
//
|
16
|
+
// You should have received a copy of the GNU General Public License
|
17
|
+
// along with this program; if not, write to the Free Software
|
18
|
+
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
19
|
+
// USA
|
20
|
+
|
21
|
+
using System;
|
22
|
+
|
23
|
+
class SimpleIndex {
|
24
|
+
public static void Main(string[] argv) {
|
25
|
+
if (argv.Length != 1) {
|
26
|
+
Console.Error.WriteLine("Usage: SimpleIndex PATH_TO_DATABASE");
|
27
|
+
Environment.Exit(1);
|
28
|
+
}
|
29
|
+
|
30
|
+
try {
|
31
|
+
// Open the database for update, creating a new database if
|
32
|
+
// necessary.
|
33
|
+
Xapian.WritableDatabase database;
|
34
|
+
database = new Xapian.WritableDatabase(argv[0], Xapian.Xapian.DB_CREATE_OR_OPEN);
|
35
|
+
|
36
|
+
Xapian.TermGenerator indexer = new Xapian.TermGenerator();
|
37
|
+
Xapian.Stem stemmer = new Xapian.Stem("english");
|
38
|
+
indexer.SetStemmer(stemmer);
|
39
|
+
|
40
|
+
string para = "";
|
41
|
+
while (true) {
|
42
|
+
string line = Console.In.ReadLine();
|
43
|
+
if (line == null) {
|
44
|
+
if (para == "") break;
|
45
|
+
line = "";
|
46
|
+
}
|
47
|
+
line = line.Trim();
|
48
|
+
if (line == "") {
|
49
|
+
if (para != "") {
|
50
|
+
// We've reached the end of a paragraph, so index it.
|
51
|
+
Xapian.Document doc = new Xapian.Document();
|
52
|
+
doc.SetData(para);
|
53
|
+
|
54
|
+
indexer.SetDocument(doc);
|
55
|
+
indexer.IndexText(para);
|
56
|
+
|
57
|
+
// Add the document to the database.
|
58
|
+
database.AddDocument(doc);
|
59
|
+
para = "";
|
60
|
+
}
|
61
|
+
} else {
|
62
|
+
if (para != "") para += " ";
|
63
|
+
para += line;
|
64
|
+
}
|
65
|
+
}
|
66
|
+
} catch (Exception e) {
|
67
|
+
Console.Error.WriteLine("Exception: " + e.ToString());
|
68
|
+
Environment.Exit(1);
|
69
|
+
}
|
70
|
+
}
|
71
|
+
}
|
@@ -0,0 +1,78 @@
|
|
1
|
+
// Simple command-line search utility.
|
2
|
+
//
|
3
|
+
// Copyright (c) 2003 James Aylett
|
4
|
+
// Copyright (c) 2004,2006,2007 Olly Betts
|
5
|
+
//
|
6
|
+
// This program is free software; you can redistribute it and/or
|
7
|
+
// modify it under the terms of the GNU General Public License as
|
8
|
+
// published by the Free Software Foundation; either version 2 of the
|
9
|
+
// License, or (at your option) any later version.
|
10
|
+
//
|
11
|
+
// This program is distributed in the hope that it will be useful,
|
12
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
// GNU General Public License for more details.
|
15
|
+
//
|
16
|
+
// You should have received a copy of the GNU General Public License
|
17
|
+
// along with this program; if not, write to the Free Software
|
18
|
+
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
19
|
+
// USA
|
20
|
+
|
21
|
+
using System;
|
22
|
+
|
23
|
+
class SimpleIndex {
|
24
|
+
public static void Main(string[] argv) {
|
25
|
+
// We require at least two command line arguments.
|
26
|
+
if (argv.Length < 2) {
|
27
|
+
Console.Error.WriteLine("Usage: SimpleSearch PATH_TO_DATABASE QUERY");
|
28
|
+
Environment.Exit(1);
|
29
|
+
}
|
30
|
+
|
31
|
+
try {
|
32
|
+
// Open the database for searching.
|
33
|
+
Xapian.Database database = new Xapian.Database(argv[0]);
|
34
|
+
|
35
|
+
// Start an enquire session.
|
36
|
+
Xapian.Enquire enquire = new Xapian.Enquire(database);
|
37
|
+
|
38
|
+
// Combine the rest of the command line arguments with spaces
|
39
|
+
// between them, so that simple queries don't have to be quoted at
|
40
|
+
// the shell level.
|
41
|
+
string query_string = argv[1];
|
42
|
+
for (int i = 2; i < argv.Length; ++i) {
|
43
|
+
query_string += ' ';
|
44
|
+
query_string += argv[i];
|
45
|
+
}
|
46
|
+
|
47
|
+
// Parse the query string to produce a Xapian::Query object.
|
48
|
+
Xapian.QueryParser qp = new Xapian.QueryParser();
|
49
|
+
Xapian.Stem stemmer = new Xapian.Stem("english");
|
50
|
+
qp.SetStemmer(stemmer);
|
51
|
+
qp.SetDatabase(database);
|
52
|
+
qp.SetStemmingStrategy(Xapian.QueryParser.stem_strategy.STEM_SOME);
|
53
|
+
Xapian.Query query = qp.ParseQuery(query_string);
|
54
|
+
Console.WriteLine("Parsed query is: " + query.GetDescription());
|
55
|
+
|
56
|
+
// Find the top 10 results for the query.
|
57
|
+
enquire.SetQuery(query);
|
58
|
+
Xapian.MSet matches = enquire.GetMSet(0, 10);
|
59
|
+
|
60
|
+
// Display the results.
|
61
|
+
Console.WriteLine("{0} results found.", matches.GetMatchesEstimated());
|
62
|
+
Console.WriteLine("Matches 1-{0}:", matches.Size());
|
63
|
+
|
64
|
+
Xapian.MSetIterator m = matches.Begin();
|
65
|
+
while (m != matches.End()) {
|
66
|
+
Console.WriteLine("{0}: {1}% docid={2} [{3}]\n",
|
67
|
+
m.GetRank() + 1,
|
68
|
+
m.GetPercent(),
|
69
|
+
m.GetDocId(),
|
70
|
+
m.GetDocument().GetData());
|
71
|
+
++m;
|
72
|
+
}
|
73
|
+
} catch (Exception e) {
|
74
|
+
Console.Error.WriteLine("Exception: " + e.ToString());
|
75
|
+
Environment.Exit(1);
|
76
|
+
}
|
77
|
+
}
|
78
|
+
}
|
@@ -0,0 +1,211 @@
|
|
1
|
+
<html><head><title>C# bindings for Xapian</title></head>
|
2
|
+
<body>
|
3
|
+
<h1>C# bindings for Xapian</h1>
|
4
|
+
|
5
|
+
<p>
|
6
|
+
The C# bindings for Xapian are packaged in the <code>Xapian</code> namespace
|
7
|
+
and largely follow the C++ API, with the following differences and
|
8
|
+
additions. C# strings and other types are converted automatically
|
9
|
+
in the bindings, so generally it should just work as expected.
|
10
|
+
</p>
|
11
|
+
|
12
|
+
<p>
|
13
|
+
The <code>examples</code> subdirectory contains examples showing how to use the
|
14
|
+
C# bindings based on the simple examples from <code>xapian-examples</code>:
|
15
|
+
<a href="examples/SimpleIndex.cs">SimpleIndex.cs</a>,
|
16
|
+
<a href="examples/SimpleSearch.cs">SimpleSearch.cs</a>,
|
17
|
+
<a href="examples/SimpleExpand.cs">SimpleExpand.cs</a>.
|
18
|
+
</p>
|
19
|
+
|
20
|
+
<p>
|
21
|
+
Note: the passing of strings from C# into Xapian and back isn't currently
|
22
|
+
zero byte safe. If you try to handle string containing zero bytes, you'll
|
23
|
+
find they get truncated at the zero byte.
|
24
|
+
</p>
|
25
|
+
|
26
|
+
<h2>Unicode Support</h2>
|
27
|
+
|
28
|
+
<p>
|
29
|
+
In Xapian 1.0.0 and later, the Xapian::Stem, Xapian::QueryParser, and
|
30
|
+
Xapian::TermGenerator classes all assume text is in UTF-8. If you're
|
31
|
+
using Mono on UNIX with a UTF-8 locale (which is the default on most
|
32
|
+
modern Linux distributions), then Xapian appears to get passed Unicode
|
33
|
+
strings as UTF-8, so it should just work. We tested with Mono 1.2.3.1
|
34
|
+
using the Mono C# 2.0 compiler (gmcs).
|
35
|
+
</p>
|
36
|
+
|
37
|
+
<p>
|
38
|
+
However, Microsoft and Mono's C# implementations apparently take
|
39
|
+
rather different approaches to Unicode, and we've not tested with
|
40
|
+
Microsoft's implementation. If you try it, please report how well
|
41
|
+
it works (or how badly it fails...)
|
42
|
+
</p>
|
43
|
+
|
44
|
+
<h2>Method Naming Conventions</h2>
|
45
|
+
|
46
|
+
<p>
|
47
|
+
Methods are renamed to use the "CamelCase" capitalisation convention which C#
|
48
|
+
normally uses. So in C# you use <code>GetDescription</code> instead of
|
49
|
+
<code>get_description</code>.
|
50
|
+
</p>
|
51
|
+
|
52
|
+
<h2>Exceptions</h2>
|
53
|
+
|
54
|
+
<p>
|
55
|
+
Exceptions are thrown as SWIG exceptions instead of Xapian
|
56
|
+
exceptions. This isn't done well at the moment; in future we will
|
57
|
+
throw wrapped Xapian exceptions. For now, it's probably easier to
|
58
|
+
catch all exceptions and try to take appropriate action based on
|
59
|
+
their associated string.
|
60
|
+
</p>
|
61
|
+
|
62
|
+
<h2>Iterators</h2>
|
63
|
+
|
64
|
+
<p>
|
65
|
+
The C#-wrapped iterators work much like their C++ counterparts, with
|
66
|
+
operators "++", "--", "==", and "!=" overloaded. E.g.:
|
67
|
+
</p>
|
68
|
+
|
69
|
+
<pre>
|
70
|
+
Xapian.MSetIterator m = mset.begin();
|
71
|
+
while (m != mset.end()) {
|
72
|
+
// do something
|
73
|
+
++m;
|
74
|
+
}
|
75
|
+
</pre>
|
76
|
+
|
77
|
+
<h2>Iterator dereferencing</h2>
|
78
|
+
|
79
|
+
<p>
|
80
|
+
C++ iterators are often dereferenced to get information, eg
|
81
|
+
<code>(*it)</code>. In C# these are all mapped to named methods, as
|
82
|
+
follows:
|
83
|
+
</p>
|
84
|
+
|
85
|
+
<table title='Iterator deferencing methods'>
|
86
|
+
<thead><td>Iterator</td><td>Dereferencing method</td></thead>
|
87
|
+
<tr><td>PositionIterator</td> <td><code>GetTermPos()</code></td></tr>
|
88
|
+
<tr><td>PostingIterator</td> <td><code>GetDocId()</code></td></tr>
|
89
|
+
<tr><td>TermIterator</td> <td><code>GetTerm()</code></td></tr>
|
90
|
+
<tr><td>ValueIterator</td> <td><code>GetValue()</code></td></tr>
|
91
|
+
<tr><td>MSetIterator</td> <td><code>GetDocId()</code></td></tr>
|
92
|
+
<tr><td>ESetIterator</td> <td><code>GetTerm()</code></td></tr>
|
93
|
+
</table>
|
94
|
+
|
95
|
+
<p>
|
96
|
+
Other methods, such as <code>MSetIterator.GetDocument()</code>, are
|
97
|
+
available unchanged.
|
98
|
+
</p>
|
99
|
+
|
100
|
+
<h2>MSet</h2>
|
101
|
+
|
102
|
+
<p>
|
103
|
+
MSet objects have some additional methods to simplify access (these
|
104
|
+
work using the C++ array dereferencing):
|
105
|
+
</p>
|
106
|
+
|
107
|
+
<table title='MSet additional methods'>
|
108
|
+
<thead><td>Method name</td><td>Explanation</td></thead>
|
109
|
+
<tr><td><code>GetHit(index)</code></td><td>returns MSetIterator at index</td></tr>
|
110
|
+
<tr><td><code>GetDocumentPercentage(index)</code></td><td><code>ConvertToPercent(GetHit(index))</code></td></tr>
|
111
|
+
<tr><td><code>GetDocument(index)</code></td><td><code>GetHit(index).GetDocument()</code></td></tr>
|
112
|
+
<tr><td><code>GetDocumentId(index)</code></td><td><code>GetHit(index).GetDocId()</code></td></tr>
|
113
|
+
</table>
|
114
|
+
|
115
|
+
<h2>Non-Class Functions</h2>
|
116
|
+
|
117
|
+
<p>The C++ API contains a few non-class functions (the Database factory
|
118
|
+
functions, and some functions reporting version information), but C# doesn't
|
119
|
+
allow functions which aren't in a class so these are wrapped as static
|
120
|
+
member functions of abstract classes like so:
|
121
|
+
<ul>
|
122
|
+
<ul>
|
123
|
+
<li> <code>Xapian::version_string()</code> is wrapped as <code>Xapian.Version.String()</code>
|
124
|
+
<li> <code>Xapian::major_version()</code> is wrapped as <code>Xapian.Version.Major()</code>
|
125
|
+
<li> <code>Xapian::minor_version()</code> is wrapped as <code>Xapian.Version.Minor()</code>
|
126
|
+
<li> <code>Xapian::revision()</code> is wrapped as <code>Xapian.Version.Revision()</code>
|
127
|
+
</ul>
|
128
|
+
<ul>
|
129
|
+
<li> <code>Xapian::Auto::open_stub()</code> is wrapped as <code>Xapian.Auto.OpenStub()</code>
|
130
|
+
<li> <code>Xapian::Flint::open()</code> is wrapped as <code>Xapian.Flint.Open()</code>
|
131
|
+
<li> <code>Xapian::InMemory::open()</code> is wrapped as <code>Xapian.InMemory.Open()</code>
|
132
|
+
<li> <code>Xapian::Quartz::open()</code> is wrapped as <code>Xapian.Quartz.Open()</code>
|
133
|
+
<li> <code>Xapian::Remote::open()</code> is wrapped as <code>Xapian.Remote.Open()</code> (both
|
134
|
+
the TCP and "program" versions are wrapped - the SWIG wrapper checks the parameter list to
|
135
|
+
decide which to call).
|
136
|
+
<li> <code>Xapian::Remote::open_writable()</code> is wrapped as <code>Xapian.Remote.OpenWritable()</code> (both
|
137
|
+
the TCP and "program" versions are wrapped - the SWIG wrapper checks the parameter list to
|
138
|
+
decide which to call).
|
139
|
+
</ul>
|
140
|
+
</ul>
|
141
|
+
|
142
|
+
<h2>Constants</h2>
|
143
|
+
|
144
|
+
<p>
|
145
|
+
The <code>Xapian::DB_*</code> constants are currently wrapped in a Xapian
|
146
|
+
class within the Xapian namespace, so have a double Xapian prefix!
|
147
|
+
So <code>Xapian::DB_CREATE_OR_OPEN</code> is available as
|
148
|
+
<code>Xapian.Xapian.DB_CREATE_OR_OPEN</code>.
|
149
|
+
The <code>Query::OP_*</code> constants are wrapped a little oddly too:
|
150
|
+
<code>Query::OP_OR</code> is wrapped as <code>Xapian.Query.op.OP_OR</code>.
|
151
|
+
Similarly, <code>QueryParser::STEM_SOME</code> as
|
152
|
+
<code>Xapian.QueryParser.stem_strategy.STEM_SOME</code>.
|
153
|
+
The naming here needs sorting out...
|
154
|
+
</p>
|
155
|
+
|
156
|
+
<h2>Query</h2>
|
157
|
+
|
158
|
+
<p>
|
159
|
+
In C++ there's a Xapian::Query constructor which takes a query operator and
|
160
|
+
start/end iterators specifying a number of terms or queries, plus an optional
|
161
|
+
parameter.
|
162
|
+
This isn't currently wrapped in C#.
|
163
|
+
<!-- FIXME implement this wrapping!
|
164
|
+
|
165
|
+
In C#, this is wrapped to accept any C# sequence (for
|
166
|
+
example a list or tuple) to give the terms/queries, and you can specify
|
167
|
+
a mixture of terms and queries if you wish. For example:
|
168
|
+
-->
|
169
|
+
</p>
|
170
|
+
|
171
|
+
<!--
|
172
|
+
<pre>
|
173
|
+
subq = xapian.Query(xapian.Query.OP_AND, "hello", "world")
|
174
|
+
q = xapian.Query(xapian.Query.OP_AND, [subq, "foo", xapian.Query("bar", 2)])
|
175
|
+
</pre>
|
176
|
+
-->
|
177
|
+
|
178
|
+
<!-- FIXME: Need to define the custom output typemap to handle this if it
|
179
|
+
actually seems useful...
|
180
|
+
<h2>Enquire</h2>
|
181
|
+
|
182
|
+
<p>
|
183
|
+
There is an additional method <code>GetMatchingTerms()</code> which takes
|
184
|
+
an MSetIterator and returns a list of terms in the current query which
|
185
|
+
match the document given by that iterator. You may find this
|
186
|
+
more convenient than using the TermIterator directly.
|
187
|
+
</p>
|
188
|
+
-->
|
189
|
+
|
190
|
+
<h2>MatchDecider</h2>
|
191
|
+
|
192
|
+
<p>
|
193
|
+
Custom MatchDeciders can be created in C#; simply subclass
|
194
|
+
Xapian.MatchDecider, and define an
|
195
|
+
Apply method that will do the work. The simplest example (which does nothing
|
196
|
+
useful) would be as follows:
|
197
|
+
</p>
|
198
|
+
|
199
|
+
<pre>
|
200
|
+
class MyMatchDecider : Xapian.MatchDecider {
|
201
|
+
public override bool Apply(Xapian.Document doc) {
|
202
|
+
return true;
|
203
|
+
}
|
204
|
+
}
|
205
|
+
</pre>
|
206
|
+
|
207
|
+
<address>
|
208
|
+
Last updated $Date: 2005-12-12T02:56:23.742308Z $
|
209
|
+
</address>
|
210
|
+
</body>
|
211
|
+
</html>
|
data/csharp/util.i
ADDED
@@ -0,0 +1,233 @@
|
|
1
|
+
%{
|
2
|
+
/* csharp/util.i: custom C# typemaps for xapian-bindings
|
3
|
+
*
|
4
|
+
* Copyright (c) 2005,2006 Olly Betts
|
5
|
+
*
|
6
|
+
* This program is free software; you can redistribute it and/or
|
7
|
+
* modify it under the terms of the GNU General Public License as
|
8
|
+
* published by the Free Software Foundation; either version 2 of the
|
9
|
+
* License, or (at your option) any later version.
|
10
|
+
*
|
11
|
+
* This program is distributed in the hope that it will be useful,
|
12
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
* GNU General Public License for more details.
|
15
|
+
*
|
16
|
+
* You should have received a copy of the GNU General Public License
|
17
|
+
* along with this program; if not, write to the Free Software
|
18
|
+
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
19
|
+
* USA
|
20
|
+
*/
|
21
|
+
|
22
|
+
// In C#, we don't get SWIG_exception in the generated C++ wrapper sources.
|
23
|
+
#define XapianException(TYPE, MSG) SWIG_CSharpException(TYPE, (MSG).c_str())
|
24
|
+
%}
|
25
|
+
|
26
|
+
// Use SWIG directors for C# wrappers.
|
27
|
+
#define XAPIAN_SWIG_DIRECTORS
|
28
|
+
|
29
|
+
// Rename function and method names to match C# conventions (e.g. from
|
30
|
+
// get_description() to GetDescription()).
|
31
|
+
%rename("%(camelcase)s",%$isfunction) "";
|
32
|
+
|
33
|
+
// Fix up API methods which aren't split by '_' on word boundaries.
|
34
|
+
%rename("GetTermPos") get_termpos;
|
35
|
+
%rename("GetTermFreq") get_termfreq;
|
36
|
+
%rename("GetTermWeight") get_termweight;
|
37
|
+
%rename("GetTermName") get_termname;
|
38
|
+
%rename("GetDocCount") get_doccount;
|
39
|
+
%rename("GetDocId") get_docid;
|
40
|
+
%rename("GetDocLength") get_doclength;
|
41
|
+
%rename("GetDocumentId") get_document_id;
|
42
|
+
%rename("PositionListBegin") positionlist_begin;
|
43
|
+
%rename("PositionListEnd") positionlist_end;
|
44
|
+
%rename("GetValueNo") get_valueno;
|
45
|
+
%rename("TermListCount") termlist_count;
|
46
|
+
%rename("TermListBegin") termlist_begin;
|
47
|
+
%rename("TermListEnd") termlist_end;
|
48
|
+
%rename("GetFirstItem") get_firstitem;
|
49
|
+
%rename("GetSumPart") get_sumpart;
|
50
|
+
%rename("GetMaxPart") get_maxpart;
|
51
|
+
%rename("GetSumExtra") get_sumextra;
|
52
|
+
%rename("GetMaxExtra") get_maxextra;
|
53
|
+
%rename("GetSumPartNeedsDocLength") get_sumpart_needs_doclength;
|
54
|
+
%rename("PostListBegin") postlist_begin;
|
55
|
+
%rename("PostListEnd") postlist_end;
|
56
|
+
%rename("AllTermsBegin") allterms_begin;
|
57
|
+
%rename("AllTermsEnd") allterms_end;
|
58
|
+
%rename("GetLastDocId") get_lastdocid;
|
59
|
+
%rename("GetAvLength") get_avlength;
|
60
|
+
%rename("StopListBegin") stoplist_begin;
|
61
|
+
%rename("StopListEnd") stoplist_end;
|
62
|
+
%rename("GetMSet") get_mset;
|
63
|
+
%rename("GetESet") get_eset;
|
64
|
+
|
65
|
+
%ignore ValueRangeProcessor::operator();
|
66
|
+
|
67
|
+
%inline {
|
68
|
+
namespace Xapian {
|
69
|
+
|
70
|
+
// Wrap Xapian::version_string as Xapian.Version.String() as C# can't have
|
71
|
+
// functions outside a class and we don't want Xapian.Xapian.VersionString()!
|
72
|
+
class Version {
|
73
|
+
private:
|
74
|
+
Version();
|
75
|
+
~Version();
|
76
|
+
public:
|
77
|
+
static const char * String() { return Xapian::version_string(); }
|
78
|
+
static int Major() { return Xapian::major_version(); }
|
79
|
+
static int Minor() { return Xapian::minor_version(); }
|
80
|
+
static int Revision() { return Xapian::revision(); }
|
81
|
+
};
|
82
|
+
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
86
|
+
namespace Xapian {
|
87
|
+
|
88
|
+
%ignore version_string;
|
89
|
+
%ignore major_version;
|
90
|
+
%ignore minor_version;
|
91
|
+
%ignore revision;
|
92
|
+
|
93
|
+
%typemap(cscode) class MSetIterator %{
|
94
|
+
public static MSetIterator operator++(MSetIterator it) {
|
95
|
+
return it.Next();
|
96
|
+
}
|
97
|
+
public static MSetIterator operator--(MSetIterator it) {
|
98
|
+
return it.Prev();
|
99
|
+
}
|
100
|
+
public override bool Equals(object o) {
|
101
|
+
return o is MSetIterator && Equals((MSetIterator)o);
|
102
|
+
}
|
103
|
+
public static bool operator==(MSetIterator a, MSetIterator b) {
|
104
|
+
if ((object)a == (object)b) return true;
|
105
|
+
if ((object)a == null || (object)b == null) return false;
|
106
|
+
return a.Equals(b);
|
107
|
+
}
|
108
|
+
public static bool operator!=(MSetIterator a, MSetIterator b) {
|
109
|
+
if ((object)a == (object)b) return false;
|
110
|
+
if ((object)a == null || (object)b == null) return true;
|
111
|
+
return !a.Equals(b);
|
112
|
+
}
|
113
|
+
// Implementing GetHashCode() to always return 0 is rather lame, but
|
114
|
+
// using iterators as keys in a hash table would be rather strange.
|
115
|
+
public override int GetHashCode() { return 0; }
|
116
|
+
%}
|
117
|
+
|
118
|
+
%typemap(cscode) ESetIterator %{
|
119
|
+
public static ESetIterator operator++(ESetIterator it) {
|
120
|
+
return it.Next();
|
121
|
+
}
|
122
|
+
public static ESetIterator operator--(ESetIterator it) {
|
123
|
+
return it.Prev();
|
124
|
+
}
|
125
|
+
public override bool Equals(object o) {
|
126
|
+
return o is ESetIterator && Equals((ESetIterator)o);
|
127
|
+
}
|
128
|
+
public static bool operator==(ESetIterator a, ESetIterator b) {
|
129
|
+
if ((object)a == (object)b) return true;
|
130
|
+
if ((object)a == null || (object)b == null) return false;
|
131
|
+
return a.Equals(b);
|
132
|
+
}
|
133
|
+
public static bool operator!=(ESetIterator a, ESetIterator b) {
|
134
|
+
if ((object)a == (object)b) return false;
|
135
|
+
if ((object)a == null || (object)b == null) return true;
|
136
|
+
return !a.Equals(b);
|
137
|
+
}
|
138
|
+
// Implementing GetHashCode() to always return 0 is rather lame, but
|
139
|
+
// using iterators as keys in a hash table would be rather strange.
|
140
|
+
public override int GetHashCode() { return 0; }
|
141
|
+
%}
|
142
|
+
|
143
|
+
%typemap(cscode) TermIterator %{
|
144
|
+
public static TermIterator operator++(TermIterator it) {
|
145
|
+
return it.Next();
|
146
|
+
}
|
147
|
+
public override bool Equals(object o) {
|
148
|
+
return o is TermIterator && Equals((TermIterator)o);
|
149
|
+
}
|
150
|
+
public static bool operator==(TermIterator a, TermIterator b) {
|
151
|
+
if ((object)a == (object)b) return true;
|
152
|
+
if ((object)a == null || (object)b == null) return false;
|
153
|
+
return a.Equals(b);
|
154
|
+
}
|
155
|
+
public static bool operator!=(TermIterator a, TermIterator b) {
|
156
|
+
if ((object)a == (object)b) return false;
|
157
|
+
if ((object)a == null || (object)b == null) return true;
|
158
|
+
return !a.Equals(b);
|
159
|
+
}
|
160
|
+
// Implementing GetHashCode() to always return 0 is rather lame, but
|
161
|
+
// using iterators as keys in a hash table would be rather strange.
|
162
|
+
public override int GetHashCode() { return 0; }
|
163
|
+
%}
|
164
|
+
|
165
|
+
%typemap(cscode) ValueIterator %{
|
166
|
+
public static ValueIterator operator++(ValueIterator it) {
|
167
|
+
return it.Next();
|
168
|
+
}
|
169
|
+
public override bool Equals(object o) {
|
170
|
+
return o is ValueIterator && Equals((ValueIterator)o);
|
171
|
+
}
|
172
|
+
public static bool operator==(ValueIterator a, ValueIterator b) {
|
173
|
+
if ((object)a == (object)b) return true;
|
174
|
+
if ((object)a == null || (object)b == null) return false;
|
175
|
+
return a.Equals(b);
|
176
|
+
}
|
177
|
+
public static bool operator!=(ValueIterator a, ValueIterator b) {
|
178
|
+
if ((object)a == (object)b) return false;
|
179
|
+
if ((object)a == null || (object)b == null) return true;
|
180
|
+
return !a.Equals(b);
|
181
|
+
}
|
182
|
+
// Implementing GetHashCode() to always return 0 is rather lame, but
|
183
|
+
// using iterators as keys in a hash table would be rather strange.
|
184
|
+
public override int GetHashCode() { return 0; }
|
185
|
+
%}
|
186
|
+
|
187
|
+
%typemap(cscode) PostingIterator %{
|
188
|
+
public static PostingIterator operator++(PostingIterator it) {
|
189
|
+
return it.Next();
|
190
|
+
}
|
191
|
+
public override bool Equals(object o) {
|
192
|
+
return o is PostingIterator && Equals((PostingIterator)o);
|
193
|
+
}
|
194
|
+
public static bool operator==(PostingIterator a, PostingIterator b) {
|
195
|
+
if ((object)a == (object)b) return true;
|
196
|
+
if ((object)a == null || (object)b == null) return false;
|
197
|
+
return a.Equals(b);
|
198
|
+
}
|
199
|
+
public static bool operator!=(PostingIterator a, PostingIterator b) {
|
200
|
+
if ((object)a == (object)b) return false;
|
201
|
+
if ((object)a == null || (object)b == null) return true;
|
202
|
+
return !a.Equals(b);
|
203
|
+
}
|
204
|
+
// Implementing GetHashCode() to always return 0 is rather lame, but
|
205
|
+
// using iterators as keys in a hash table would be rather strange.
|
206
|
+
public override int GetHashCode() { return 0; }
|
207
|
+
%}
|
208
|
+
|
209
|
+
%typemap(cscode) PositionIterator %{
|
210
|
+
public static PositionIterator operator++(PositionIterator it) {
|
211
|
+
return it.Next();
|
212
|
+
}
|
213
|
+
public override bool Equals(object o) {
|
214
|
+
return o is PositionIterator && Equals((PositionIterator)o);
|
215
|
+
}
|
216
|
+
public static bool operator==(PositionIterator a, PositionIterator b) {
|
217
|
+
if ((object)a == (object)b) return true;
|
218
|
+
if ((object)a == null || (object)b == null) return false;
|
219
|
+
return a.Equals(b);
|
220
|
+
}
|
221
|
+
public static bool operator!=(PositionIterator a, PositionIterator b) {
|
222
|
+
if ((object)a == (object)b) return false;
|
223
|
+
if ((object)a == null || (object)b == null) return true;
|
224
|
+
return !a.Equals(b);
|
225
|
+
}
|
226
|
+
// Implementing GetHashCode() to always return 0 is rather lame, but
|
227
|
+
// using iterators as keys in a hash table would be rather strange.
|
228
|
+
public override int GetHashCode() { return 0; }
|
229
|
+
%}
|
230
|
+
|
231
|
+
}
|
232
|
+
|
233
|
+
/* vim:set syntax=cpp:set noexpandtab: */
|