---
title: Match
noindex: true
canonical: https://docs.paradedb.com/documentation/advanced/full-text/match
---

<Note>
  Highlighting is not supported for `pdb.match` if `distance` is greater than
  zero.
</Note>

Under the hood, the [match](/v2/full-text/match) conjunction and disjunction operators get rewritten to this query builder function.
This function exposes a few advanced configuration options like the ability to use a custom tokenizer.

```sql
SELECT description, rating, category
FROM mock_items
WHERE description @@@ pdb.match('running shoes');
```

<div className="mt-8" />

<ParamField body="value" required>
  The query to match against. This query is automatically tokenized in the same
  way as the field on the left-hand side of `@@@`.
</ParamField>
<ParamField body="tokenizer">
  By default, the query string is tokenized in the same way as the field was at
  index time. This can be configured by setting a [custom
  tokenizer](#custom-tokenizer).
</ParamField>
<ParamField body="distance" default={0}>
  If greater than zero, fuzzy matching is applied. Configures the maximum
  Levenshtein distance (i.e. single character edits) allowed to consider a term
  in the index as a match for the query term. Maximum value is `2`.
</ParamField>
<ParamField body="transposition_cost_one" default={true}>
  When set to `true` and fuzzy matching is enabled, transpositions (swapping two
  adjacent characters) as a single edit in the Levenshtein distance calculation,
  while `false` considers it two separate edits (a deletion and an insertion).
</ParamField>
<ParamField body="prefix" default={false}>
  When set to `true` and fuzzy matching is enabled, the initial substring
  (prefix) of the query term is exempted from the fuzzy edit distance
  calculation, while false includes the entire string in the calculation.
</ParamField>
<ParamField body="conjunction_mode" default={false}>
  When set to `true`, **all** tokens of the query have to match in order for a
  document to be considered a match. For instance, the query `running shoes` is
  by default executed as `running OR shoes`, but setting `conjunction_mode` to
  `true` executes it as `running AND shoes`.
</ParamField>

## Custom Tokenizer

[`paradedb.tokenizer`](/documentation/indexing/tokenizers#tokenizing-a-query) can be passed to `tokenizer` to control how the query string is tokenized.

```sql Function Syntax
SELECT description, rating, category
FROM mock_items
WHERE description @@@ pdb.match(
    'running shoes',
    tokenizer => paradedb.tokenizer('whitespace')
);
```

<Note>
For JSON syntax, `paradedb.tokenizer` prints the configuration object to pass into `tokenizer`.

```sql
SELECT paradedb.tokenizer('whitespace');
```

<Accordion title="Expected Response">
```csv
                           tokenizer
---------------------------------------------------------------
 {"type": "whitespace", "lowercase": true, "remove_long": 255}
(1 row)
```
</Accordion>

</Note>

## Fuzzy Matching

When `distance` is set to a positive integer, fuzzy matching is applied. This allows `match` to tolerate typos in the query string.

```sql
SELECT description, rating, category
FROM mock_items
WHERE description @@@ pdb.match('ruining shoez', distance => 2);
```

## Conjunction Mode

By default, `match` constructs an `OR` boolean query from the query string's tokens. For instance, the query `running shoes` is executed as `running OR shoes`.

When set to `true`, `conjunction_mode` constructs an `AND` boolean query instead.

```sql Function Syntax
SELECT description, rating, category
FROM mock_items
WHERE description @@@ pdb.match('running shoes', conjunction_mode => true);
```
