Back to Resources
Build & Launch
Intermediate
45 min
Chris MaskChris Mask
Jul 13, 2025

Search and Filter UX Patterns for Marketplace Discovery

Comprehensive guide to designing search and filter systems that help users find the right provider quickly. Autocomplete architecture, faceted search, mobile patterns, and zero-results recovery strategies.

Prerequisites

  • Understanding of marketplace user behavior
  • Basic knowledge of search technologies (SQL, Elasticsearch, etc.)
  • Familiarity with UX design principles
  • Access to user search analytics

Search and discovery determine whether people find the right provider or abandon your marketplace. When search feels slow or irrelevant, people leave before the marketplace can prove supply quality. This guide provides patterns and strategies for designing search and filter systems that convert.

Understanding Marketplace Search Challenges

Marketplace search differs fundamentally from product search. Users search for people and services with variable attributes, not standardized products with fixed specifications.

Why Marketplace Search Is Complex

E-commerce Product Search:

  • Searching for standardized items (e.g., "red shirt size medium")
  • Clear category hierarchies
  • Deterministic matching (exact specifications)
  • Visual-first browsing (images drive decisions)
  • Attributes are consistent across products

Marketplace Service Search:

  • Searching for people/services (e.g., "plumber for emergency leak")
  • Fuzzy category boundaries (what defines a "handyman"?)
  • Subjective matching (best fit, not exact match)
  • Multiple decision factors (skills, location, availability, reviews, price)
  • Attributes vary widely between providers

The Core Challenge: Users often know their problem but not the solution. Search must interpret intent and guide toward appropriate providers.

Three Types of Marketplace Searches

Understanding search intent patterns enables appropriate result handling.

Type 1: Exploratory Search (40% of searches)

User knows the general category, exploring options.

Examples:

  • "house cleaners"
  • "personal trainers"
  • "wedding photographers"
  • "business consultants"

User Needs:

  • Broad result set showing variety
  • Effective filtering to narrow options
  • Clear differentiation between providers
  • Sorting by quality, price, or distance

Design Response:

  • Show 20-50 results initially
  • Prominent filters for refinement
  • Visual distinction in result cards
  • Default sort: Recommended (blend of factors)

Type 2: Specific Search (35% of searches)

User knows exactly what they want.

Examples:

  • "eco-friendly house cleaning in Austin"
  • "CrossFit trainer for beginners"
  • "affordable wedding photographer under $2000"
  • "React developer with Node.js experience"

User Needs:

  • Precise matching to specifications
  • Most relevant results first
  • Quick path to booking
  • Confidence that results meet criteria

Design Response:

  • Exact matches prioritized
  • Highlight matching attributes in results
  • Surface pricing/availability immediately
  • Fast transition to provider profile or booking

Type 3: Problem-Based Search (25% of searches)

User describes their problem without knowing the solution.

Examples:

  • "leaking sink emergency"
  • "need help losing 30 pounds"
  • "small wedding photos next month"
  • "website keeps crashing"

User Needs:

  • Interpretation of problem → appropriate service
  • Educational context about solutions
  • Multiple solution options when applicable
  • Guidance toward qualified providers

Design Response:

  • Query interpretation and expansion
  • "Did you mean..." suggestions
  • Service category education
  • Filter presets for common scenarios

Implementation: Track search queries and classify by type to optimize handling for each pattern.

Search Input Design

The search box is your marketplace's primary entry point. Design it to guide users and reduce friction.

Homepage Search Pattern

Two-Field Search (Recommended):

┌─────────────────────────────────────────────┐
│                                             │
│    Find the perfect [service provider]     │
│                                             │
│  ┌────────────────────────────────────┐    │
│  │ 🔍 What do you need?               │    │
│  │    (e.g., house cleaning, plumber) │    │
│  └────────────────────────────────────┘    │
│                                             │
│  ┌────────────────────┐  ┌──────────┐      │
│  │ 📍 Austin, TX      │  │ Search   │      │
│  └────────────────────┘  └──────────┘      │
│                                             │
└─────────────────────────────────────────────┘

Why Two Fields:

  • Separates intent (what) from context (where)
  • Enables better matching and filtering
  • Presets location via geolocation
  • Converts 25% better than single-field search

Field Specifications:

Service Field:

  • Autocomplete after 2 characters
  • Placeholder: Examples of searchable services
  • Width: 70% of search container
  • Required field

Location Field:

  • Auto-detect via browser geolocation
  • Autocomplete for city/zip codes
  • Width: 30% of search container (desktop), full width (mobile)
  • Optional for remote services, required for local

