interfaces to xapian
TRANSCRIPT
Interfaces to Xapian
Open source search day 2009
C++
#include <xapian.h>
Xapian::WritableDatabase db(path, Xapian::DB_OPEN);Xapian::Document doc;doc.add_term(“foo”);db.add_document(doc);
Python: xapian
import xapian
db = xapian.WritableDatabase(path, xapian.DB_OPEN)doc = xapian.Document()doc.add_term(“foo”)db.add_document(doc)
Python: xappy
from xappy import IndexerConnection, FieldActions
db = xappy.IndexerConnection(path)db.add_field_action(“text”, FieldActions.INDEX_FREETEXT)
doc = xappy.UnprocessedDocument()doc.append(“text”, “foo”)db.add(doc)
Python: xappy
from xappy import IndexerConnection, FieldActions
db = xappy.IndexerConnection(path)db.add_field_action(“text”, FieldActions.INDEX_FREETEXT, language=”french”)
doc = xappy.UnprocessedDocument()doc.append(“text”, “foo”)db.add(doc)
from xappy2.core import *
db = xappy.IndexerConnection(path)db.add_field_type(“text”, TEXT, language=”french”)db.add_index(“text”, StandardAnalyser)
doc = xappy.UnprocessedDocument()doc.append(“text”, “foo”)db.add(doc)
Python: xappy2.core
Python: xappy2.server
REST based API
Python: xappy2.server
PUT to /v1/dbs/dbnamePOST to /v1/dbs/dbname/schema/fields/text { 'type': 'text', 'freetext': {'language': 'en'} } }
POST to /v1/dbs/dbname/docs { 'text': ['foo'] }(or PUT to /v1/dbs/dbname/docs/docid)
Python: Zope: ore.xapian
Zope style layer on top of xappy:
class Content( object ):... implements( interfaces.IIndexable )
Asynchronous loading/updating, event integration, etc
Python: Django: Djapian
Django integration layer on top of xapian
import djapian
class EntryIndexer(djapian.Indexer): fields=["text"] Tags=[ ("content", "content.text" ) ]
Python: Django: Haystack
Another Django integration layer on top of xapian
from haystack import indexes
class TextIndex(indexes.SearchIndex): text = indexes.CharField(document=True, use_template=True)
Other
Similar stack of interfaces for Ruby, PHP
Java, C# just have bindings, so far
Image Searching with Xappy
db.add_field_action('image', FieldActions.IMGSEEK, terms = True)
doc.fields.append('image', path_to_image_file)db.add(doc)
query = sconn.query_image_similarity('image', docid='0')