9

我正在使用Parse.com和访问它Javascript。我想以这样一种方式搜索数据,它不会像我搜索那样搜索区分大小写,abc那么它就会给出abc, Abc, ABC,aBc etc all。但目前它只提供abc.

JavaScript:

var search_data="Temp";
var product = Parse.Object.extend("product");
var query = new Parse.Query(product);

query.contains("name",search_data); 
query.find({
     success: function(results) {
        console.log("Total Product Found : "+results.length);
        printSearchProducts(results,query);  //custom method to print product detail
     },
     error: function(error) {
         console.log("Error: " + error.code + " " + error.message);
     }
 });

实际结果: Temp1,Temp2,Temp3,ProductTemp3,Temp4Product etc

所需结果: Temp1,Temp2,Temp3,ProductTemp3,Temp4Product,temp5,producttemp6,TEMP7,tEMp8 etc

4

4 回答 4

40

为此,您可以使用Parse.Query' smatches()函数,即使它的文档页面中没有说明,但您可以像这样使用它:

query.matches(key, value, 'i');

希望能有所帮助。

于 2016-02-04T19:14:10.250 回答
5

此时,您无法通过查询执行不区分大小写的搜索。

然而,一个非常简单的解决方法是存储您需要执行此查询的字段的小写版本。

创建项目

var Product = Parse.Object.extend("product");
var newProduct = new Product();
var productName = "Temp4Product";
newProduct.set("name",productName);
newProduct.set("name_lowercase",productName.toLowerCase());
newProduct.save(); 

执行查询

var search_data="Temp";
var product = Parse.Object.extend("product");
var query = new Parse.Query(product);

query.contains("name_lowercase",search_data.toLowerCase()); 
query.find({
     success: function(results) {
        console.log("Total Product Found : "+results.length);
        printSearchProducts(results,query);  //custom method to print product detail
     },
     error: function(error) {
         console.log("Error: " + error.code + " " + error.message);
     }
 });

请注意,在上面的示例中,我使用了 string.toLowerCase() 函数,但是可能有更合适的函数供您使用。基本上,您想找到一种“简化”数据的方法,以便您可以执行适当的查询。

于 2013-09-12T12:21:58.873 回答
0

建议使用小写值的额外存储字段的解决方案具有需要额外存储的缺点。match方法有效,但性能成本较低。

避免这两个问题的更好解决方法是在投影中使用带有$toLower表达式的聚合。

于 2019-06-30T18:22:05.733 回答
-1

我已经解决了这个问题。我删除约束query.contains("name",search_data);并在方法中使用 java 脚本应用手动搜索,printSearchProducts例如:

var search_data="Temp";
var product = Parse.Object.extend("product");
var query = new Parse.Query(product);
query.limit(500);
query.find({
    success: function(results) {
         printSearchProducts(results,query,search_data); 
    }, 
    error: function(error) {
         console.log("Error: " + error.code + " " + error.message);
   } 
});

printSearchProducts 方法 where 通过 Java Script 手动搜索。

function printSearchProducts(results,query,search_data) {
    var counter = results.length; 
    var productName = '',i=0; 
    search_data = search_data.toLowerCase(); 
    if(counter){
        while(i<counter){
            var found = -1;
            productName = results[i].get("name");
            var lower_name = productName.replace(/[^a-zA-Z]/g,'_').toLowerCase();
            found = lower_name.indexOf(search_data);
            if(found>=0) {
                  //Access or print the required result here 
            } 
            i++;
        }
    }  
}
于 2013-09-13T09:46:08.937 回答