> ## Documentation Index
> Fetch the complete documentation index at: https://docs.openlayer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Semantic search filters

> Build test subpopulations with embedding-based semantic matching instead of exact or keyword matching.

When a test should only apply to a slice of your data — a **subpopulation** —
you filter the rows it runs on. Historically those filters matched exactly or
by keyword. **Semantic search filters** match by meaning instead: they use
embeddings to find rows that are semantically similar to a phrase you provide,
even when the wording differs.

For example, a filter for `billing problems` also captures rows like *"I was
charged twice"* or *"my invoice looks wrong"* — none of which contain the word
"billing".

## Creating a semantic filter

1. In your project, go to **Tests** and create (or edit) a test.
2. In the test's subpopulation filters, choose the column to filter on and
   select the **semantic** match type.
3. Enter the phrase describing the slice you care about.

The test then evaluates only the rows whose content is semantically close to
your phrase.

## When to use which match type

| Match type   | Use when                                                    |
| ------------ | ----------------------------------------------------------- |
| Exact        | The value is categorical or structured (a user ID, a label) |
| Keyword      | The rows you want share a literal term                      |
| **Semantic** | The rows share a *topic or intent* but not exact wording    |

Semantic filters are most useful for free-text columns — user messages, model
outputs, transcripts — where the same intent appears in many phrasings.

<Info>
  Semantic filters compose with your other filters: combine a semantic match
  with metadata conditions (date ranges, user IDs, tags) to zero in on exactly
  the slice you want to test.
</Info>
