Skip to content

TigorC/aiosolr

Repository files navigation

aiosolr

aiosolr is a asyncio compatible fork of the pysolr lightweight Python wrapper for Apache Solr. It provides an interface that queries the server and returns results based on the query.

Status

https://secure.travis-ci.org/TigorC/aiosolr.png

Features

  • Basic operations such as selecting, updating & deleting.
  • Index optimization.
  • "More Like This" support (if set up in Solr).
  • Spelling correction (if set up in Solr).
  • Timeout support.

Requirements

  • Python 3.4 - 3.5
  • aiohttp 0.21.2+

Installation

sudo python setup.py install.

Usage

Basic usage looks like:

import asyncio
import aiosolr


@asyncio.coroutine
def test(solr):
    docs = [
        {
            "id": "doc_1",
            "title": "A test document",
        },
        {
            "id": "doc_2",
            "title": "The Banana: Tasty or Dangerous?",
        }
    ]
    # How you'd index data.
    yield from solr.add(docs)

    # Later, searching is easy. In the simple case, just a plain Lucene-style
    # query is fine.
    results = yield from solr.search('bananas')
    # The ``Results`` object stores total results found, by default the top
    # ten most relevant results and any additional data like
    # facets/highlighting/spelling/etc.
    print("Saw {0} result(s).".format(len(results)))

    # Just loop over it to access the results.
    for result in results:
        print("The title is '{0}'.".format(result['title']))

    # For a more advanced query, say involving highlighting, you can pass
    # additional options to Solr.
    results = yield from solr.search('bananas', **{
        'hl': 'true',
        'hl.fragsize': 10,
    })

    # You can also perform More Like This searches, if your Solr is configured
    # correctly.
    similar = yield from solr.more_like_this(q='id:doc_2', mltfl='text')

    # Finally, you can delete either individual documents...
    yield from solr.delete(id='doc_1')

    # ...or all documents.
    yield from solr.delete(q='*:*')


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    # Setup a Solr instance. The timeout is optional.
    solr = aiosolr.Solr('http://localhost:8983/solr/', timeout=10)
    try:
        loop.run_until_complete(test(solr))
    finally:
        solr.close()
    loop.close()

LICENSE

aiosolr is licensed under the New BSD license.

Running Tests

The run-tests.py script will automatically perform the steps below and is recommended for testing by default unless you need more control.

Running a test Solr instance

Downloading, configuring and running Solr 4 looks like this:

./start-solr-test-server.sh

Running the tests

The test suite requires the unittest2 library:

python3 -m unittest tests

About

Asyncio compatible fork of the pysolr (lightweight Python wrapper for Apache Solr)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors