Incremental search index
I will most certainly write some docs for this when time comes. Go see the example for now.
var cars = [
{ make: 'Audi', model: 'A4' },
{ make: 'Audi', model: 'Q7' },
{ make: 'Audi', model: 'Quattro' },
{ make: 'BMW', model: 'M5' },
{ make: 'BMW', model: 'X5' },
{ make: 'Ferrari', model: 'Testarossa' },
{ make: 'Ferrari', model: 'Enzo Ferrari' },
{ make: 'Toyota', model: 'Avensis' },
{ make: 'Toyota', model: 'Prius' }
];
var idx = iidx({
fields: { make: 10, model: 5 }
});
_.each(cars, function (car, id) {
car.id = id;
idx.add(car);
});
var search = function (query) {
console.log('======================');
console.log('Query:', query);
console.log('Result:');
console.log(_.map(idx.search(query), JSON.stringify).join("\n"));
};
search('a');
search('b');
search('au');
search('a a');
search('t');
search('f');
search('f f');
idx.remove(8); // Remove Prius
search('t');
======================
Query: a
Result:
{"id":"0","object":{"id":0,"make":"Audi","model":"A4"},"weights":{"0":["audi",10]},"words":{"audi":1},"sum":10}
{"id":"1","object":{"id":1,"make":"Audi","model":"Q7"},"weights":{"0":["audi",10]},"words":{"audi":1},"sum":10}
{"id":"2","object":{"id":2,"make":"Audi","model":"Quattro"},"weights":{"0":["audi",10]},"words":{"audi":1},"sum":10}
{"id":"7","object":{"id":7,"make":"Toyota","model":"Avensis"},"weights":{"0":["avensis",5]},"words":{"avensis":1},"sum":5}
======================
Query: b
Result:
{"id":"3","object":{"id":3,"make":"BMW","model":"M5"},"weights":{"0":["bmw",10]},"words":{"bmw":1},"sum":10}
{"id":"4","object":{"id":4,"make":"BMW","model":"X5"},"weights":{"0":["bmw",10]},"words":{"bmw":1},"sum":10}
======================
Query: au
Result:
{"id":"0","object":{"id":0,"make":"Audi","model":"A4"},"weights":{"0":["audi",10]},"words":{"audi":1},"sum":10}
{"id":"1","object":{"id":1,"make":"Audi","model":"Q7"},"weights":{"0":["audi",10]},"words":{"audi":1},"sum":10}
{"id":"2","object":{"id":2,"make":"Audi","model":"Quattro"},"weights":{"0":["audi",10]},"words":{"audi":1},"sum":10}
======================
Query: a a
Result:
{"id":"0","object":{"id":0,"make":"Audi","model":"A4"},"weights":{"0":["audi",10],"1":["a4",5]},"words":{"audi":1,"a4":1},"sum":15}
======================
Query: t
Result:
{"id":"7","object":{"id":7,"make":"Toyota","model":"Avensis"},"weights":{"0":["toyota",10]},"words":{"toyota":1},"sum":10}
{"id":"8","object":{"id":8,"make":"Toyota","model":"Prius"},"weights":{"0":["toyota",10]},"words":{"toyota":1},"sum":10}
{"id":"5","object":{"id":5,"make":"Ferrari","model":"Testarossa"},"weights":{"0":["testarossa",5]},"words":{"testarossa":1},"sum":5}
======================
Query: f
Result:
{"id":"5","object":{"id":5,"make":"Ferrari","model":"Testarossa"},"weights":{"0":["ferrari",10]},"words":{"ferrari":1},"sum":10}
{"id":"6","object":{"id":6,"make":"Ferrari","model":"Enzo Ferrari"},"weights":{"0":["ferrari",10]},"words":{"ferrari":1},"sum":10}
======================
Query: f f
Result:
{"id":"6","object":{"id":6,"make":"Ferrari","model":"Enzo Ferrari"},"weights":{"0":["ferrari",10],"1":["ferrari",10]},"words":{"ferrari":2},"sum":20}
======================
Query: t
Result:
{"id":"7","object":{"id":7,"make":"Toyota","model":"Avensis"},"weights":{"0":["toyota",10]},"words":{"toyota":1},"sum":10}
{"id":"5","object":{"id":5,"make":"Ferrari","model":"Testarossa"},"weights":{"0":["testarossa",5]},"words":{"testarossa":1},"sum":5}