У меня есть запрос относительно поиска на mongodb. На моей таблице около 5000 записей данных. Поэтому я должен искать данные от имени нескольких столбцов с небольшим приоритетом. Как и первый приоритет - символ, имя, co_name, bse_symbol, prev_symbol, isin, sc_code. Таким образом, в моем запросе я искал ключ, то есть «DEN», и мой код вернет данные, которые приведены ниже, в которых точный поиск, то есть DEN, идет на 6-й позиции вместо 1-й, потому что это точное совпадение. Мой код возвращает следующие данные:
[
{
"co_name": "Aarvee Denims",
"symbol": "AARVEEDEN",
"prev_symbol": "",
"bse_symbol": "",
"name": "Aarvee Denims & Exports Ltd"
},
{
"co_name": "Confidence Finan",
"symbol": "CONFINT",
"prev_symbol": "",
"bse_symbol": "CONFINT",
"name": "Confidence Finance & Trading Ltd"
},
{
"co_name": "Confidence Fut.",
"symbol": "CFEL",
"prev_symbol": "",
"bse_symbol": "CFEL",
"name": "Confidence Futuristic Energetech Ltd"
},
{
"co_name": "Confidence Petro",
"symbol": "CONFIPET",
"prev_symbol": "",
"bse_symbol": "CONFIPET",
"name": "Confidence Petroleum India Ltd"
},
{
"co_name": "DE Nora India",
"symbol": "DENORA",
"prev_symbol": "",
"bse_symbol": "",
"name": "DE Nora India Ltd"
},
{
"co_name": "Den Networks",
"symbol": "DEN",
"prev_symbol": "",
"bse_symbol": "",
"name": "Den Networks Ltd"
},
{
"co_name": "Denis Chem Lab",
"symbol": "DENISCHEM",
"prev_symbol": "",
"bse_symbol": "DENISCHEM",
"name": "Denis Chem Lab Ltd"
}..... etc etc
]
Здесь я делюсь своим Node.js кодом.
const rejectSpecialCharacter = req.body.searchterm.replace(
/[^a-zA-Z0-9 ]/g,
'',
);
// convert user input into upper case to get the result
const searchQueryUpperCase = rejectSpecialCharacter.toUpperCase();
if (rejectSpecialCharacter === '') {
return res.send({Message: 'Oops! no or wrong input provided'});
}
// Search Code, Symbol, ISIN, Company Name
const regex = rejectSpecialCharacter
.split(' ')
.map(x => `(?=.*${x})`)
.join('');
//console.log(regex)
const searchQuery = new RegExp(regex, 'i');
let searchData = await MyTable.find(
{
$and: [
{
$or: [
// { $text: { $search: rejectSpecialCharacter } },
{ symbol: { $regex: searchQuery } },
{ name: { $regex: searchQuery } },
{ co_name: { $regex: searchQuery } },
{ prev_symbol: { $regex: searchQuery } },
{ bse_symbol: { $regex: searchQuery } },
{ archivesymbol: { $regex: searchQuery } },
{ archiveco_name: { $regex: searchQuery } },
{ archivename: { $regex: searchQuery } },
{ isin: { $regex: searchQuery } },
{ sc_code: { $regex: searchQuery } },
],
},
{ internal_status: 'Active' },
// { internal_status: { $ne: 'Delisted' } },
],
},
{
_id: 0,
symbol: 1,
name: 1,
co_name: 1,
bse_symbol: 1,
prev_symbol: 1,
},
)
.limit()
.exec();
return res.send(searchData)
Есть ли кто-нибудь, кто предлагает мне это, где я делаю ошибки, по которым Мой результат не приходит на первую позицию. PS: мне нужно получить точную запись соответствия сверху, а затем после других подходящих записей