Skip to main content
Interactions are the raw material for relevance engineering. This page covers signal strategy — which signals to capture, when, and why. For the API itself, see the Interactions API reference.

Signal Strength Matrix

Not all signals carry equal weight. The table below maps each interaction type to how it’s used across the platform:
Signal TypeStrengthFusion LearningPersonalizationAnalyticsFine-Tuning
clickModeratePrimary positive signalSession historyCTR metricsPositive pairs
long_viewStrongHigh-weight positivePreference indicatorEngagement depthStrong positive
purchaseStrongestConversion signalPurchase exclusionRevenue attributionGold standard
add_to_cartStrongIntent signalCart-based recsFunnel metricsNear-positive
positive_feedbackExplicitDirect rewardProfile buildingQuality scoreGround truth
negative_feedbackExplicitDirect penaltyAnti-preferenceIssue detectionHard negative
skipWeak negativeImplicit penaltySkip rateSoft negative
return_to_resultsModerate negativeBounce signalBounce rateNegative pair
shareStrongSocial proofSharing patternsViralityStrong positive
bookmarkModerateSave intentSaved itemsSave ratePositive
copyModerateContent valueEngagementPositive
dwell_timeVariableDuration-weightedEngagement depthWeighted
scroll_depthWeakEngagement depthContent quality
query_refinementNegativeQuery failure signalQuery analysis

Use Case Patterns

Primary signals: purchase, add_to_cart, clickE-commerce prioritizes conversion signals. A purchase is the strongest indicator that a result was relevant.
{
  "feature_id": "doc_product_123",
  "interaction_type": ["purchase"],
  "position": 2,
  "metadata": {
    "order_value": 49.99,
    "query": "wireless earbuds",
    "category": "electronics"
  },
  "user_id": "user_456",
  "session_id": "sess_789"
}
Key patterns:
  • Track add_to_cart separately from purchase to measure funnel drop-off
  • Use position for learning-to-rank bias correction
  • Store order_value in metadata for revenue-weighted metrics

Implementation Patterns

// Track clicks with position
document.querySelectorAll('.search-result').forEach((el, index) => {
  el.addEventListener('click', () => {
    fetch('/api/interactions', {
      method: 'POST',
      body: JSON.stringify({
        feature_id: el.dataset.documentId,
        interaction_type: ['click'],
        position: index,
        metadata: { query: currentQuery },
        user_id: userId,
        session_id: sessionId
      })
    });
  });
});

// Track dwell time on result detail pages
let startTime = Date.now();
window.addEventListener('beforeunload', () => {
  const dwellMs = Date.now() - startTime;
  navigator.sendBeacon('/api/interactions', JSON.stringify({
    feature_id: currentDocId,
    interaction_type: dwellMs > 5000 ? ['click', 'long_view'] : ['click'],
    position: resultPosition,
    metadata: { duration_ms: dwellMs, query: originalQuery },
    user_id: userId
  }));
});

Position Tracking

Always capture position. Without position data, the system cannot correct for position bias — the tendency for users to click higher-ranked results regardless of relevance. This is critical for both learned fusion and fine-tuning.
Position bias correction works by comparing the click-through rate at each position against the expected baseline. A click at position 8 is a much stronger relevance signal than a click at position 1, because users are less likely to scroll that far.

Cold Start Considerations

When you first deploy, you have zero interactions. Here’s what happens at each stage:
InteractionsFusion BehaviorWhat To Do
0Falls back to rrf (uniform weights)Ship with rrf, start collecting signals
1–50Global-level learned weights onlyMonitor analytics for obvious issues
50–500Demographic-level personalization beginsVerify evaluation metrics are trending up
500+Per-user personalization kicks inRun benchmarks to compare against baseline
The system handles this automatically through the hierarchical fallback in Thompson Sampling: personal context (if enough data) → demographic context → global context → uniform prior.

Next Steps