Alternative: Single-Field Search

Use for marketplaces with:

  • Remote/virtual services only
  • Single geographic area
  • Very simple service categories
┌────────────────────────────────────┐
│ 🔍 Search for providers...        │
│    Try "virtual assistant" or      │
│    "graphic designer"              │
└────────────────────────────────────┘

Placeholder Text Strategy

Placeholders should educate users on what to search for.

Ineffective Placeholders:

  • "Search..." (provides no guidance)
  • "Enter keywords" (vague)
  • "Search for providers" (obvious but not helpful)

Effective Placeholders:

  • "What do you need? (e.g., house cleaning, plumber, tutor)"
  • "Find a provider... Try 'dog walker' or 'accountant'"
  • "Describe your project or search by service"

Dynamic Placeholders:

Rotate examples based on popular searches:

const placeholders = [
  "What do you need? (e.g., house cleaning)",
  "What do you need? (e.g., personal trainer)",
  "What do you need? (e.g., web developer)",
  "What do you need? (e.g., math tutor)",
];

// Rotate every 3 seconds
setInterval(() => {
  searchInput.placeholder = placeholders[currentIndex];
  currentIndex = (currentIndex + 1) % placeholders.length;
}, 3000);

Search Scope Selector

For multi-category marketplaces, add category pre-filtering.

┌──────────────────────────────────────────────┐
│ [All Services ▼] [What do you need?...     ] │
│                  [📍 Location     ] [Search] │
└──────────────────────────────────────────────┘

Dropdown Options:
• All Services
• Home Services
• Professional Services
• Personal Services
• Health & Wellness
• Education & Training

When to Include:

  • 8+ distinct service categories
  • Categories have minimal overlap
  • Users typically know their category

When to Skip:

  • Single vertical marketplace
  • Fewer than 5 categories
  • Significant category overlap

Autocomplete Architecture

Autocomplete reduces typing friction and guides users toward successful searches.

Autocomplete Specifications

Trigger: After 2 characters typed Response Time: <100ms (perceived as instant) Results: 8-10 suggestions (desktop), 6-8 (mobile) Grouping: Organize by suggestion type Action: Single click to execute search (not just complete input)

Autocomplete Result Structure

Example Input: "house cle"

┌────────────────────────────────────┐
│ house cle_                         │
├────────────────────────────────────┤
│ 🏠 Services                        │
│    House Cleaning                  │
│    House Cleaning - Deep Clean     │
│    House Cleaning - Move-out       │
│                                    │
│ 👤 Top Providers                   │
│    Sarah's House Cleaning (4.9⭐)  │
│    Elite House Cleaning Co. (4.8⭐)│
│                                    │
│ 📍 Popular Searches                │
│    House Cleaning in Austin        │
│    House Cleaning near me          │
└────────────────────────────────────┘

Why Grouped Display:

  • Visual scanning is faster
  • Shows breadth of matching content
  • Provides intent-based options
  • Builds confidence through variety

Autocomplete Data Sources

Combine multiple sources for comprehensive suggestions.

1. Service Catalog (Primary Source)

Your standardized service taxonomy:

- House Cleaning
  - Standard House Cleaning
  - Deep Cleaning
  - Move-out Cleaning
  - Eco-Friendly Cleaning
  - Post-Construction Cleaning

Implementation:

SELECT service_name, category
FROM services
WHERE service_name ILIKE '%' || ? || '%'
ORDER BY search_popularity DESC
LIMIT 5;

2. Provider Names and Businesses

Match against provider business names:

SELECT display_name, business_name, avg_rating
FROM providers
WHERE (display_name ILIKE '%' || ? || '%'
   OR business_name ILIKE '%' || ? || '%')
  AND status = 'active'
  AND avg_rating >= 4.0
ORDER BY booking_count DESC
LIMIT 3;

3. Popular Searches

Real user searches with successful outcomes:

SELECT search_query, search_count
FROM search_analytics
WHERE search_query ILIKE '%' || ? || '%'
  AND result_count > 0
  AND booking_rate > 0.15
ORDER BY search_count DESC
LIMIT 3;

4. Synonyms and Variations

Map colloquial terms to official services:

User Types → System Matches
"maid service" → "House Cleaning"
"cleaning lady" → "House Cleaning"
"housekeeper" → "House Cleaning"
"fix my sink" → "Plumbing Services"
"leaking faucet" → "Plumbing Services"
"personal trainer" → "Fitness Training"
"workout coach" → "Fitness Training"

