Skip to main content

Index and search records using ElasticSearch.

Project description

https://img.shields.io/travis/Kinto/kinto-elasticsearch.svg https://img.shields.io/pypi/v/kinto-elasticsearch.svg https://coveralls.io/repos/Kinto/kinto-elasticsearch/badge.svg?branch=master

kinto-elasticsearch forwards the records to ElasticSearch and provides a /search endpoint to query the indexed data.

Install

pip install kinto-elasticsearch

Setup

In the Kinto settings:

kinto.includes = kinto_elasticsearch
kinto.elasticsearch.hosts = localhost:9200

By default, ElasticSearch is smart and indices are not refreshed on every change. You can force this (with a certain drawback in performance):

kinto.elasticsearch.force_refresh = true

By default, indices names are prefixed with kinto-. You change this with:

kinto.elasticsearch.index_prefix = myprefix

Run ElasticSearch

Running a local install of ElasticSearch on localhost:9200 with Docker is pretty straightforward:

sudo docker run -p 9200:9200 elasticsearch

It is also be installed manually on Ubuntu with:

sudo apt-get install elasticsearch

And more information is available in the official docs.

Usage

Create a new record:

$ echo '{"data": {"note": "kinto"}}' | http POST http://localhost:8888/v1/buckets/example/collections/notes/records --auth token:alice-token

It should now be possible to search for it using the ElasticSearch API.

For example, using a quick querystring search:

$ http "http://localhost:8888/v1/buckets/example/collections/notes/search?q=note:kinto"--auth token:alice-token

Or an advanced search using request body:

$ echo '{"query": {"match_all": {}}}' | http POST http://localhost:8888/v1/buckets/example/collections/notes/search --auth token:alice-token
HTTP/1.1 200 OK
Access-Control-Expose-Headers: Retry-After, Content-Length, Alert, Backoff
Content-Length: 333
Content-Type: application/json; charset=UTF-8
Date: Wed, 20 Jan 2016 12:02:05 GMT
Server: waitress

{
    "_shards": {
        "failed": 0,
        "successful": 5,
        "total": 5
    },
    "hits": {
        "hits": [
            {
                "_id": "453ff779-e967-4b08-99b9-5c16af865a67",
                "_index": "example-assets",
                "_score": 1.0,
                "_source": {
                    "id": "453ff779-e967-4b08-99b9-5c16af865a67",
                    "last_modified": 1453291301729,
                    "note": "kinto"
                },
                "_type": "example-assets"
            }
        ],
        "max_score": 1.0,
        "total": 1
    },
    "timed_out": false,
    "took": 20
}

Custom index mapping

By default, ElasticSearch infers the data types from the indexed records.

But it’s possible to define the index mappings (ie. schema) from the collection metadata, in the index:schema property:

$ echo '{
  "data": {
    "index:schema": {
      "properties": {
        "id": {"type": "keyword"},
        "last_modified": {"type": "long"},
        "build": {
          "properties": {
              "date": {"type": "date", "format": "strict_date"},
              "id": {"type": "keyword"}
          }
        }
      }
    }
  }
}' | http PATCH "http://localhost:8888/v1/buckets/blog/collections/builds" --auth token:admin-token --verbose

Refer to ElasticSearch official documentation for more information about mappings.

See also, domapping a CLI tool to convert JSON schemas to ElasticSearch mappings.

Running the tests

$ make tests

Changelog

0.1.0 (2017-05-26)

New features

  • Flush indices when server is flushed (fixes #4)

  • Perform insertions and deletion in bulk for better efficiency (fixes #5)

  • Add setting to force index refresh on change (fixes #6)

  • Add heartbeat (fixes #3)

  • Delete indices when buckets and collections are deleted (fixes #21)

  • Support quick search from querystring (fixes #34)

  • Return details about invalid queries in request body (fixes #23)

  • Support defining mapping from the index:schema property in the collection metadata (ref #8)

Bug fixes

  • Only index records if the storage transaction is committed (fixes #15)

  • Do not allow to search if no read permission on collection or bucket (fixes #7)

  • Fix empty results response when plugin was enabled after collection creation (ref #20)

Internal changes

  • Create index when collection is created (fixes #27)

0.0.1 (2017-05-22)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kinto-elasticsearch-0.1.0.tar.gz (9.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kinto_elasticsearch-0.1.0-py2.py3-none-any.whl (10.2 kB view details)

Uploaded Python 2Python 3

File details

Details for the file kinto-elasticsearch-0.1.0.tar.gz.

File metadata

File hashes

Hashes for kinto-elasticsearch-0.1.0.tar.gz
Algorithm Hash digest
SHA256 180b4d1468c5d96924ece242aa4c4c8735886e69c4c5ffc8fab522c48b57fc9a
MD5 6e337ee9e2e24fac64ce0b7d27140710
BLAKE2b-256 d1ff6ea24258ba2a425cf003f92e011d5f0e4e42294e535337b9bf19fc2a53ec

See more details on using hashes here.

File details

Details for the file kinto_elasticsearch-0.1.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for kinto_elasticsearch-0.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 67f9900265e00a9e1c446dcebe44c09282bb4abf82854265e67507ef0e2a1d68
MD5 d69c12f634284e3f50c01bea644c68cc
BLAKE2b-256 1cdef6e70e6020fb229583a7dfd4d561e2c54a6af2025154f9529e5f5ba7c953

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page