backbone-db-elasticsearch

Elasticsearch driver for backbone-db

Usage no npm install needed!

<script type="module">
  import backboneDbElasticsearch from 'https://cdn.skypack.dev/backbone-db-elasticsearch';
</script>

README

backbone-db-elasticsearch

Defining search properties

Example:

var TestModel = Model.extend({
  ...
  type: 'footype',
  searchOptions: {
    index: 'testidx',
  },
  searchValues: function() {
    return this.toJSON();
  }
});

type

Type defines the document's _type field

searchOptions

seachOptions object must define:

  • index: index where document is stored

searchValues

searchValues function should return Object containing keys & values to be indexed.

Adding data to index

var model = new TestModel({
  title: 'testtitle',
  value: 45,
  id: 1
});
model.save();

backbone-db-elasticsearch always expects model to have defined id, thus auto-generated ids are not supported.

After saving above model, the index contains:

GET testidx/test/1
{
   "_index": "testidx",
   "_type": "test",
   "_id": "1",
   "_version": 1,
   "exists": true,
   "_source": {
      "title": "testtitle",
      "value": 45,
      "id": 1
   }
}

Updating a document

If you want to update a document, save it with update option set to true.

var model = new TestModel({
  title: 'newtitle',
  id: 1
});
model.save(null, {update: true});

Querying documents

var query = {
  wildcard: {
    name: '*abc*'
  }
};
var collection = new this.Collection();
collection.fetch({query: query})

Options

query

Accepts query DSL options as Object.

index

Define index to search from. Supports also multi index syntax.

type

Apply search to only given type(s).

filter

Apply filter to the query.

sort

Apply sort to query.

indicesBoost

Boost defined indices.

msearch

If set to true, do a multi search

Notes

This adapter is not fully backbone-db compliant, since query DSL is using Elasticsearch syntax, instead of MongoDB syntax. Currently supported version of ES is 1.3.2.

Configuration

Dynamic scripting should be enabled in /usr/local/opt/elasticsearch/config/elasticsearch.yml:

script.disable_dynamic: false