Synonym Database:

CREATE TABLE search_synonyms (
  user_term VARCHAR(255),
  maps_to VARCHAR(255),
  category VARCHAR(100)
);

-- Query with synonym expansion
SELECT service_name
FROM services
WHERE service_name IN (
  SELECT maps_to FROM search_synonyms WHERE user_term ILIKE '%' || ? || '%'
  UNION
  SELECT service_name FROM services WHERE service_name ILIKE '%' || ? || '%'
);

5. Problem-Based Queries

Common user problems mapped to solutions:

CREATE TABLE problem_solutions (
  problem_query VARCHAR(500),
  solution_service VARCHAR(255),
  priority INTEGER
);

INSERT INTO problem_solutions VALUES
  ('leaking sink', 'Plumbing Services', 1),
  ('clogged drain', 'Plumbing Services', 1),
  ('toilet won''t flush', 'Plumbing Services', 1),
  ('need to lose weight', 'Personal Training', 1),
  ('need to lose weight', 'Nutrition Coaching', 2);

Autocomplete Performance Optimization

Elasticsearch Implementation:

{
  "query": {
    "bool": {
      "should": [
        {
          "match_phrase_prefix": {
            "service_name": {
              "query": "house cle",
              "boost": 3
            }
          }
        },
        {
          "fuzzy": {
            "service_name": {
              "value": "house cle",
              "fuzziness": 1
            }
          }
        }
      ]
    }
  },
  "size": 10
}

Caching Strategy:

  • Cache popular searches (80/20 rule: 20% of queries = 80% of searches)
  • Set 24-hour TTL for search suggestions
  • Implement edge caching (Cloudflare, Fastly)
  • Preload top 100 searches on page load

Response Time Targets:

  • Autocomplete: <100ms
  • Cache hit: <20ms
  • Cache miss: <150ms

Mobile Autocomplete Optimization

Mobile-Specific Adjustments:

  • Larger tap targets (minimum 48px height)
  • Fewer suggestions (6 max to minimize scrolling)
  • Recent searches prioritized
  • Swipe to dismiss keyboard
  • Auto-scroll selected suggestion into view

Mobile Autocomplete Layout:

┌──────────────────────────┐
│ house cle_               │
├──────────────────────────┤
│ 🕐 Recent                │
│    House Cleaning        │
│                          │
│ 🏠 Services              │
│    House Cleaning        │
│    Deep Cleaning         │
│                          │
│ 📍 Near You              │
│    Cleaners in Austin    │
└──────────────────────────┘

Simplified, focused on most relevant results.

Filter Architecture

Filters enable users to narrow broad result sets. Design must balance power with simplicity.

Filter Design Principles

Principle 1: Progressive Disclosure Show essential filters always. Hide advanced filters until requested.

Principle 2: Live Result Counts Display how many results each filter will return (faceted search).

Principle 3: Clear Active State Make applied filters obvious and easily removable.

Principle 4: Mobile-First Design Design for mobile constraints first, enhance for desktop.

Essential Filter Set

These filters should be visible and prominent on all marketplaces.

1. Location and Distance

📍 Location
┌──────────────────────────┐
│ Austin, TX            [x]│
└──────────────────────────┘

Distance
⚪────────●────────────── 25 miles
5         25            50+

Implementation:

  • Text input with autocomplete
  • Distance slider (5-50+ miles)
  • "Anywhere" option for remote services
  • Default: Browser geolocation or last search

2. Price Range

💵 Price Range
⚪────────●──────●────────
$50       $150   $300+

Shows: $50 - $300 per hour

Implementation:

  • Dual-handle range slider
  • Display price distribution (histogram visualization)
  • Update dynamically based on result set
  • Include "$0" for providers offering free consultations

3. Availability

📅 Availability
( ) Any time
(•) This week
( ) Today
( ) Choose dates: [Select...]

Implementation:

  • Radio buttons for common options
  • Date picker for specific dates
  • "Flexible" option
  • Real-time availability integration

4. Minimum Rating

⭐ Minimum Rating
( ) Any rating (147)
( ) 3+ stars (142)
(•) 4+ stars (98)
( ) 4.5+ stars (54)

Implementation:

  • Radio buttons with result counts
  • Show distribution to guide selection
  • Default: 4+ stars (quality filter)

5. Sort Order

Sort by: [Recommended ▼]

Options:
• Recommended
• Highest Rated
• Most Reviews
• Lowest Price
• Nearest
• Most Popular

