Socket
Socket
Sign inDemoInstall

oss-odm

Package Overview
Dependencies
2
Maintainers
9
Versions
8
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    oss-odm

Object document mapper for Open Search Server.


Version published
Weekly downloads
5
increased by66.67%
Maintainers
9
Install size
2.16 MB
Created
Weekly downloads
 

Readme

Source

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

Keywords

FAQs

Last updated on 29 Apr 2020

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc