Поиск нечувствительных к регистру данных из Parse с использованием JavaScript

javascript parse-platform

3718 просмотра

4 ответа

Я использую 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 .

Автор: Shashi Источник Размещён: 06.07.2019 03:50

Ответы (4)


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 (), однако для вас может быть более подходящая функция. По сути, вы хотите найти способ «упростить» ваши данные, чтобы вы могли выполнить соответствующий запрос.

Автор: ardrian Размещён: 12.09.2013 12:21

27 плюса

Для этого вы можете использовать Parse.Query«s спички () функцию, которая даже не указано в ее странице документации, но вы можете использовать его как это:

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

Надеюсь, что это может помочь.

Автор: akmozo Размещён: 04.02.2016 07:14

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 Где искать вручную через 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++;
        }
    }  
}
Автор: Shashi Размещён: 13.09.2013 09:46

0 плюса

Решения, которые предполагают наличие дополнительного сохраненного поля со строчными буквами, имеют недостаток, заключающийся в необходимости дополнительного хранения. Метод соответствия работает, но имеет незначительную стоимость производительности.

Лучший обходной путь, позволяющий избежать обеих этих проблем, заключается в использовании агрегата с выражением $ toLower в проекции.

Автор: mattparishdev Размещён: 30.06.2019 06:22
Вопросы из категории :
32x32