Implementation:

  • Dropdown or segmented control
  • Explain sort logic on hover/tap
  • Remember user preference
  • Default: "Recommended" (algorithmic blend)

Advanced Filter Organization

Hide these in expandable sections or "More Filters" modal:

Service-Specific Attributes:

For house cleaning marketplace:

🏠 Home Details
☐ 1 Bedroom (45)
☐ 2 Bedrooms (89)
☐ 3+ Bedrooms (67)

🧹 Service Type
☐ Standard Clean (147)
☐ Deep Clean (89)
☐ Move-out Clean (34)
☐ Post-construction (12)

♻️ Preferences
☐ Eco-friendly products (76)
☐ Pet-friendly (112)
☐ Bring own supplies (147)

Provider Attributes:

👤 Provider Details
☐ 5+ years experience (67)
☐ Background checked (134)
☐ Insured & bonded (89)
☐ Languages: [Spanish ▼]
☐ Woman-owned business (45)
☐ Veteran-owned (12)

Booking Preferences:

⚡ Availability
☐ Same-day available (23)
☐ Recurring services (112)
☐ Free estimates (89)

💰 Pricing
☐ Senior discount (45)
☐ Package deals (67)
☐ Free cancellation (134)

Implementation Pattern:

┌──────────────────────────────┐
│ [Essential Filters Visible]  │
│                              │
│ Location                     │
│ Price Range                  │
│ Rating                       │
│ Availability                 │
│                              │
│ [+ More Filters (12)]        │
│   ↓ Expands to show advanced │
└──────────────────────────────┘

Desktop vs Mobile Filter Display

Desktop: Sidebar Pattern

┌──────────────┬───────────────────────┐
│ Filters      │ 47 providers found    │
│              │                       │
│ 📍 Location  │ [Provider Card]       │
│ 💵 Price     │ [Provider Card]       │
│ ⭐ Rating    │ [Provider Card]       │
│ 📅 Avail.    │ [Provider Card]       │
│              │                       │
│ [+ More]     │ [Load More]           │
└──────────────┴───────────────────────┘

Advantages:

  • Filters always visible
  • Easy to compare filter options
  • Efficient for desktop users

Mobile: Modal Pattern

┌──────────────────────────────┐
│ 47 providers    [Filters (3)]│
└──────────────────────────────┘

Tap [Filters] opens full-screen modal:

┌──────── Filters ────────X┐
│                           │
│ 📍 Location               │
│ [Austin, TX           [x]]│
│                           │
│ 💵 Price Range            │
│ ⚪────●────────            │
│ $50      $300+            │
│                           │
│ ⭐ Minimum Rating          │
│ (•) 4+ stars              │
│                           │
│ 📅 Availability           │
│ (•) This week             │
│                           │
│ [+ 12 More Filters]       │
│                           │
│ [Clear All]  [Show 47]    │
└───────────────────────────┘

Advantages:

  • Full screen for filters (not cramped)
  • Large touch targets
  • Live result count on apply button
  • Easy to clear all filters

Active Filter Display

Show applied filters clearly with easy removal:

Active Filters:
┌─────────────────────────────────────────┐
│ [Austin, TX x] [$50-$150 x]             │
│ [4+ stars x] [This week x]              │
│                                         │
│ 47 providers match your filters         │
│ [Clear all filters]                     │
└─────────────────────────────────────────┘

[Provider results below...]

Critical UX Elements:

  • Pill/chip design for each active filter
  • Click [x] to remove individual filter
  • "Clear all" link for quick reset
  • Live result count updates as filters change
  • Filters persist across navigation (URL parameters)

URL Parameter Pattern:

/search?q=house+cleaning&location=austin&price=50-150&rating=4&availability=week

Enables sharing and bookmarking filtered searches.

Search Result Display

Result display determines how quickly buyers evaluate options.

Result Layout Patterns

List View (Recommended for Service Marketplaces):

┌─────────────────────────────────────────┐
│ [Photo] Sarah Martinez                  │
│         Professional House Cleaner      │
│         ⭐ 4.9 (127 reviews)            │
│         $85/hour · 2.3 miles away       │
│         ✓ Available today               │
│         [View Profile]  [Book Now]      │
├─────────────────────────────────────────┤
│ [Photo] Elite Cleaning Co.              │
│         Eco-Friendly Cleaning Service   │
│         ⭐ 4.8 (89 reviews)             │
│         $90/hour · 3.1 miles away       │
│         ⚠ Limited availability          │
│         [View Profile]  [Request Quote] │
└─────────────────────────────────────────┘

