smart-search-util
v1.0.7
Published
Generic smart search utility with weighted scoring
Downloads
10
Maintainers
Readme
🔍 Smart Search Utility
A generic and intelligent search utility for JavaScript/Node.js, inspired by iOS-style fuzzy search. It allows fast matching across complex structured data (like beneficiaries, accounts, etc.) using a scoring mechanism based on:
- 🔹 Match Type (exact, contains, prefix, abbreviation, subsequence)
- 🔹 Field Priority (weighted by position in
keysarray) - 🔹 Query nature (numeric, word-based, abbreviation)
✨ Features
- ✅ Exact, prefix, contains, and token-based search
- ✅ Abbreviation & numeric match detection
- ✅ Multi-word query support (e.g.,
state bank india) - ✅ Field-weighted scoring system
- ✅ Fully generic – works with any object list
- ✅ Built-in match scoring insights
📦 Installation
npm install smart-search-util🚀 Usage
1. Import the Utility
import { search } from 'smart-search-util';
// or for CommonJS environments:
// const { search } = require('smart-search-util');2. Example Dataset
const data = [
{
benificaryName: "JOHN DOE",
bankName: "STATE BANK OF INDIA",
bankShortNames: "SBI",
bankAccountNumber: "12345678901",
branchIfsc: "SBIN0001238",
countryName: "INDIA"
},
{
benificaryName: "ALICE SMITH",
bankName: "HDFC BANK LTD",
bankShortNames: "HDFC",
bankAccountNumber: "510000000007066",
branchIfsc: "HDFC0000001",
countryName: "INDIA"
}
];3. Define Fields to Search
The earlier a field is in this list, the higher its weight:
const searchFields = [
"bankAccountNumber", // weight 6
"branchIfsc", // weight 5
"benificaryName", // weight 4
"bankName", // weight 3
"bankShortNames", // weight 2
"countryName" // weight 1
];4. Run the Search
const query = "john";
const results = search(data, query, searchFields);5. Display Results
results.forEach(result => {
const { item, score, matchedField, matchedWord, matchedValue } = result;
console.log(`
➤ Match Found:
Name : ${item.benificaryName}
Bank : ${item.bankName}
Account : ${item.bankAccountNumber}
IFSC : ${item.branchIfsc}
Country : ${item.countryName}
🔢 Score : ${score}
🎯 Match Field : ${matchedField}
✨ Match Word : ${matchedWord}
📝 Field Value : ${matchedValue}
`);
});📊 Scoring Rules
| Match Type | Base Score | |-------------------------|------------| | Exact match | 100 | | Starts with | 80 | | Contains | 60 | | Token match ratio | 45–90 | | Abbreviation (e.g. "sbi")| 100 | | Ordered subsequence | 40–60 |
Final Score = Match Score × Field Weight
Field Weight = (number of keys - index of key)
📁 Project Structure
smart-search-util/
├── src/
│ ├── smartSearch.js # Core search logic
│ ├── runSearch.js # Example usage
│ └── sample.json # Sample dataset
├── index.js # Package entry point
├── package.json
└── README.md✅ Run Example
npm install
npm startWill execute the search in runSearch.js and display results.
📄 License
MIT © Almulla Exchange
