UNPKG

advanced-search-library

Version:

Intelligent search library with typo correction, autocomplete, and flexible data structure support

237 lines (214 loc) 8.16 kB
/** * 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.');