Information Hierarchy:

  1. Provider photo (identity)
  2. Name and headline (who and what)
  3. Rating and reviews (credibility)
  4. Price and location (key filters)
  5. Availability (urgency/scarcity)
  6. Actions (conversion)

Grid View (Alternative for Visual Services):

┌───────────┬───────────┬───────────┐
│ [Photo]   │ [Photo]   │ [Photo]   │
│ Sarah M.  │ Mike D.   │ Lisa C.   │
│ ⭐ 4.9    │ ⭐ 4.8    │ ⭐ 4.7    │
│ $85/hr    │ $90/hr    │ $75/hr    │
│ 2.3 mi    │ 3.1 mi    │ 4.7 mi    │
│ [Book]    │ [Book]    │ [Book]    │
└───────────┴───────────┴───────────┘

Use for:

  • Photography
  • Beauty services
  • Creative services
  • Marketplaces where visual presentation is primary decision factor

Map View (For Location-Critical Services):

┌──────────────┬───────────────────────┐
│              │ 📍 Sarah Martinez     │
│              │    2.3 miles away     │
│   [Map       │    ⭐ 4.9 · $85/hr    │
│    with      │    [View] [Book]      │
│    Pins]     │                       │
│              │ 📍 Elite Cleaning     │
│              │    3.1 miles away     │
│              │    ⭐ 4.8 · $90/hr    │
└──────────────┴───────────────────────┘

Use for:

  • Home services
  • Mobile services
  • Marketplaces where proximity is critical

View Switcher:

[☰ List] [⊞ Grid] [📍 Map]

Allow users to choose preferred view. Remember preference.

Search Result Sorting

Default sort order significantly impacts conversion.

Recommended Sort (Default):

Algorithmic blend of multiple factors:

score =
  (relevance_score * 0.40) +
  (rating * review_count_log * 0.25) +
  (booking_velocity * 0.15) +
  (response_time_score * 0.10) +
  (availability_score * 0.10)

Why This Works:

  • Balances relevance with quality
  • Prevents low-booking high-rated providers from dominating
  • Rewards responsiveness and availability
  • Adapts to user's implicit preferences

Alternative Sort Options:

  • Highest Rated: Pure rating (minimum 5 reviews to qualify)
  • Most Reviews: Social proof focus (volume indicates popularity)
  • Lowest Price: Price-sensitive users
  • Nearest: Proximity prioritization
  • Most Popular: Based on booking count (last 30 days)
  • Newest: Recently joined providers

Sort Transparency:

Explain sort logic to users:

Sort: Recommended ℹ
Based on relevance, ratings, and availability

Hovering/tapping [ℹ] shows full explanation.

Faceted Search Pattern

For marketplaces with 500+ providers and complex inventory, faceted search prevents zero-result dead ends.

Filters dynamically show how many results each option will return, updating as users refine.

Initial Search: "house cleaning"

147 providers found

Price Range
☐ $50-$75 (42)
☐ $75-$100 (67)
☐ $100-$150 (33)
☐ $150+ (5)

Home Size
☐ 1 Bedroom (89)
☐ 2 Bedrooms (124)
☐ 3+ Bedrooms (98)

Service Type
☐ Standard Clean (147)
☐ Deep Clean (89)
☐ Move-out Clean (34)
☐ Post-construction (12)

After Selecting "$75-$100":

67 providers found

Price Range
☑ $75-$100 (67) [x]

Home Size
☐ 1 Bedroom (45)
☐ 2 Bedrooms (67)
☐ 3+ Bedrooms (52)

Service Type
☐ Standard Clean (67)
☐ Deep Clean (41)
☐ Move-out Clean (12)
☐ Post-construction (3)

Notice facet counts update to reflect filtered result set.

Faceted Search Benefits

Prevents Zero Results: Users see result counts before selecting, avoiding dead ends.

Guides Discovery: High counts indicate popular combinations.

Builds Confidence: Transparency about result availability.

Improves Performance: Pre-calculated facet counts are faster than re-running queries.

Good Fit:

  • 500+ providers
  • 10+ meaningful filter dimensions
  • Complex service offerings with many attributes
  • Professional/specialized services
  • Users need precise matching

Not Necessary:

  • Under 100 providers
  • Simple service categories (3-5 filters sufficient)
  • Single vertical marketplace
  • Most searches return 20-50 results

Implementation Complexity: Faceted search requires significant backend work (Elasticsearch aggregations, cached facet counts). Only implement if catalog complexity justifies it.

