A fork of Xapian-haystack (https://github.com/notanumber/xapian-haystack) that applies the Inkscape patch for dealing with long terms. (https://github.com/inkscape/xapian-haystack/commit/d1346dc53f35b0960badf6435cff468c648de694)
Go to file
David Sauve 224eb804ff Switched license back to GPL v2. 2011-07-14 15:52:03 -07:00
tests Added test-case for multiple datetime fields to test sorting in reference to gh-76. 2011-06-15 16:03:21 -07:00
.gitignore Updated .gitignore to ignore MANIFEST 2009-12-07 11:14:17 -05:00
AUTHORS Added overridable weighting scheme through the use of a new setting named HAYSTACK_XAPIAN_WEIGHTING_SCHEME. 2011-06-13 13:37:29 -07:00
LICENSE Switched license back to GPL v2. 2011-07-14 15:52:03 -07:00
MANIFEST.in Updated MANIFEST.in to include README.rst 2010-01-29 10:58:48 -05:00
README.rst Added overridable weighting scheme through the use of a new setting named HAYSTACK_XAPIAN_WEIGHTING_SCHEME. 2011-06-13 13:37:29 -07:00
RELEASES Updated version number for release. 2010-12-20 11:45:31 -08:00
TODO Updated TODO. Was really outdated... 2010-01-27 19:44:49 -05:00
setup.py Updated version number for release. 2010-12-20 11:45:31 -08:00
xapian_backend.py Updated SearchQuery._content_field to properly build phrase queries, restricting them to the document field. 2011-06-15 15:07:22 -07:00

README.rst

Xapian-Haystack -- A backend for Django-Haystack

Overview

xapian-haystack is a backend for use with the Django Haystack search API and the Xapian search engine.

Requirements

  • Python 2.4 (May work with 2.3, but untested)
  • Django 1.0.x
  • Django-Haystack 1.1.X (If you wish to use django-haystack 1.0.X, please use xapian-haystack 1.0.X)
  • Xapian 1.0.13+ (May work with earlier versions, but untested)

Notes

  • Due to an issue with mod_python possibly causing deadlocks with Xapian (issue #364), when Python is not invoked through the "main interpreter", mod_python is not supported with xapian-haystack. It may work, with some tweaking, but your mileage will vary.
  • Because Xapian does not support simultaneous WritableDatabase connections, it is strongly recommended that users take care when using RealTimeSearchIndex. If there is a possibility of simultaneous write attempts on the database, keep in mind that they are likely to trigger multiple reindex attempts on the search index. If this occurs an DatabaseLockError exception will be raised by Xapian. To avoid this, either set WSGIDaemonProcess processes=1 or use some other way of ensuring that there are not multiple attempts to write to the indexes. Alternatively, use SearchIndex and a cronjob to reindex content at set time intervals (sample cronjob can be found here) or derive your own SearchIndex to implement some other form of keeping your indexes up to date. A good alternative is to use a QueuedSearchIndex.

Installation

  1. Copy or symlink xapian_backend.py into haystack/backends/ or install it by running one of the following commands:

    python setup.py install

    or

    pip install xapian-haystack

    or

    easy_install xapian-haystack

  2. Add HAYSTACK_XAPIAN_PATH to settings.py

  3. Set HAYSTACK_SEARCH_ENGINE to xapian

Configuration

As well as the flags described here, the xapian backend includes two additional variables:

  • HAYSTACK_XAPIAN_FLAGS -- used to further configure how indexes are stored and manipulated. By default, this value is set to FLAG_PHRASE | FLAG_BOOLEAN | FLAG_LOVEHATE | FLAG_WILDCARD | FLAG_PURE_NOT. See the Xapian::QueryParser::feature_flag in the Xapian documentation for further explanation of the available Xapian.QueryParser flags.
  • HAYSTACK_XAPIAN_WEIGHTING_SCHEME -- used to override the default weighting scheme used during search. HAYSTACK_XAPIAN_WEIGHTING_SCHEME is assumed to be a tuple that corepsonds to the arguments to a BM25Weight constructor. See Xapian::BM25Weight::BM25Weight in the Xapian documentation for further information.

Testing

The easiest way to test xapian-haystack is to symlink or copy the xapian_haystack/tests folder into the haystack/tests folder so that your source tree resembles this layout:

django-haystack
    |
    +---haystack
    |       |
    |       +---backends
    |              |
    |              +---solr_backend.py
    |              +---whoosh_backend.py
    |              +---xapian_backend.py
    +---tests
            |
            +---core
            |    |
            |    +---[...]
            |
            +---[...]
            |
            +---xapian_tests
            |       |
            |       +---[...]
            |
            +---xapian_settings.py

Once this is done, the tests can be executed in a similar fashion as the rest of the Haystack test-suite:

django-admin.py test xapian_tests --settings=xapian_settings

Source

The latest source code can always be found here: github.com/notanumber/xapian-haystack

Credits

xapian-haystack is maintained by David Sauve, and was originally funded by Trapeze.

License

xapian-haystack is Copyright (c) 2009-2011 David Sauve, Trapeze. It is free software, and may be redistributed under the terms specified in the LICENSE file.

Questions, Comments, Concerns:

Feel free to open an issue here: github.com/notanumber/xapian-haystack/issues Alternatively, ask questions on the django-haystack mailing list or irc channel.