Skip to content

kurokikaze/limestone

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Limestone is a Sphinx search server connector for Node.js

Usage:

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

limestone.connect(9312, // port. 9312 is standard Sphinx port. also 'host:port' allowed
	      function(err) { // callback
		  if (err) {
		      console.log('Connection error: ' + err.message);
			  process.exit();
		  }
		  console.log('Connected, sending queries');
		  
		  limestone.query('test', function(err, answer) { // Simple query
			console.log('Simple query returned ' + answer.match_count + 'results');
		  });
		  
		  limestone.query( // Query with options
		      {'query':'test', maxmatches:1}, 
		      function(err, answer) {
			  limestone.disconnect();
			  console.log("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) {
		console.log('Connection error: ' + err);
		}
		console.log('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();
				console.log(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){
			console.log('Connection error: ' + err);
		}
		console.log('Connected Search'); 
		console.log('sending query');  
		limestone.query({
			'query' : 'test', // query object with sphinx options
			'maxmatches' : 1,
			'indexes':'questions_1,products_3'},
			function(err, answer){ 			// callback
				console.log('Extended search yielded ' + 
					answer.match_count + " results\n" +
					JSON.stringify(answer));
			
				limestone.build_excerpts([
						'this is my test text to be highlighted', 
						'this is another test text to be highlighted'
					], // docs
					'questions_1', // index
					'test text', // words
					{},
					function(err, answer){
						limestone.disconnect();
						console.log(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