Technical Implementation

Elasticsearch Aggregations:

{
  "query": {
    "match": {
      "service_type": "house cleaning"
    }
  },
  "aggs": {
    "price_ranges": {
      "range": {
        "field": "hourly_rate",
        "ranges": [
          { "key": "$50-$75", "from": 50, "to": 75 },
          { "key": "$75-$100", "from": 75, "to": 100 },
          { "key": "$100-$150", "from": 100, "to": 150 },
          { "key": "$150+", "from": 150 }
        ]
      }
    },
    "home_sizes": {
      "terms": {
        "field": "home_sizes",
        "size": 10
      }
    }
  }
}

Returns result counts for each facet option.

Zero Results Recovery

25% of searches return zero results. Implement recovery patterns to prevent user abandonment.

The Zero Results Problem

Bad Experience:

No results found for "cheep house cleening austin"

[Search again]

User is abandoned. They'll likely leave.

Recovery Strategy Framework

Step 1: Suggest Corrections

No exact matches for "cheep house cleening"

Did you mean: "cheap house cleaning"?
[Search for "cheap house cleaning" instead]

Implement fuzzy matching and spell-check:

// Levenshtein distance for spell correction
function suggestCorrection(query, dictionary) {
  let closest = null;
  let minDistance = Infinity;

  dictionary.forEach((term) => {
    const distance = levenshteinDistance(query, term);
    if (distance < minDistance && distance <= 2) {
      minDistance = distance;
      closest = term;
    }
  });

  return closest;
}

Step 2: Show Similar Results

No exact matches, but here are similar services:

✓ House Cleaning in Austin (147 results)
✓ Affordable Cleaning Services (89 results)
✓ Budget-Friendly Cleaners (34 results)

Extract search intent and show related categories.

Step 3: Broaden the Search

Try adjusting your filters:

Current filters:
[Austin x] [$50-$75 x] [Today x] [5 stars x]

Suggestions:
→ Expand to tomorrow (12 providers available)
→ Increase price range to $50-$100 (23 providers)
→ Include 4+ star providers (45 providers)

[Show results with suggested changes]

Intelligently relax filters to find results.

Step 4: Alternative Solutions

Can't find what you need?

→ Browse all house cleaning providers (147)
→ Post your project and receive quotes
→ Contact support for personalized help
→ Join waitlist for notifications

[Continue browsing]

Provide paths forward when exact matches fail.

Step 5: Capture the Lead

We'll notify you when providers match your search

Email: [your@email.com]
[Get Notified When Available]

Convert failed search into lead capture.

Zero Results Impact

Implementing comprehensive zero-results recovery recaptures 30-40% of failed searches.

Search Performance Optimization

Slow search destroys user experience and conversion.

Performance Targets

Our Benchmarks:

  • Autocomplete response: <100ms
  • Initial search results: <500ms
  • Filter application: <200ms
  • Sort change: <150ms
  • Pagination/load more: <300ms

Why Speed Matters:

  • Sub-100ms feels instant
  • 100-300ms feels fast
  • 300-1000ms feels sluggish
  • 1000ms+ feels broken

Technical Implementation Strategies

1. Search Engine Selection

Elasticsearch (Recommended for 10K+ providers):

  • Full-text search with relevance scoring
  • Fuzzy matching for typo tolerance
  • Synonym support
  • Faceted search aggregations
  • Horizontal scaling

Typesense (Recommended for <10K providers):

  • Faster than Elasticsearch for small-medium datasets
  • Simpler setup and maintenance
  • Built-in typo tolerance
  • Lower resource requirements

PostgreSQL Full-Text Search (Viable for <1K providers):

  • No additional infrastructure
  • tsvector and GIN indexes
  • Adequate for simple searches
  • Limited fuzzy matching

2. Caching Strategy

Popular Search Caching:

// Cache top 20% of searches (represents 80% of traffic)
function searchProviders(query, filters) {
  const cacheKey = generateCacheKey(query, filters);

  // Check cache first
  let results = cache.get(cacheKey);
  if (results) return results;

  // Execute search
  results = executeSearch(query, filters);

  // Cache for 15 minutes
  cache.set(cacheKey, results, 900);

  return results;
}

Autocomplete Preloading:

  • Preload top 100 searches on page load
  • Cache autocomplete results for 24 hours
  • Update cache during low-traffic periods

Facet Count Caching:

  • Pre-calculate facet counts for common filters
  • Update asynchronously every 5-15 minutes
  • Trade freshness for speed (acceptable for facets)

