【发布时间】:2022-01-05 04:38:55
【问题描述】:
我正在尝试创建一个搜索功能,该功能还可以显示相关搜索。例如。如果我尝试搜索“树”,那么它必须找到所有包含树的行。我也打错了它,它必须向我展示一些结果。例如。 'treesabc' 那么它也必须向我展示一些结果。现在我正在使用 Like 方法,它满足了我的第一个需求,但在输入附加字母时它确实有效。
这是我的代码。
exports.quickSearch = async (req, res) => {
let services = [];
// finding all services which matches the condition
let serviceData = await Service.findAll({
limit: 300, // limiting the number of search
where: {
// here i want to to do something which can also show related searches
[Op.or]: [
{
service_name: sequelize.where(
sequelize.fn("LOWER", sequelize.col("service_name")),
"LIKE",
"%" + req.params.keyword.toLowerCase() + "%",
),
},
{
category: sequelize.where(
sequelize.fn("LOWER", sequelize.col("category")),
"LIKE",
"%" + req.params.keyword.toLowerCase() + "%",
),
},
{
sub_category: sequelize.where(
sequelize.fn("LOWER", sequelize.col("sub_category")),
"LIKE",
"%" + req.params.keyword.toLowerCase() + "%",
),
},
{
master_category: sequelize.where(
sequelize.fn("LOWER", sequelize.col("master_category")),
"LIKE",
"%" + req.params.keyword.toLowerCase() + "%",
),
},
{
gender: sequelize.where(
sequelize.fn("LOWER", sequelize.col("gender")),
"LIKE",
"%" + req.params.keyword.toLowerCase() + "%",
),
},
],
},
});
// custom function asyncForEach
const asyncForEach = async (array, callback) => {
for (let i = 0; i < array.length; i++) {
await callback(array[i]);
}
};
await asyncForEach(serviceData, async (service) => {
// trying to find all te partner which has service_id
let partnerData = await Partner.findOne({
where: {
partner_id: service.partner_id,
banned: false,
},
raw: true,
});
if (partnerData) {
// inserting partners data in service
partnerData.password = null;
service.dataValues.outletdata = partnerData;
services.push(service);
}
});
return res
.status(200)
.json({ message: "Success", services});
};
【问题讨论】:
标签: javascript node.js postgresql sequelize.js