diff --git a/test.html b/test.html
index def1e3c..f8bd8d5 100644
--- a/test.html
+++ b/test.html
@@ -44,7 +44,11 @@
var s = new Date().getTime();
for(var i = 0; i < json.length; i++){
for(var f in json[i]){
- if(f != 'id'){ t.index(i, f, json[i][f]); }
+ switch(f){
+ case 'id': break;
+ case 'email': t.index(false, i, f, json[i][f]); break;
+ default: t.index(true, i, f, json[i][f]); break;
+ }
}
}
diff --git a/tidx.js b/tidx.js
index e0e36ec..1818d9d 100644
--- a/tidx.js
+++ b/tidx.js
@@ -5,14 +5,14 @@ var Tidx = function()
this._index = {};
// regex used to find terms inside a value
- this.v_rx = new RegExp('(:?[a-z_-]+)|(\\d*\\.\\d+)|(\\d+)', 'img');
+ this.v_rx = new RegExp('(:?[a-z_-]+)|(\\d*\\.\\d+)|(\\d+)', 'mg');
// regex used to break out terms with a search
- this.s_rx = new RegExp('(:?([a-z\\d-_]+):){0,1}(:?(:?"(.+?)")|([a-z_-]+)|(\\d+\\.{0,1}\\d*))', 'img')
+ this.s_rx = new RegExp('(:?([a-z\\d-_]+):){0,1}(:?(:?"(.+?)")|([a-z_-]+)|(\\d*\\.\\d+)|(\\d+))', 'img')
// Adds data to index
- this.index = function(id, field, value)
+ this.index = function(tokenize, id, field, value)
{
var f;
switch(typeof field){
@@ -30,30 +30,34 @@ var Tidx = function()
case 'string':
v = value.toLowerCase();
// Don't index empty fields
- if(v.length == 0){ return; }
+ if(v.length === 0){ return; }
break;
default: v = String(value);
}
// Add field to field list, as needed
- if(this._index[f] == undefined){ this._index[f] = {}; }
-
- // Iterate over discrete searchable terms
- var re;
- while((re = this.v_rx.exec(value)) !== null){
- var v = re[0].toLowerCase();
- // If the field in question doesn't have this term already,
- // add it.
- if(this._index[f][v] == undefined){ this._index[f][v] = {}; }
-
- // Add this id to the reverse index under specific field (f)
- // and term (v), if it already exists, increment the weight
- if(this._index[f][v][id] == undefined){
- this._index[f][v][id] = 1;
- } else {
- this._index[f][v][id]++;
+ if(this._index[f] === undefined){ this._index[f] = {}; }
+
+ if(tokenize === true){
+ // Iterate over discrete searchable terms
+ var re;
+ while((re = this.v_rx.exec(v)) !== null){
+ var t = re[0];
+ // If the field in question doesn't have this term already,
+ // add it.
+ if(this._index[f][t] === undefined){ this._index[f][t] = {}; }
+
+ // Add this id to the reverse index under specific field (f)
+ // and term (v), if it already exists, increment the weight
+ if(this._index[f][t][id] === undefined){ this._index[f][t][id] = 1; }
+ else { this._index[f][t][id]++; }
}
+ } else {
+ if(this._index[f][v] === undefined){ this._index[f][v] = {}; }
+
+ if(this._index[f][v][id] === undefined){ this._index[f][v][id] = 1; }
+ else { this._index[f][v][id]++; }
}
};
@@ -63,17 +67,17 @@ var Tidx = function()
this.gsearch = function(result, value)
{
// Refuse empty searches
- if(value.length == 0){ return []; }
+ if(value.length === 0){ return []; }
var v = value.toLowerCase();
// Loop over every field
for(var f in this._index){
// Look for the specified search term
- if(this._index[f][v] != undefined){
+ if(this._index[f][v] !== undefined){
// If it exists, add the result to r, adding in the weight
for(var i in this._index[f][v]){
- if(result[i] == undefined){ result[i] = 0; }
+ if(result[i] === undefined){ result[i] = 0; }
result[i] += this._index[f][v][i];
}
}
@@ -92,13 +96,15 @@ var Tidx = function()
default: f = String(field);
}
- if(value.length == 0){ return []; }
+ if(value.length === 0){ return []; }
var v = value.toLowerCase();
- if(this._index[f] == undefined || this._index[f][v] == undefined){ return []; }
+ if(this._index[f] === undefined || this._index[f][v] === undefined){
+ return [];
+ }
for(var i in this._index[f][v]){
- if(result[i] == undefined){ result[i] = 0; }
+ if(result[i] === undefined){ result[i] = 0; }
result[i] += this._index[f][v][i];
}
};
@@ -115,14 +121,19 @@ var Tidx = function()
var field = re[2];
var value;
- if(re[5] != undefined){ value = re[5]; }
- else if(re[6] != undefined){ value = re[6]; }
- else if(re[7] != undefined){ value = re[7]; }
+ for(var i=5; i < 9; i++){
+ if(re[i] !== undefined && re[i].length !== 0){
+ value = re[i];
+ break;
+ }
+ }
// Global term
- if(field == undefined || field == ''){ this.gsearch(r, value); }
- // Field specific term
- else { this.fsearch(r, field, value); }
+ if(field !== undefined && field.length !== 0){
+ this.fsearch(r, field, value);
+ } else {
+ this.gsearch(r, value);
+ }
}
return this.sortresult(r);