3. Database Optimization

Indexed Search Columns:

-- GIN index for full-text search
CREATE INDEX idx_providers_search
ON providers USING gin(search_vector);

-- B-tree indexes for common filters
CREATE INDEX idx_providers_location
ON providers(city, state, zip_code);

CREATE INDEX idx_providers_price
ON providers(hourly_rate);

CREATE INDEX idx_providers_rating
ON providers(avg_rating DESC);

Materialized Views for Complex Queries:

CREATE MATERIALIZED VIEW provider_search_view AS
SELECT
  p.id,
  p.display_name,
  p.service_type,
  p.avg_rating,
  p.review_count,
  p.hourly_rate,
  p.city,
  p.state,
  COUNT(b.id) as booking_count
FROM providers p
LEFT JOIN bookings b ON p.id = b.provider_id
WHERE p.status = 'active'
GROUP BY p.id;

-- Refresh periodically
REFRESH MATERIALIZED VIEW CONCURRENTLY provider_search_view;

4. Frontend Optimization

Debounced Autocomplete:

// Wait 150ms after user stops typing
const debouncedAutocomplete = debounce((query) => {
  fetchAutocompleteSuggestions(query);
}, 150);

Optimistic UI Updates:

// Show loading state immediately
function applyFilter(filter) {
  showLoadingState();

  // Update UI optimistically
  updateActiveFilters(filter);

  // Fetch results in background
  fetchResults(filter).then(updateResults);
}

Progressive Rendering:

// Render first 10 results immediately, load rest progressively
function displayResults(results) {
  renderResults(results.slice(0, 10));

  setTimeout(() => {
    renderResults(results.slice(10, 20));
  }, 100);

  setTimeout(() => {
    renderResults(results.slice(20));
  }, 200);
}

Mobile Search and Filter Optimization

70% of marketplace searches happen on mobile. Design for mobile first.

Mobile Search Input

Sticky Search Bar:

┌────────────────────────────┐
│ [🔍 House cleaning...]     │
│ [Filters (3)]  [Sort ▼]    │
├────────────────────────────┤
│                            │
│ [Results scroll below...]  │
│                            │

Search bar stays at top while scrolling. Always accessible.

Mobile Filter Interface

Trigger Button with Active Count:

┌─────────────────────────────┐
│ [Filters (3 active)] [Sort]│
└─────────────────────────────┘

Badge shows number of active filters.

Full-Screen Filter Modal:

┌────────── Filters ──────X┐
│                           │
│ 📍 Location               │
│ ┌───────────────────────┐ │
│ │ Austin, TX         [x]│ │
│ └───────────────────────┘ │
│                           │
│ 💵 Price Range            │
│ ⚪────────●──────────     │
│ $50      $150      $300+  │
│                           │
│ ⭐ Minimum Rating          │
│ ( ) Any rating            │
│ (•) 4+ stars              │
│ ( ) 4.5+ stars            │
│                           │
│ 📅 Availability           │
│ (•) This week             │
│                           │
│ [+ 12 More Filters]       │
│                           │
│ ┌─────────────────────┐   │
│ │ [Clear] [Show 47]   │   │
│ └─────────────────────┘   │
└───────────────────────────┘

Mobile Filter Best Practices:

  • Full-screen modal (no distraction, maximum space)
  • Large touch targets (minimum 48px height)
  • Sticky "Show Results" button at bottom
  • Live result count on apply button
  • Swipe-to-dismiss gesture
  • One-tap "Clear All"

Mobile Result Cards

Desktop cards can be rich. Mobile must be concise.

Desktop Card:

┌──────────────────────────────────┐
│ [Large Photo]  Sarah Martinez    │
│                Professional       │
│                ⭐ 4.9 (127)      │
│                $85/hr · 2.3 mi   │
│                ✓ Available today │
│                [View] [Book]     │
└──────────────────────────────────┘

Mobile Card:

┌────────────────────────┐
│ [Photo] Sarah Martinez │
│         ⭐ 4.9 (127)   │
│         $85/hr · 2mi   │
│         ✓ Today        │
│         [Book Now]     │
└────────────────────────┘

Vertical stack, scannable hierarchy, single CTA.

Search Analytics and Continuous Improvement

Track metrics to identify improvement opportunities.

Key Metrics to Monitor

1. Search Success Rate

(Searches resulting in booking) / (Total searches)
Target: 35%+

2. Zero Results Rate

