我正在为我的网站搜索一个搜索框,并希望从头开始构建(我知道我可能不应该这样做,但这是一次学习练习)。
我从文本框中收到一个字符串,并使用Jquery自动完成功能显示Parse的任何结果。
到目前为止这个工作正常但是当我输入一个包含我数据库中所有单词的字符串,但输入顺序不正确时,我没有得到任何结果。
e.g。如果我搜索“新文章”它会显示文章,而如果我搜索“文章新”则不会。
我正在检索数据:
...
var searchString = document.getElementById("tags").value; // Get the search string
var str = searchString.split(" "); // Split it up into an array
var Articles = Parse.Object.extend("Articles");
var query = new Parse.Query(Articles);
query.containedIn("title", str); // This part doesn't work.
// query.contains("title", searchString); // I was using this and it works OK.
query.find({
...
编辑:
使用我的云代码下面的bond建议的方法是:
Parse.Cloud.define('searchArticles', function(request, response) {
console.log("About to request search terms"); // This never appears in cloud code logs
var input = request.params.searchTerms;
input = _.uniq(input);
input = _.filter(list, function(w) { return w.match(/^\w+$/); });
var searchQuery = new Parse.Query("Articles");
searchQuery.containedIn("titleArray", input);
searchQuery.find().then(function(articles) {
console.log("Success");
}, function(err) {
console.log("Failure");
});
});
我正在使用的函数是:
$("#searchBox").keyup(function() {
var availableArticles = [];
var searchString = document.getElementById("tags").value;
var str = searchString.split(" ");
Parse.Cloud.run('searchArticles', {"searchTerms":str}, {
success: function(articles) {
alert("Successful");
},
error: function(error) {
alert("Unsuccessful");
}
});
请注意,没有编写console.log,并且Parse.Cloud.run
函数中的警报永远不会出现。云代码正在运行,因为它在Parse云代码日志中显示。
答案 0 :(得分:1)
对于搜索功能,您可以使用单独的数组列,例如keyWords。将条目中的关键字保存在文章类的beforeSave
函数中的位置。然后,您可以在键入搜索时调用单独的搜索功能进行搜索。像这样:
Parse.Cloud.beforeSave("Articles", function(request, response) {
// set/update Articles keywords
}
Parse.Cloud.define("searchArticles", function(request, response) {
var input = request.params.query; //
// optimizing input
input = _.uniq(input);
input = _.filter(list, function(w) { return w.match(/^\w+$/); });
var searchQuery = new Parse.Query("AddressInfo");
searchQuery.containsAll("keyWords", input);
searchQuery.find().then(function(articles) {
// return success response
}, function(err) {
// handle error
});
}
您可以从客户端拨打searchArticles
。在云中运行containedIn
等查询比在客户端上运行查询会更快地提供搜索结果。