solr-query-builder

solr query builder

Usage no npm install needed!

<script type="module">
  import solrQueryBuilder from 'https://cdn.skypack.dev/solr-query-builder';
</script>

README

solr query builder

A query builder for Solr based in it query syntax. It has the only purpose to build the q= part of the solr query. For the rest of the query you may want use the solr-node-client.

Available queries

  • where
  • equals
  • in
  • begin (begins a new block ()
  • end (closes the current block ))
  • or
  • any
  • between
  • betweenWithOpenIntervals
  • lt
  • gt
  • lte
  • gte

Installation

Install via npm:

$ npm install solr-query-builder

Usage

var SolrQueryBuilder = require('solr-query-builder'),
var qb = new SolrQueryBuilder();

// example values to query
var opt = {
  city: [ 'Florianopolis', 'New York', 'Tokyo' ],
  status: 'open',
  age: 33,
  startDate: '2014-03-22T14:04:48.691Z',
  endDate: '2018-03-22T14:04:48.691Z',
  offset_date: '2015-03-22T14:04:48.691Z',
  offset_id: '507f1f77bcf86cd799439011',
  name: 'Claus'
};

// building the query
if (opt.city) qb.where('city').in(opt.city);
if (opt.status) qb.where('status', opt.status);
if (opt.age) qb.where('age').equals(opt.age);

if (opt.startDate || opt.endDate) {
  qb.where('birthDate').between(opt.startDate, opt.endDate);
}

if (opt.offset_date && opt.offset_id) {
  qb.begin()
      .where('birthDate').lt(opt.offset_date)
      .or()
      .begin()
        .where('birthDate').equals(opt.offset_date)
        .where('_id').lt(opt.offset_id)
      .end()
    .end();
}

if (opt.name) {
  qb.any({
    firstName: opt.name,
    middleName: opt.name,
    lastName: opt.name
  }, { contains: true });
}

// parses the query object to query string
var queryResult = qb.build();


console.log(queryResult);
// city: ("Florianopolis" "New York" "Tokyo") AND status: "open" AND age: 33 AND birthDate: [2014-03-22T14:04:48.691Z TO 2018-03-22T14:04:48.691Z] AND  ( birthDate: {* TO 2015-03-22T14:04:48.691Z}  OR  ( birthDate: "2015-03-22T14:04:48.691Z" AND _id: {* TO 507f1f77bcf86cd799439011} ) ) AND  ( firstName: (*Claus*)  OR  middleName: (*Claus*)  OR  lastName: (*Claus*) )

Usage with solr-node-client

var solr = require('solr-client');
var SolrQueryBuilder = require('solr-query-builder'),
var qb = new SolrQueryBuilder();

// build your query using the query solr-query-builder...

var client = solr.createClient();

var query = client.createQuery()
            .q(qb.build())
            .start(0)
            .rows(10);

Contributing

It is required to use editorconfig and please write and run specs before pushing any changes:

npm test

License

Copyright (c) 2014 Max Claus Nunes. This software is licensed under the MIT License.