(Searches with 0 results) / (Total searches)
Target: <15%

3. Search Refinement Rate

(Users who modify search/filters) / (Total searches)
Target: 30-50% (shows engagement)

4. Filter Usage Track which filters are used most:

  • Prioritize popular filters
  • Consider removing unused filters
  • Optimize filter UI based on usage

5. Time to Book from Search

Average time from search to booking completion
Target: <3 minutes

6. Mobile vs Desktop Conversion

Compare search-to-booking rates by device
Identify device-specific friction points

Search Query Analysis

Popular Searches: Optimize autocomplete and create landing pages for top queries.

Failed Searches: Queries with zero results or no subsequent booking:

  • Add synonyms to mapping
  • Expand service catalog
  • Improve query interpretation
  • Create educational content

Long-Tail Searches: Specific queries reveal detailed user intent:

  • Use for synonym expansion
  • Identify emerging service needs
  • Guide service category creation

Misspellings: Add to autocomplete correction dictionary:

const corrections = {
  plummer: "plumber",
  elektrishun: "electrician",
  tuttor: "tutor",
  cleening: "cleaning",
};

Implementation Checklist

Search Input:

  • Two-field search (service + location) for local marketplaces
  • Helpful placeholder text with examples
  • Auto-detected location with option to change
  • Autocomplete after 2 characters
  • Autocomplete response time <100ms

Autocomplete:

  • Grouped suggestions (services, providers, popular searches)
  • Multiple data sources (catalog, providers, synonyms)
  • 8-10 results on desktop, 6-8 on mobile
  • Click to search (not just complete input)
  • Cached for performance

Filters:

  • Essential filters always visible (location, price, rating, availability, sort)
  • Advanced filters in expandable section or modal
  • Live result counts (faceted search for large catalogs)
  • Active filters clearly displayed with easy removal
  • Desktop sidebar, mobile full-screen modal

Search Results:

  • List view (default for service marketplaces)
  • Grid and map view options (where appropriate)
  • Clear information hierarchy in result cards
  • "Recommended" default sort with transparency
  • Alternative sort options
  • 20-50 results initially, infinite scroll or pagination

Zero Results Recovery:

  • Spell-check and suggestion
  • Similar result alternatives
  • Filter relaxation suggestions
  • Browse category fallback
  • Lead capture for notification

Performance:

  • Autocomplete <100ms
  • Search results <500ms
  • Filter application <200ms
  • Caching for popular searches
  • Indexed database columns
  • Search engine (Elasticsearch/Typesense) for large catalogs

Mobile Optimization:

  • Sticky search bar
  • Full-screen filter modal
  • Large touch targets (48px minimum)
  • Simplified result cards
  • Swipe gestures
  • Fast load time (<3s on 3G)

Analytics:

  • Track search success rate
  • Monitor zero results rate
  • Analyze popular searches
  • Identify failed searches
  • Measure time to book
  • Compare mobile vs desktop performance

Conclusion

Search and filter systems are your marketplace's primary discovery mechanism. Three search types (exploratory, specific, problem-based) require different handling strategies. Autocomplete with multiple data sources reduces friction. Essential filters enable refinement without overwhelming users. Faceted search prevents zero-result dead ends in complex catalogs. Mobile-first design addresses the 70% of users browsing on phones. Zero-results recovery recaptures 30-40% of failed searches. Performance optimization delivers sub-500ms response times.

The difference between 18% and 47% search-to-booking conversion is systematic design, not luck.

Next Steps:

  1. Audit current search experience using analytics
  2. Implement autocomplete with grouped suggestions
  3. Organize filters (essential vs advanced)
  4. Add zero-results recovery patterns
  5. Optimize for mobile interaction
  6. Set up search analytics dashboard
  7. A/B test filter organization and result display

How much should your build actually cost?

Get a personalized investment estimate based on your platform type, scope, and timeline.

Open the Investment Calculator
#search-ux
#filters
#marketplace-discovery
#conversion-optimization
Found this helpful? Share it
Share:

About the Author

Chris Mask

Chris Mask

Founder & CEO

Serial entrepreneur, marketplace architect, and AI-assisted development pioneer with 7+ years building two-sided platforms. Founded Directorism after launching and exiting two successful marketplace businesses. Has personally architected and consulted on 200+ marketplace and directory projects. Recognized authority on cold-start problems, platform economics, marketplace SEO, and leveraging AI tools for rapid development. Early adopter of AI-powered coding workflows, integrating Claude, Cursor, and agentic development patterns into production systems.