Skip to content

Understanding Search Quality Scores

Semantic search results include similarity scores that indicate how well each property matches your query. Understanding these scores helps you evaluate results and set appropriate expectations.

Similarity scores range from 0 to 1:

  • 1.0 — Perfect match (rare, only if query exactly matches property text)
  • 0.8-1.0 — Excellent match
  • 0.6-0.8 — Good match
  • 0.4-0.6 — Moderate match
  • 0.0-0.4 — Weak match

Property descriptions closely align with your query.

What this means:

  • Query features are explicitly mentioned in the listing
  • Multiple matching keywords or phrases present
  • Property likely meets client’s specific requirements

Example:

Query: "modern kitchen with granite countertops"
Score: 0.89
Property description: "...newly remodeled kitchen featuring granite countertops, stainless appliances, and modern finishes..."

When to use:

  • First showings for clients
  • Highly specific client requirements
  • Limited time for property tours

Solid matches with most features present.

What this means:

  • Core features from query are mentioned
  • Some specific details may vary
  • Property is worth reviewing but may not be perfect

Example:

Query: "family home with large backyard near schools"
Score: 0.72
Property description: "...spacious home perfect for growing families, fenced yard, close to elementary school..."

When to use:

  • Building a showing list
  • Clients with flexible criteria
  • Expanding search when excellent matches are limited

Some matching features, worth reviewing if inventory is limited.

What this means:

  • One or two query features match
  • Property may still be suitable with compromises
  • Missing some specific requirements

Example:

Query: "waterfront cabin with mountain views"
Score: 0.53
Property description: "...cozy cabin nestled in the mountains, private lot, peaceful setting..."

When to use:

  • Low inventory markets
  • Clients willing to compromise
  • Exploring alternative options

Few similarities, likely not a good fit.

What this means:

  • Query and property description have little overlap
  • Property may match general category but not specifics
  • Usually not worth showing to clients

Example:

Query: "luxury penthouse with city views"
Score: 0.31
Property description: "...charming starter home in quiet neighborhood..."

When to use:

  • Generally skip these results
  • Only consider if absolutely no better options exist

More specific queries produce more reliable scores:

Vague query:

"nice house"
→ Low-quality scores (many properties match "nice")

Specific query:

"4 bedroom craftsman with covered porch and hardwood floors"
→ High-quality scores (fewer false positives)

Detailed property descriptions yield better matching:

Poor description:

"Great home in good neighborhood."
→ Low similarity regardless of features

Detailed description:

"Charming 4-bedroom craftsman featuring original hardwood floors throughout, covered front porch with swing, updated kitchen with quartz counters..."
→ Accurate similarity scores

The system understands related concepts:

Query equivalences:

  • “granite countertops” ≈ “granite counters” ≈ “stone countertops”
  • “mountain views” ≈ “overlooks mountains” ≈ “views of peaks”
  • “open floor plan” ≈ “open concept” ≈ “flowing layout”

Start with high-quality matches:

Terminal window
# Filter results to similarity >= 0.6
results.filter(property => property.similarity >= 0.6)

Include good to excellent matches:

Terminal window
# Show properties with similarity >= 0.5
results.filter(property => property.similarity >= 0.5)

Cast a wider net:

Terminal window
# Include moderate matches (>= 0.4)
results.filter(property => property.similarity >= 0.4)

Track which similarity ranges produce successful showings:

Shown to client → Similarity score
✓ Loved it → 0.87
✓ Interested → 0.74
✗ Not interested → 0.58
✗ Wrong fit → 0.42

After multiple clients, you’ll develop intuition for your market:

  • Some markets may have lower average scores due to sparse descriptions
  • Others may cluster higher with detailed listings

If you consistently see:

Too many irrelevant results:

  • Raise threshold (e.g., 0.6 → 0.7)
  • Make queries more specific

Too few results:

  • Lower threshold (e.g., 0.6 → 0.5)
  • Broaden query scope
  • Check if descriptions are detailed enough

Use scores in conjunction with traditional filters:

{
"query": "updated kitchen with granite",
"min_price": 200000,
"max_price": 400000,
"min_beds": 3,
"city": "Twin Falls"
}

This ensures:

  1. Traditional filters eliminate non-starters (wrong price, beds, location)
  2. Similarity score ranks remaining properties by feature match

Most queries produce results clustered around 0.5-0.7:

0.9-1.0: ▂ (very few)
0.8-0.9: ▅ (some)
0.7-0.8: ███ (many)
0.6-0.7: █████ (most)
0.5-0.6: ███ (many)
0.4-0.5: ▅ (some)
< 0.4: ▂ (very few)

Specific queries with good data produce higher scores:

0.8-1.0: █████
0.7-0.8: ███
0.6-0.7: ▅
< 0.6: ▂

Vague queries or poor data produce lower scores:

> 0.7: ▂
0.6-0.7: ▅
0.5-0.6: ███
0.4-0.5: █████
< 0.4: ███

If most scores are low, revise your query or check data quality.

Similarity scores use cosine similarity between embeddings:

  1. Query embedding — Your search text is converted to a vector
  2. Property embeddings — Each property description has a pre-computed vector
  3. Cosine similarity — Measures angle between vectors (0 = orthogonal, 1 = identical)

Key insight: Scores reflect semantic meaning, not keyword overlap. Two listings may score high despite using different words if the concepts match.