Paul Joseph Davis

CouchDB View Indexing
=====================

    *NOTE* This was part of an experiment I tried awhile back. There hasn't been
    any interest in including it in trunk and I don't really think it should be.
    So this is up for reference, but you probably shouldn't think about using
    this.

Overview
--------

This is a fun little patch I wrote today for indexing CouchDB Map/Reduce views.
The CouchDB path allows you to setup a process that will listen for Key/Value
pairs being added and removed from a view so that you can keep an external index
in sync. The patch also exposes a url that you can use to query the view.

Installation
------------

A real quick nothing-goes-wrong type of installation would be along the lines of
the following:

    $ cd /usr/local/src/temp
    $ git clone git://github.com/davisp/couchdb-lucene.git
    $ cd couchdb-lucene
    $ git checkout -b view_indexer origin/view_indexer
    $ ant
    $ cd ../
    $ git clone git://github.com/davisp/couchdb.git
    $ cd couchdb/trunk
    $ git checkout -b index_server origin/index_server
    $ ./bootstrap && ./configure && make
    $ sudo make install

Config file: `/usr/local/etc/couchdb/local.ini`
-----------------------------------------------

    ; CouchDB Configuration Settings

    [couchdb]
    ;max_document_size = 4294967296 ; bytes

    [httpd]
    ;port = 5984
    ;bind_address = 127.0.0.1

    [log]
    level = debug

    [daemons]
    index_servers={couch_index_servers, start_link, []}

    [index_servers]
    fti=/usr/local/src/temp/couchdb-lucene/bin/couchdb-lucene-index

    [httpd_db_handlers]
    _index = {couch_httpd_view, handle_index_req}

Pay special attention to line 17 if you changed where you built couchdb-lucene.

Example Design Document
-----------------------

    {
        "_id": "_design/foo",
        "_rev": "999203757",
        "views": {
            "bar": {
                "map": "function(doc) {emit(doc.id,doc.value);}",
                "index": "fti"
            }
        }
    }

Querying the View
-----------------

    $ # Generate some data
    $ curl http://127.0.0.1:5984/dbname/_index/fti/foo/bar?q="my query"

Supported Options
-----------------

CouchDB-Lucene View-Indexer supports the following URL parameters:

  1. q -> Text query to pass to lucene. Supports the full Lucene syntax (ala
     org.apache.lucene.queryParser.QueryParser)
  2. count -> Number of documents to return
  3. skip -> Number of documents to skip



Copyright Notice
----------------

Copyright 2008-2010 Paul Joseph Davis

License
-------

http://creativecommons.org/licenses/by/3.0/