limestone

Sphinx search server connector for Node.js

npm install limestone
12 downloads in the last week
41 downloads in the last month

Limestone is a Sphinx search server connector for Node.js

Usage:

var limestone = require("./limestone").SphinxClient(),
sys = require("sys");

limestone.connect(9312, // port. 9312 is standard Sphinx port. also 'host:port' allowed
          function(err) { // callback
          if (err) {
              sys.puts('Connection error: ' + err);
          }
          sys.puts('Connected, sending query');
          limestone.query(
              {'query':'test', maxmatches:1}, 
              function(err, answer) {
              limestone.disconnect();
              sys.puts("Extended search for 'test' yielded " + 
                   answer.match_count + " results: " + 
                   JSON.stringify(answer));
              });
          });

To Use Build_Excerpts:

limestone.connect(9312,  // port
          function(err) { //callback
          if (err) {
              sys.puts('Connection error: ' + err);
          }
          sys.puts('Connected Build Excerpts');
          limestone.build_excerpts(
              ['this is my teste text to be highlighted', 
               'this is another test text to be highlighted'], // docs
              'questions_1',
              'test text',
              {},
              function(err, answer) {
              limestone.disconnect();
              sys.puts(JSON.stringify(answer));
              }
          );
          });

Bonus: persistent connection: You can ask sphinx to open a persistent connection. You can then make several request through the same connection

limestone.connect(9312, // port
          true, // persistent (optional)
          function(err) { // callback
              if (err){
              sys.puts('Connection error: ' + err);
          }
          sys.puts('Connected Search'); 
          sys.puts('sending query');  
          limestone.query(
              {'query':'test', // query obj with sphinx opts
               maxmatches:1,
               indexes:'questions_1,products_3'},
              function(err, answer){ // callback
              sys.puts('Extended search yielded ' + 
                   answer.match_count + " results\n" +
                   JSON.stringify(answer));

              limestone.build_excerpts(
                  ['this is my teste text to be highlighted', 
                   'this is another test text to be highlighted'], // docs
                  'questions_1', // index
                  'test text', // words
                  {},
                  function(err, answer){
                  limestone.disconnect();
                  sys.puts(JSON.stringify(answer));
                  }
              );

              }
          );
          });

Limestone is queueing now: You can safely call limestone.query or limestone.build_excerpts methods outside the scope of the callback functions, provided the connection is made persistent. Limestone will enqueue the sphinx commands and run them sequentially.

This works:

limestone.connect(9312, // port. 9312 is standard Sphinx port
          function(err) { // callback
              ...
          limestone.query(
              {'query':'test', maxmatches:1}, 
              function(err, answer) {
                  ....
              });
          });

limestone.query({'second query':'test'}, function(err, answer){..}); // won't crash with previous
npm loves you