2016-11-06 5 views
0

Я пытаюсь улучшить поиск на моем сайте, это то, как она в настоящее время выглядит (я использую NodeJS, Sequelize и PostgreSQL):Sequelize запрос несколько раз

db.food.findAll({ 
     where: { 
      nameFood: { 
       $iLike: '%' + queryName + '%' 
      } 
     } 
    }).then(function (foods) { 
     foods.sort(compareFood); 

     res.json(foods); 
    }, function (e) { 
     res.status(500).send(); 
    }); 

Я думаю, что это говорит само за себя, но если что-то непонятно, просто спросите меня о комментариях.

Теперь этот алгоритм поиска учитывает параметр WHOLE, поэтому поиск «куриных яиц» ничего не вернет, поскольку в моей базе данных они сохранены как «яйца».

Моя идея для быстрого улучшения будет расколоть запрос ищет пространства, а затем запросить каждое ключевое слово, что-то вроде:

var keywords = queryName.split(' '); 

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

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

ответ

3

Вы можете использовать собственность $or, чтобы получить от вас ответы на любые вопросы по теме "eggs" или "chicken".

Вот пример:

// split queryName by spaces 
var qry = queryName.split(' '); 

// convert each item into a $iLike object 
// ['chicken', 'eggs'] -> [{ $iLike: '%chicken%' }, { $iLike: '%eggs%' }] 
qry = qry.map(function(item) { 
    return { 
    $iLike: '%' + item + '%'; 
    }; 
}); 

db.food.findAll({ 
    where: { 
     nameFood: { $or: qry } 
    } 
}).then(function (foods) { 
    foods.sort(compareFood); 

    res.json(foods); 
}).catch(function (e) { 
    res.status(500).send(); 
}); 

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

Один из них использует функцию .catch для получения любых ошибок. Вместо этого, используя .then, для получения результатов и ошибок, вы можете оставить .then, чтобы обработать результаты, и .catch для обработки ошибок.

db.food.findAll() 
    .then(function(results) { 

    }) 
    .catch(function(err) { 

    }); 

вместо

db.food.findAll() 
    .then(function(results) { 

    }, function(err) { 

    }); 
+0

Огромное спасибо дружище :) – leofontes

 Смежные вопросы

  • Нет связанных вопросов^_^