mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-31 11:50:08 +01:00
part 2 of search changes
This commit is contained in:
@@ -64,7 +64,9 @@ module.exports = function(db, module) {
|
||||
if (!id) {
|
||||
return callback();
|
||||
}
|
||||
db.collection('search').remove({key: key, id: id}, callback);
|
||||
db.collection('search').remove({key: key, id: id}, function(err, res) {
|
||||
callback(err);
|
||||
});
|
||||
};
|
||||
|
||||
module.flushdb = function(callback) {
|
||||
|
||||
@@ -2,19 +2,17 @@
|
||||
|
||||
module.exports = function(redisClient, module) {
|
||||
module.searchIndex = function(key, data, id, callback) {
|
||||
if (key === 'post') {
|
||||
module.postSearch.index(data, id, callback);
|
||||
} else if(key === 'topic') {
|
||||
module.topicSearch.index(data, id, callback);
|
||||
}
|
||||
var method = key === 'post' ? module.postSearch : module.topicSearch;
|
||||
|
||||
method.index(data, id, function(err, res) {
|
||||
callback(err);
|
||||
});
|
||||
};
|
||||
|
||||
module.search = function(key, data, limit, callback) {
|
||||
if (key === 'post') {
|
||||
module.postSearch.query(data, 0, limit - 1, callback);
|
||||
} else if(key === 'topic') {
|
||||
module.topicSearch.query(data, 0, limit - 1, callback);
|
||||
}
|
||||
var method = key === 'post' ? module.postSearch : module.topicSearch;
|
||||
|
||||
method.query(data, 0, limit - 1, callback);
|
||||
};
|
||||
|
||||
module.searchRemove = function(key, id, callback) {
|
||||
@@ -22,12 +20,11 @@ module.exports = function(redisClient, module) {
|
||||
if (!id) {
|
||||
return callback();
|
||||
}
|
||||
var method = key === 'post' ? module.postSearch : module.topicSearch;
|
||||
|
||||
if (key === 'post') {
|
||||
module.postSearch.remove(id, callback);
|
||||
} else if(key === 'topic') {
|
||||
module.topicSearch.remove(id, callback);
|
||||
}
|
||||
method.remove(id, function(err, res) {
|
||||
callback(err);
|
||||
});
|
||||
};
|
||||
|
||||
module.flushdb = function(callback) {
|
||||
|
||||
@@ -104,7 +104,7 @@ console.log(results)
|
||||
privileges.posts.filter('read', results.pids, data.uid, next);
|
||||
},
|
||||
function(pids, next) {
|
||||
filterAndSort(pids, data, results.searchCategories, next);
|
||||
filterAndSort(pids, data, next);
|
||||
},
|
||||
function(pids, next) {
|
||||
matchCount = pids.length;
|
||||
@@ -124,18 +124,15 @@ console.log(results)
|
||||
}
|
||||
|
||||
function filterAndSort(pids, data, callback) {
|
||||
async.parallel({
|
||||
posts: function(next) {
|
||||
getMatchedPosts(pids, data, next);
|
||||
}
|
||||
}, function(err, results) {
|
||||
getMatchedPosts(pids, data, function(err, posts) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
if (!results.posts) {
|
||||
|
||||
if (!Array.isArray(posts) || !posts.length) {
|
||||
return callback(null, pids);
|
||||
}
|
||||
var posts = results.posts.filter(Boolean);
|
||||
posts = posts.filter(Boolean);
|
||||
|
||||
posts = filterByPostcount(posts, data.replies, data.repliesFilter);
|
||||
posts = filterByTimerange(posts, data.timeRange, data.timeFilter);
|
||||
@@ -155,20 +152,14 @@ function getMatchedPosts(pids, data, callback) {
|
||||
var topicFields = [];
|
||||
var categoryFields = [];
|
||||
|
||||
if (data.postedBy) {
|
||||
postFields.push('uid');
|
||||
}
|
||||
|
||||
if (data.sortBy && data.sortBy.startsWith('category.')) {
|
||||
topicFields.push('cid');
|
||||
}
|
||||
|
||||
if (data.replies) {
|
||||
topicFields.push('postcount');
|
||||
}
|
||||
|
||||
if (data.sortBy) {
|
||||
if (data.sortBy.startsWith('topic.')) {
|
||||
if (data.sortBy.startsWith('category')) {
|
||||
topicFields.push('cid');
|
||||
} else if (data.sortBy.startsWith('topic.')) {
|
||||
topicFields.push(data.sortBy.split('.')[1]);
|
||||
} else if (data.sortBy.startsWith('user.')) {
|
||||
postFields.push('uid');
|
||||
@@ -281,25 +272,6 @@ function getMatchedPosts(pids, data, callback) {
|
||||
], callback);
|
||||
}
|
||||
|
||||
function filterByUser(posts, postedByUid) {
|
||||
if (postedByUid) {
|
||||
postedByUid = parseInt(postedByUid, 10);
|
||||
posts = posts.filter(function(post) {
|
||||
return parseInt(post.uid, 10) === postedByUid;
|
||||
});
|
||||
}
|
||||
return posts;
|
||||
}
|
||||
|
||||
function filterByCategories(posts, searchCategories) {
|
||||
if (searchCategories.length) {
|
||||
posts = posts.filter(function(post) {
|
||||
return post.topic && searchCategories.indexOf(post.topic.cid) !== -1;
|
||||
});
|
||||
}
|
||||
return posts;
|
||||
}
|
||||
|
||||
function filterByPostcount(posts, postCount, repliesFilter) {
|
||||
postCount = parseInt(postCount, 10);
|
||||
if (postCount) {
|
||||
@@ -475,8 +447,8 @@ search.searchQuery = function(index, content, cids, uids, callback) {
|
||||
plugins.fireHook('filter:search.query', {
|
||||
index: index,
|
||||
content: content,
|
||||
cids: cids,
|
||||
uids: uids
|
||||
cid: cids,
|
||||
uid: uids
|
||||
}, callback);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user