-
Notifications
You must be signed in to change notification settings - Fork 7
/
SRsearch.js
76 lines (68 loc) · 1.78 KB
/
SRsearch.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Items = new Mongo.Collection("log_info");
if (Meteor.isServer) {
Meteor.publish('items', function (queryString) {
return query(Items, queryString)
})
}
if (Meteor.isClient) {
Session.set('queryString', '')
Meteor.subscribe('items', '')
Template.body.helpers({
items: function () {
return query(Items, Session.get('queryString'))
}
});
Template.body.events({
"keyup #search-box":_.throttle(function(event){
Session.set('queryString', event.target.value)
Meteor.subscribe('items', event.target.value)
}, 50)
})
}
function splitKeyword(str){
return str.split(' ')
}
function isSpecial(str){
var relation
var result = {}
if (str.indexOf('<') != -1){
relation = str.split('<')
result[relation[0]] = { $lt: Number(relation[1])}
return result
} else if (str.indexOf('>') != -1){
relation = str.split('>')
result[relation[0]] = { $gt: Number(relation[1])}
return result
} else if (str.indexOf('=') != -1){
relation = str.split('=')
result[relation[0]] = relation[1]
return result
} else if (str.indexOf(':') != -1){
relation = str.split(':')
result[relation[0]] = new RegExp(relation[1], 'ig')
return result
}
return null;
}
function query(collections, queryString){
var limit = 40
var query = queryString.split(' ')
var andArray = []
for (var i = query.length - 1; i >= 0; i--) {
if (query[i] == '') {
continue
}
var testSpecial = isSpecial(query[i])
if (testSpecial != null) {
andArray.push(testSpecial)
} else {
var regEx = new RegExp(query[i], 'ig')
andArray.push({prj: regEx})
}
}
if (andArray.length != 0){
return collections.find({$and: andArray}, {limit:limit})
} else {
return collections.find({},{limit:limit})
}
}