interfaces to xapian

13
Interfaces to Xapian Open source search day 2009

Upload: richard-boulton

Post on 02-Jul-2015

917 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Interfaces to xapian

Interfaces to Xapian

Open source search day 2009

Page 2: Interfaces to xapian

C++

#include <xapian.h>

Xapian::WritableDatabase db(path, Xapian::DB_OPEN);Xapian::Document doc;doc.add_term(“foo”);db.add_document(doc);

Page 3: Interfaces to xapian

Python: xapian

import xapian

db = xapian.WritableDatabase(path, xapian.DB_OPEN)doc = xapian.Document()doc.add_term(“foo”)db.add_document(doc)

Page 4: Interfaces to xapian

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)

Page 5: Interfaces to xapian

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)

Page 6: Interfaces to xapian

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

Page 7: Interfaces to xapian

Python: xappy2.server

REST based API

Page 8: Interfaces to xapian

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)

Page 9: Interfaces to xapian

Python: Zope: ore.xapian

Zope style layer on top of xappy:

class Content( object ):... implements( interfaces.IIndexable )

Asynchronous loading/updating, event integration, etc

Page 10: Interfaces to xapian

Python: Django: Djapian

Django integration layer on top of xapian

import djapian

class EntryIndexer(djapian.Indexer): fields=["text"] Tags=[ ("content", "content.text" ) ]

Page 11: Interfaces to xapian

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)

Page 12: Interfaces to xapian

Other

Similar stack of interfaces for Ruby, PHP

Java, C# just have bindings, so far

Page 13: Interfaces to xapian

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')