advanced-search-library
Version:
Intelligent search library with typo correction, autocomplete, and flexible data structure support
237 lines (214 loc) • 8.16 kB
JavaScript
/**
* Advanced Search Library - Flexible Data Structure Example
*
* @author Rıdvan Sevindik <sevindikbusiness@gmail.com>
* @github https://github.com/Ridvan0
* @linkedin https://www.linkedin.com/in/ridvansevindik/
*/
const AdvancedSearch = require('../src/AdvancedSearch');
console.log('🔍 Advanced Search Library - Flexible Data Structures\n');
// Example 1: E-commerce Products
console.log('1. E-commerce Products:');
const ecommerceSearch = new AdvancedSearch();
const products = [
{
id: 1,
title: "Wireless Headphones",
description: "High-quality bluetooth headphones with noise cancellation",
brand: "Sony",
category: "Electronics",
price: 299,
rating: 4.5,
features: ["bluetooth", "noise-cancelling", "wireless"],
specifications: "Battery life: 30 hours, Range: 10 meters"
},
{
id: 2,
name: "Running Shoes",
details: "Comfortable athletic shoes for daily running",
manufacturer: "Nike",
type: "Footwear",
cost: 150,
score: 4.8,
attributes: ["comfortable", "athletic", "durable"],
info: "Size range: 6-13, Weight: 280g"
}
];
ecommerceSearch.addData(products);
const productResults = ecommerceSearch.search('wireless');
console.log(` "wireless" search found ${productResults.length} results`);
productResults.forEach(item => {
const name = item.title || item.name;
const price = item.price || item.cost;
console.log(` - ${name} - $${price}`);
});
// Example 2: Blog Posts/Articles
console.log('\n2. Blog Posts/Articles:');
const blogSearch = new AdvancedSearch({
customFields: [
{ field: 'title', priority: 20, exact: 40 },
{ field: 'content', priority: 10, exact: 20 },
{ field: 'summary', priority: 15, exact: 25 },
{ field: 'tags', priority: 12, exact: 20 },
{ field: 'category', priority: 8, exact: 15 }
]
});
const articles = [
{
id: 1,
title: "Getting Started with JavaScript",
content: "JavaScript is a versatile programming language used for web development...",
summary: "Introduction to JavaScript programming fundamentals",
author: "John Doe",
category: "Programming",
tags: ["javascript", "programming", "web development", "tutorial"],
publishDate: "2024-01-15"
},
{
id: 2,
title: "Advanced React Patterns",
content: "Learn advanced patterns in React for building scalable applications...",
summary: "Deep dive into React patterns and best practices",
author: "Jane Smith",
category: "Web Development",
tags: ["react", "javascript", "patterns", "advanced"],
publishDate: "2024-01-20"
}
];
blogSearch.addData(articles);
const articleResults = blogSearch.search('javascript');
console.log(` "javascript" search found ${articleResults.length} results`);
articleResults.forEach(item => {
console.log(` - ${item.title} (Score: ${item.relevanceScore})`);
});
// Example 3: User Profiles
console.log('\n3. User Profiles:');
const userSearch = new AdvancedSearch();
const users = [
{
id: 1,
username: "john_dev",
fullName: "John Developer",
bio: "Full-stack developer specializing in React and Node.js",
skills: ["JavaScript", "React", "Node.js", "MongoDB"],
location: "San Francisco",
experience: "5 years",
company: "Tech Corp"
},
{
id: 2,
handle: "design_guru",
displayName: "Sarah Designer",
about: "UI/UX designer with passion for minimalist design",
expertise: ["UI Design", "UX Research", "Figma", "Sketch"],
city: "New York",
yearsExp: "3 years",
workplace: "Design Studio"
}
];
userSearch.addData(users);
const userResults = userSearch.search('developer');
console.log(` "developer" search found ${userResults.length} results`);
userResults.forEach(item => {
const name = item.fullName || item.displayName;
const username = item.username || item.handle;
console.log(` - ${name} (@${username})`);
});
// Example 4: Recipe Database
console.log('\n4. Recipe Database:');
const recipeSearch = new AdvancedSearch();
const recipes = [
{
id: 1,
recipeName: "Chocolate Chip Cookies",
instructions: "Mix flour, sugar, and chocolate chips. Bake for 12 minutes.",
ingredients: ["flour", "sugar", "chocolate chips", "butter", "eggs"],
cuisine: "American",
difficulty: "Easy",
cookingTime: "25 minutes",
servings: 24
},
{
id: 2,
dishName: "Spaghetti Carbonara",
directions: "Cook pasta, mix with eggs, cheese, and pancetta",
components: ["spaghetti", "eggs", "parmesan", "pancetta", "pepper"],
origin: "Italian",
level: "Medium",
prepTime: "20 minutes",
portions: 4
}
];
recipeSearch.addData(recipes);
const recipeResults = recipeSearch.search('chocolate');
console.log(` "chocolate" search found ${recipeResults.length} results`);
recipeResults.forEach(item => {
const name = item.recipeName || item.dishName;
const time = item.cookingTime || item.prepTime;
console.log(` - ${name} (${time})`);
});
// Example 5: Movie Database
console.log('\n5. Movie Database:');
const movieSearch = new AdvancedSearch({
customFields: [
{ field: 'title', priority: 25, exact: 50 },
{ field: 'plot', priority: 10, exact: 15 },
{ field: 'genre', priority: 15, exact: 25 },
{ field: 'actors', priority: 12, exact: 20 },
{ field: 'director', priority: 8, exact: 15 }
]
});
const movies = [
{
id: 1,
title: "The Matrix",
plot: "A computer programmer discovers reality is a simulation",
genre: ["Action", "Sci-Fi"],
actors: ["Keanu Reeves", "Laurence Fishburne", "Carrie-Anne Moss"],
director: "The Wachowskis",
year: 1999,
rating: 8.7,
duration: "136 minutes"
},
{
id: 2,
title: "Inception",
plot: "A thief enters people's dreams to steal secrets",
genre: ["Action", "Thriller", "Sci-Fi"],
actors: ["Leonardo DiCaprio", "Marion Cotillard", "Tom Hardy"],
director: "Christopher Nolan",
year: 2010,
rating: 8.8,
duration: "148 minutes"
}
];
movieSearch.addData(movies);
const movieResults = movieSearch.search('sci-fi simulation');
console.log(` "sci-fi simulation" search found ${movieResults.length} results`);
movieResults.forEach(item => {
console.log(` - ${item.title} (${item.year}) - Rating: ${item.rating}`);
});
// Demonstrate auto field detection
console.log('\n🔍 Auto Field Detection Results:');
const searches = [ecommerceSearch, blogSearch, userSearch, recipeSearch, movieSearch];
const datasets = ['E-commerce', 'Blog', 'User', 'Recipe', 'Movie'];
searches.forEach((search, index) => {
console.log(` ${datasets[index]} fields: ${search.searchableFields.map(f => f.field).join(', ')}`);
});
// Cross-dataset search comparison
console.log('\n🔄 Cross-Dataset Search Comparison:');
const searchTerm = 'javascript';
searches.forEach((search, index) => {
const results = search.search(searchTerm);
console.log(` ${datasets[index]} dataset: ${results.length} results for "${searchTerm}"`);
});
// Performance with different data structures
console.log('\n⚡ Performance Comparison:');
searches.forEach((search, index) => {
const startTime = performance.now();
search.search('test');
const endTime = performance.now();
console.log(` ${datasets[index]}: ${(endTime - startTime).toFixed(2)}ms`);
});
console.log('\n✅ Flexible data structure example completed!');
console.log(' The library successfully adapted to 5 different data structures.');