Xapian-core 1.0.18 (2009-02-14):
API:
* Document: Add new add_boolean_term() method, which is an alias for add_term()
with wdfinc=0.
* QueryParser:
+ Add support for quoting boolean terms so they can contain arbitrary
characters (partly addresses ticket#128).
+ Add ENCLOSING_MARK and COMBINING_SPACING_MARK categories, plus several
zero-width space characters, as phrase generators. This mirrors a better
fix in 1.1.4, but without losing compatibility with existing databases.
+ Fix handling of an explicit AND before a hated term (foo AND -bar).
(ticket#447)
* TermIterator: Only include trailing '+' or '#' on a term if it isn't followed
by a word character (makes more sense and matches QueryParser's behaviour).
(ticket#446)
* Database: Fix many methods to behave better on a database with no
subdatabases, such as is constructed by Database(). Fixes ticket#415.
testsuite:
* Add test coverage for xapian-compact, and improve coverage for
WritableDatabase::replace_document().
* apitest: Rename matchfunctor<n> to matchdecider<n> to match current
terminology.
flint backend:
* When updating documents, don't update posting entries which haven't changed.
Largely fixes ticket #250.
* If the number of entries in the position table happened to be 4294967296 or
an exact multiple, Xapian would ignore positional data for that table when
running queries.
* Iterating all the terms in the database with a prefix is now slightly more
efficient.
* Fix locking code to work if stdin and/or stdout have been closed.
* If a document is replaced with itself unmodified, we no longer increase the
automatic flush counter.
* When iterating a posting list modified since the last flush(), the reported
wdf is now correct (previously it was too high by its old value).
* Replacing a document deleted since the last flush failed to update the
collection frequency and wdf, and caused an assertion failure when assertions
were enabled.
* WritableDatabase::replace_document() didn't always remove old positional
data (the only effect is that the position table was bloated by unwanted
entries).
* xapian-inspect:
+ New "until" command which shows entries until a specified key is reached.
+ New "open" command which allows easy switching between tables.
* xapian-compact: Fix typos in --help output.
quartz backend:
* Replacing a document deleted since the last flush failed to update the
collection frequency and wdf, and caused an assertion failure when assertions
were enabled.
* WritableDatabase::replace_document() didn't always remove old positional
data (the only effect is that the position table was bloated by unwanted
entries).
remote backend:
* Throw UnimplementedError if a MatchDecider is used with the remote backend.
Previously Xapian returned incorrect results in this case.
build system:
* configure: With --enable-maintainer-mode, enable -Werror for GCC >= 4.1
rather than >= 4.0 as Apple's GCC 4.0 gives bogus uninitialised variable
warnings.
documentation:
* The API documentation now includes Xapian::Error and subclasses, and doesn't
mention Xapian::Query::Internal.
* Make clear in the Xapian::Document API documentation that this class is a
lazy handle and discuss the issues this can cause.
* INSTALL: Improve text about zlib dependency.
* HACKING: Add details of our licensing policy for accepting patches.
examples:
* quest: If no database is specified, still parse the query and report
Query::get_description() to provide an easy way to check how a query parses.
portability:
* Fix GCC 4.2 warning.
xapian-core 1.0.17 (2009-11-18):
API:
* QueryParser:
+ Fix handling of a group of two or more terms which are all stopwords which
notably caused issues when default_op was OP_AND, but could probably
manifest in other cases too. Fixes ticket#406.
+ Fix interaction of FLAG_PARTIAL and FLAG_SYNONYM. (ticket#407)
* Database: A database created via the default constructor no longer causes a
segfault when the methods get_metadata() or metadata_keys_begin() are called.
flint backend:
* Don't try to close the fd one more than the maximum allowable when locking
the database. Harmless, except it causes a warning when running under
valgrind. (ticket#408)
remote backend:
* Xapian::Sorter isn't supported with the remote backend so throw
UnimplementedError rather than giving incorrect results. (ticket#384)
* Fix potential reading off the end of the MSet which is returned internally
by the remote server.
documentation:
* Various documentation comment improvements for the Database class.
examples:
* examples/quest.cc: Tighten up the type of the error we catch to detect an
unknown stemming language.
portability:
* xapian-config: Need to quote ^ for Solaris /bin/sh.
* configure: Actually use any flags we determine are needed to switch the
compiler to proper ANSI C++ mode, when building xapian-core - this stopped
working in 1.0.12, breaking support for HP's aCC, Compaq's cxx, Sun's CC, and
SGI's CC.
flint backend:
* Backport the lazy update changes from 1.1.2:
WritableDatabase::replace_document() now updates the database lazily in
simple cases - for example, if you just change a document's values and
replace it with the same docid, then the terms and document data aren't
needlessly rewritten. Caveats: currently we only check if you've looked at
the values/terms/data, not if they've actually been modified, and only keep
track of the last document read.
* Fix PostingIterator::skip_to() on an unflushed WritableDatabase to skip
documents which were added and deleted since the last flush. (ticket#392)
documentation:
* Overhaul the doxygen options we use and tweak various documentation comments
to improve the generated API documentation.
* Explicitly document that an empty prefix argument to
QueryParser::add_prefix() means "no prefix".
* Update the documentation comments for Enable::set_sort_by_value(),
set_sort_by_value_then_relevance(), and set_sort_by_relevance_then_value() to
mention sortable_serialise() as a good way to store numeric values for
sorting.
* WritableDatabase::remove_spelling() now works properly.
* The QueryParser now treats NON_SPACING_MARK Unicode characters as phrase
generators, which improves handling of Arabic. This is a stop-gap solution
for 1.0.x which will work with existing databases without requiring
reindexing - in 1.1.0, NON_SPACING_MARK will be regarded as part of a word.
(ticket#355)
* Fix undefined behaviour in distribution of OP_NEAR and OP_PHRASE over a
non-leaf subquery (indentified by valgrind on testcase nearsubqueries1).
(ticket#349)
* Enhance distribution of OP_NEAR/OP_PHRASE over non-leaf subqueries to work
when there are multiple non-leaf subqueries (ticket#201).
* Enquire::get_mset() no longer needlessly checks if the documents exist.
* PostingIterator::get_description() output improved visually in some cases.
* Enquire::get_mset():
+ Now throws UnimplementedError if there's a percentage cutoff and sorting is
primarily by value - this has never been correctly supported and it's
better to warn people than give incorrect results.
+ No longer needlessly copies the results internally.
+ When searching multiple databases, now recalculates the maximum attainable
weight after each database which may allow it to terminate earlier.
(ticket#336).
+ Fix inconsistent percentage scores when sorting primarily by value, except
when a MatchDecider is also being used; document this remaining problem
case. (ticket#216)
* Enquire::set_sort_by_value() (and similar methods): Rename the wrongly named
"ascending" parameter to "reverse", and note that its value should always be
explicitly given since defaulting to "reverse=true" is confusing and the
default will be deprecated in 1.1.0. (ticket#311)
* Database::allterms_begin(): Fix memory leak when iterating all terms from
more than one database.
* Query::get_terms_begin(): Don't return "" from the TermIterator (happened
when the query contained or was Query::MatchAll).
* Add QueryParser::FLAG_DEFAULT to make it easier to add flags to those set by
default.
rationalisation of backends (and also allows wiring the database to the older
database format if desired).
The "suggested options" select support for both formats, which is also the
status quo.
released under the GPL. It's written in C++, with bindings to allow
use from Perl, Python, PHP, Java, Tcl, C# and Ruby (so far!)
Xapian is a highly adaptable toolkit which allows developers to
easily add advanced indexing and search facilities to their own
applications. It supports the Probabilistic Information Retrieval
model and also supports a rich set of boolean query operators.
If you're after a packaged search engine for your website, you
should take a look at Omega: an application we supply built upon
Xapian. Unlike most other website search solutions, Xapian's
versatility allows you to extend Omega to meet your needs as they
grow.