[英]Node.js Sequelize Postgres related search function
我正在嘗試創建一個搜索 function 也可以顯示相關搜索。 例如。 如果我嘗試搜索“樹”,那么它必須找到所有包含樹的行。 我也打錯了它,它必須向我展示一些結果。 例如。 '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});
};
嘗試使用Op.like
:
例子:
queryParams.where = {
[Op.or]: [
Sequelize.where(Sequelize.fn('lower', Sequelize.col('t_device.name')), {
[Op.like]: `%${optionsWithDefault.search}%`,
}),
Sequelize.where(Sequelize.fn('lower', Sequelize.col('t_device.external_id')), {
[Op.like]: `%${optionsWithDefault.search}%`,
}),
參考鏈接: https://www.tabnine.com/code/javascript/functions/sequelize/SequelizeStatic/fn
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.