7.3 KiB
MainBrowseTagCategories Search Logic Reference
Overview
The MainBrowseTagCategories component (app/Http/Livewire/MainBrowseTagCategories.php) provides category-based search functionality, allowing users to browse and filter content by selecting tag categories. Unlike the text-based MainSearchBar, this component focuses on hierarchical category filtering with sophisticated location-based prioritization.
Search Flow Workflow
1. Category Selection (selectCategory(), removeCategory())
- Toggle Selection: Categories can be selected/deselected
- Hierarchical Inclusion: Child categories automatically included when parent selected
- Validation: Category ID validation ensures data integrity
- Automatic Search: Triggers search immediately upon selection change
2. Search Execution (performSearch() → searchByCategories())
- Empty State: No categories = empty results
- Category Expansion: Selected categories expanded to include all children
- Name Resolution: Category IDs converted to localized names
- Elasticsearch Query: Advanced query construction and execution
3. Query Construction (buildElasticsearchQuery())
Category Matching Strategy
- Primary Field:
tags.contexts.categories.name_{locale} - Exact Match: 2x category boost from config
- Fuzzy Match: 1x category boost with configurable fuzziness
- Minimum Match: At least one category must match
Model Filtering
- Source Selection: Only
id,__class_name, and_scorereturned - Index Targeting: Uses same indices as MainSearchBar
- Result Limit: 1.5x max_results for better selection pool
Result Prioritization System
1. Location-Based Boosting (addLocationBoosts())
Same hierarchy as MainSearchBar but applied to category searches:
Proximity Levels (best to worst)
- same_district: 5.0x boost (2.5x final multiplier)
- same_city: 3.0x boost (2.0x final multiplier)
- same_division: 2.0x boost (1.5x final multiplier)
- same_country: 1.5x boost (1.2x final multiplier)
- different_country: 1.0x boost (neutral)
- no_location: 0.9x penalty
2. Model-Type Prioritization (sortAndLimitResults())
Applied during final processing using config values:
- Posts: 4x boost (highest priority)
- Organizations: 3x boost
- Banks: 3x boost
- Users: 1x boost (baseline)
3. Dual-Sort Strategy
Results sorted by:
- Primary: Location proximity (distance ascending - closer first)
- Secondary: Combined score (score descending - higher first)
4. Category Match Quality
- Exact category name matches: 2x boost over fuzzy matches
- Parent category selection: Includes all child categories in search
- Localized matching: Uses current locale for category names
Profile and Content Filtering
1. Profile Filtering (filterProfile())
Same business rules as MainSearchBar:
- Inactive profiles: Hidden based on config (
profile_inactive.profile_search_hidden) - Unverified emails: Hidden based on config (
profile_email_unverified.profile_search_hidden) - Incomplete profiles: Hidden based on config (
profile_incomplete.profile_search_hidden) - Deleted profiles: Always hidden (hard-coded)
- Admin override: Can see all profiles regardless of status
2. Post Filtering
- Category restrictions: Only posts from configured category IDs
- Publication status: Respects from/till/deleted_at dates
- Translation requirements: Must have translation for current locale
Output Processing and Display
1. Result Caching (showCategoryResults())
- Cache key: Same as MainSearchBar (
main_search_bar_results_{user_id}) - Cache duration: 5 minutes (configurable)
- Search term: Built from selected category names
- Compatibility: Uses same format as search/show component
2. Data Transformation (transformModelToResult())
Profile Data
- Basic info: Name, photo, type classification
- Location formatting: City, division display
- Relationship loading: Eager loading for performance
Post Data
- Content: Title, subtitle, category information
- Media: Hero image extraction
- Metadata: Category ID and localized name
3. Search Results Display
Results displayed using the same livewire/search/show component as MainSearchBar:
- Profile cards: Standard profile layout with skills, reactions
- Post cards: Event-style cards with images and details
- Highlighting: Category-focused highlighting
- Pagination: 15 results per page
Category Hierarchy System
1. Hierarchy Loading (loadTagCategories())
- Caching: 1-hour cache per locale
- Translation support: Current locale translations preferred
- Tree building: Recursive parent-child relationship construction
2. Category Expansion (expandCategoryIds())
- Child inclusion: All descendant categories included automatically
- Recursive traversal: Deep hierarchy navigation
- Deduplication: Unique category list maintained
3. UI Interaction
- Accordion interface: Collapsible category browser
- Single expansion: Only one parent category open at a time
- Visual selection: Selected categories highlighted with rings
- Remove function: Easy category deselection
Highlighting and Display
1. Highlight Configuration
- Target fields: Category names, profile fields, post content
- Fragment size: 50 characters (smaller than MainSearchBar)
- Priority extraction: Category fields prioritized over content
2. Best Highlight Selection (extractBestHighlight())
Priority order for highlights:
- Category names (highest priority for category search)
- Profile names
- About sections
- Post titles
Performance Optimizations
1. Caching Strategy
- Category hierarchy: 1-hour cache
- Category names: 5-minute cache
- Descendants: 1-hour cache per category
- Results: 5-minute cache (shared with MainSearchBar)
2. Query Optimizations
- Minimal source: Only essential fields returned
- Batch processing: Efficient model loading
- Eager loading: Preload necessary relationships
3. Analytics Integration
- Search tracking: When SearchOptimizationHelper available
- Performance metrics: Execution time tracking
- Location analytics: Geographic search pattern analysis
Configuration Impact
Key Config Sections (config/timebank-cc.php)
Category Boosting
main_search_bar.boosted_fields.categories: Category field importance- Fuzziness settings for approximate matching
Model Prioritization
main_search_bar.boosted_models: Same model priority as text search
Location Boosting
- Same geographic prioritization as MainSearchBar
- Applied consistently across search methods
Filtering Rules
- Profile visibility settings
- Post category inclusion lists
- Business rule configurations
Search Analytics and Debugging
1. Comprehensive Logging
- Query construction details
- Result processing steps
- Performance metrics
- Error handling
2. Debug Information
- Selected categories tracked
- Location hierarchy applied
- Model type distribution
- Score calculations
This category-based search system provides a structured alternative to text search, emphasizing geographic relevance and category-specific content discovery while maintaining consistency with the broader search ecosystem.