oss-odm

2.0.1 • Public • Published

oss-odm Build Status

Object document mapper for Open Search Server.

See also parent module node-oss-client.

Install

npm install oss-odm

Usage

const oss = require('node-oss-client');
const Index = require('oss-odm').Index;
 
const index = new Index({
  name: 'my_index',
  indexers: oss.createClient(),
  searcher: oss.createClient()
});
 
// Insert a new document in "my_index".
index.create({ title: 'My first document' }, (err) => { ... });
 
// Search in "my_index".
index.search('my query', (err, res) => {
  console.log(res.documents); // [{ title: 'My first document' }]
});

new Index(options)

Create a new index with some options.

name

Type: String

Name of the index.

new Index({ name: 'my_index' });

lang

Type: String

Default language of the index, defaults to "ENGLISH".

new Index({
  lang: 'FRENCH'
});

indexers

Type: Array or Object

OSS clients used to index document.

var indexer1 = oss.createClient({ host: 'indexer1' });
var indexer2 = oss.createClient({ host: 'indexer2' });
new Index({ indexers: [indexer1, indexer2] });

searcher

Type: Object

OSS client used to search.

var searcher = oss.createClient({ host: 'searcher' });
new Index({ searcher });

templates

Type: Object

Search templates that can be used in index.search, the default template must be called "default". All search options known by OSS can be specified in the template.

new Index({
  templates: {
    default: {
      returnedFields: [
        'id',
        'title'
      ],
      searchFields: [
          {
            field: 'text',
            mode: 'TERM_AND_PHRASE',
            boost: 1
          }
      ]
    },
    title: {
      returnedFields: [
        'id',
        'title'
      ],
      searchFields: [
          {
            field: 'title',
            mode: 'TERM_AND_PHRASE',
            boost: 1
          }
      ]
    }
  }
});

formatters

Type: Object

You can specify an input (indexing) and an output (search) formatters. These formatter are applied to each documents.

new Index({
  formatters: {
    input: inputFormatter,
    output: outputFormatter
  }
});
 
function inputFormatter(document) {
  // Add a timestamp key.
  document.timestamp = Date.now();
  return document;
}
 
function outputFormatter(document) {
  // Convert id in Number.
  document.id = parseInt(document.id, 10);
  return document;
}

filters

Type: Object

Filters formatter that can be used in index.search.

new Index({
  filters: {
    id: formatIdFilter
  }
});
 
function formatIdFilter(value, context) {
  return {
    type: 'QueryFilter',
    negative: false,
    query: 'id:' + value
  };
}

joins

Type: Object

Joins that can be used in index.search.

new Index({
  joins: {
    myJoin: {
      index: customIndex,
      queryTemplate: 'customQueryTemplate',
      localField: 'local_id',
      foreignField: 'id',
      type: 'INNER',
      returnFields: false,
      returnScores: false,
      returnFacets: false
    }
  }
});

index.create(documents, [options], callback)

Insert a new document in the index.

Note : if an array is provided as value, it triggers a multi-valued field insertion.

index.create([
  {
    title: 'My first document',
    foo: 'bar'
  },
  {
    title: 'My second document',
    ids: [23, 34]
  }
], (err) => { ... });

Some options are available:

lang

Type: String

The language of the document to index, default to the index language.

index.create([
  { title: 'My first document' }
], { lang: 'FRENCH' }, (err) => { ... });

index.destroy(values, [options], callback)

Destroy a documents in the index.

index.destroy(['182', '85'], (err) => { ... });

Some options are available:

field

Type: String

The field used to match values, default to "id".

index.destroy(['bob', 'tom'], { field: 'name' }, (err) => { ... });

index.search(query, [options], callback)

Search in the index.

index.search('my query', (err, res) => { ... });

Some options are available:

lang

Type: String

The language used for searching documents.

index.search('my query', { lang: 'FRENCH' }, (err, res) => { ... });

template

Type: String

The template used to process the query, defaults to "default".

index.search('my query', { template: 'custom' }, (err, res) => { ... });

filters

Type: Object

Filters applied to the query. Filters are transformed using filter formatters defined in the constructor.

index.search('my query', {
  filters: {
    id: 10
  },
  filterOptions: {
    foo: 'bar'
  }
}, (err, res) => { ... });

joins

Type: Object

Joins applied to the query. Joins used the joins defined in the constructor.

index.search('my query', {
  joins: {
    myJoin: {
      query: 'join query',
      template: 'myTemplate',
      filters: {
        myJoinFilter: 'test'
      }
    }
  }
})

OSS search options

All search options known by OSS can be used in the search function.

syncManager.sync(clients, schemas)

const indexer1 = oss.createClient({ host: 'indexer1' });
const indexer2 = oss.createClient({ host: 'indexer2' });
 
syncManager.sync([indexer1, indexer2], [
  {
    name: 'articles',
    uniqueField: 'id',
    defaultField: 'text',
    fields: [
      {
        name: 'id',
        indexed: true,
        stored: true
      },
      {
        name: 'text',
        indexed: true,
        stored: true
      }
    ]
  }
]);

syncManager.drop(clients, names)

const indexer1 = oss.createClient({ host: 'indexer1' });
const indexer2 = oss.createClient({ host: 'indexer2' });
 
syncManager.drop([indexer1, indexer2], ['articles']);

replicaManager.replicateAllIndexes(clients, schemas, cb)

Creates as many as replication indexes (based on schemas argument) on searchers passed as argument in clients and starts a replication on each of the searchers.

const indexer1 = oss.createClient({ host: 'indexer1' });
const indexes = [ { name: 'my_index_1' }, { name: 'my_index_2' } ]
 
replicaManager.replicateAllIndexes(indexer1,  indexes, (err, res ) => {
  // Code callback here ....
});

License

MIT

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 2.0.1
    0
    • latest

Version History

Package Sidebar

Install

npm i oss-odm

Weekly Downloads

0

Version

2.0.1

License

MIT

Unpacked Size

24.2 kB

Total Files

7

Last publish

Collaborators

  • dolmac
  • icandivideby0
  • jbustin
  • jsfez
  • ludowic
  • mbar
  • neoziro
  • offirmo
  • sachamorard