Socket
Socket
Sign inDemoInstall

sails-solr

Package Overview
Dependencies
35
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    sails-solr

Solr Adapter for Sails / Waterline sds


Version published
Weekly downloads
5
increased by150%
Maintainers
1
Created
Weekly downloads
 

Readme

Source

![](http://i.imgur.com/RIvu9.png | width=50)

<img src="http://lucene.apache.org/solr/assets/identity/Solr_Logo_on_white.png"width="100"/> sails-solr

Provides easy access to solr from Sails.js & Waterline.

This module is a Waterline/Sails adapter, an early implementation of a rapidly-developing, tool-agnostic data standard. Its goal is to provide a set of declarative interfaces, conventions, and best-practices for integrating with all sorts of data sources.

The main goal is a simple usage and integration of a full managaged Solr.

Build Status Coverage Status Dependency Status

NPM

Installation

To install this adapter, run:

$ npm install sails-solr

Getting started with sails-solr

To install/start solr if you not have one running

make kickstart

Note: not recommended for production systems! Solr installation Tomcat for more

Configuring Connections

Add the solr configuration to the config/connections.js file. The basic options are as follows:

module.exports.connections = {
  solrConnectionOne: {
    module : 'sails-solr',
    host: 'localhost',
    port: 8983,
    core: 'schemaless',
    schema: true,
    migrate: 'drop'
  }
};

Note: you can define multiple solr connections/cores. By default sails-solr will run multiple models inside one core manageCores. Connection Options

Configuring Models

And then change default model configuration to the config/models.js:

module.exports.models = {
  connection: 'solrConnectionOne',
  attributes: {
    name:'string'
    ...
  }
};

Note: you can add more model based configuartion Model Options / Connection Options

Usage

create a user:

  User.create({name:'foo'},console)

find a user:

  User.find({name:'foo'},console);
  User.findOne({name:'foo'},console);
  User.findByName('foo',console);

Note: See Waterline Documentation Query Language and Query Methods

Special Adapter Interfaces

Autocompleter

search suggestion and spellchecked phrase. Known as "Did You Mean: foo?"

  // as sails request  see hooks and blueprint
  // http://localhost:1337/user/suggest/foa

  // in node
  User.suggest('foa', console);

  //response 
  {
  "responseHeader": {
    "status": 0,
    "QTime": 1
  },
  "spellcheck": {
    "suggestions": [
      "foa",
      {
        "numFound": 1,
        "startOffset": 0,
        "endOffset": 9,
        "origFreq": 0,
        "suggestion": [
          {
            "word": "foo",
            "freq": 1
          }
        ]
      }
    ],
    "correctlySpelled": false,
    "collations": [
      "collation",
      "foo"
    ]
  },
  "suggest": {
    "suggest": {
      "foa": {
        "numFound": 2,
        "suggestions": [
          {
            "term": "foo",
            "weight": 0,
            "payload": ""
          },{
            "term": "foo bar",
            "weight": 0,
            "payload": ""
          }
        ]
      }
    }
  }
}
Layerd Navigation

Well known as filter. facet for strings and min,max,avg for ìnteger to build Options and Range Slider Elemets. Query Methods

  // as sails request  see hooks and blueprint
  // http://localhost:1337/user/catalog/?name="*"&limit=3&sort=age asc&skip=0

  // in node
  User.catalog({name:'foo'},console);

  //response 
  {
  "responseHeader":{
    "status":0,
    "QTime":1,
    "params":{
      "q":"*:*",
      "indent":"true",
      "stats":"true",
      "sort":"percent asc",
      "rows":"100",
      "wt":"json",
      "stats.field":["age",
        "percent"]}},
  "response":{"numFound":13,"start":0,"docs":[
      {
        "name":"foo",
        "age":10,
        "color":"blue",
        "createdAt":"2015-12-30T23:32:24.755Z",
        "updatedAt":"2015-12-30T23:32:24.755Z",
        "id":"612bb75f-be0f-496b-ba51-8e79ee786c50"},
      {
        "name":"bar",
        "age":20,
        "color":"yellow",
        "createdAt":"2015-12-30T23:15:09.859Z",
        "updatedAt":"2015-12-30T23:15:09.859Z",
        "id":"517a4917-b3b8-4ea0-a3fd-acd41497b6e0"},
      {
        "name":"john",
        "age":30,
        "color":"black",
        "createdAt":"2015-12-30T23:15:10.859Z",
        "updatedAt":"2015-12-30T23:15:10.859Z",
        "id":"515a4917-b3b8-4ea0-a3fd-acd4149432fd"},
  },
  "facet_counts": {
    "facet_queries": {},
    "facet_fields": {
        "name": [
        {
          "blue":1},
        {
          "yellow":1},
        {
          "black":1},
      ]
    },
    "facet_dates": {},
    "facet_ranges": {},
    "facet_intervals": {},
    "facet_heatmaps": {}
  },
  "stats":{
    "stats_fields":{
      "age":{
        "min":10.0,
        "max":30.0,
        "count":3,
        "missing":0,
        "sum":60.0,
        "sumOfSquares":100,
        "mean":20,
        "stddev":10}}}}

Supported Waterline Interfaces

TypeMethodsBuild
Semanticcreate, createEach, find, count, update, destroyBuild Status
Migratabledefine, describe, drop, alter, addAttributes, remove, attributes, addIndex, removeIndexBuild Status
Queryablewhere, limit, sort, skip, selectBuild Status

Note: See Waterline Documentation

Special Adapter Interfaces

TypeMethodsBuild
Suggestsuggest. Return on Object with suggestions and spellecked the requestet term or phraseBuild Status
Catalogcatalog. Return an Object with matching results and Layered Navigation as facet and statsBuild Status

Advanced Configuration

Connection Options

ParamsDefaultDescription
host'localhost'
port'8983'
core'schemaless'
manageCorestruecreate cores if not exists CoreAdmin
schematrueallow migrate drop, alter schema manage schema
singlefalseforce manageCores to create a core for each model
fieldTypeMapfieldTypesField Type Map
useFqParamtrueforce query mapping as fq=name:foo param
schemaDefaultFieldTypes{}
debugAdapterfalse
debugCollectionfalse
debugQueryfalse
debugSolrfalse

Model Options

{
  attributes: {
    first_name: {
      type:'string'
      // Overwrite per Field
      schemaDefaultFieldAttributes: {
        indexed: true,
        type: 'text_de'
      }
    }
  }
  // Overwrite per Model
  schemaDefaultFieldAttributes: {
    indexed: false
  }
}

Field Type Map

The following table represents mappings between Sails/Waterline model data types and Solr field types:

Sails/Waterline TypeSolr Type
stringtext_general
texttext_general
binarytext_general
integerint
floatfloat
datedate
timedate
datetimedate
booleanboolean
binarytext_general
arraytext_general
jsontext_general
pointpoint

Note: You can even define your custom mapping as fieldTypeMap: inside connection settings and as model option. If you want a field type explicit mapping use fieldType as additional fieldTypeMapattribute

Solr default field attributes

The following table represents Solr field attributes:

Solr Field AttributesDefault
namenewField
typetext_general
indexedtrue
storedtrue
docValuesfalse
sortMissingFirstfalse
sortMissingLastfalse
multiValuedfalse
omitNormstrue
omitTermFreqAndPositionsfalse
omitPositionsfalse
termVectorstrue
termPositionsfalse
termOffsetsfalse
termPayloadsfalse
requiredfalse
dynamicFieldfalse
jsontext_general

Note: You can even define your custom field attribute default as schemaDefaultFieldAttributes: inside connection settings and as model option. If you want a field attribute explicit you can add this attribute as an additional option inside the Model attribute settings

Running the tests

$ npm test

TODO:

  • more test
  • documentation
  • cleanup and refactoring
  • build an e-commerce like demo application with autocomplete and layerd navigation

More Resources

License

MIT

Keywords

FAQs

Last updated on 03 Jan 2016

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