## 8.11. Text Search Types

[8.11.1. `tsvector`](datatype-textsearch.html#DATATYPE-TSVECTOR)

[8.11.2. `tsquery`](datatype-textsearch.html#DATATYPE-TSQUERY)

[]()[]()

PostgreSQL provides two data types that are designed to support full text search, which is the activity of searching through a collection of natural-language *documents* to locate those that best match a *query*. The `tsvector` type represents a document in a form optimized for text search; the `tsquery` type similarly represents a text query. [Chapter 12](textsearch.html) provides a detailed explanation of this facility, and [Section 9.13](functions-textsearch.html) summarizes the related functions and operators.

### 8.11.1. `tsvector`

[]()

 A `tsvector` value is a sorted list of distinct *lexemes*, which are words that have been *normalized* to merge different variants of the same word (see [Chapter 12](textsearch.html) for details). Sorting and duplicate-elimination are done automatically during input, as shown in this example:

```
SELECT 'a fat cat sat on a mat and ate a fat rat'::tsvector;
                      tsvector
### 8.11.2. `tsquery`

[]()

 A `tsquery` value stores lexemes that are to be searched for, and can combine them using the Boolean operators `&` (AND), `|` (OR), and `!` (NOT), as well as the phrase search operator `<->` (FOLLOWED BY). There is also a variant `<*`N`*>` of the FOLLOWED BY operator, where *`N`* is an integer constant that specifies the distance between the two lexemes being searched for. `<->` is equivalent to `<1>`.

 Parentheses can be used to enforce grouping of these operators. In the absence of parentheses, `!` (NOT) binds most tightly, `<->` (FOLLOWED BY) next most tightly, then `&` (AND), with `|` (OR) binding the least tightly.

 Here are some examples:

```
SELECT 'fat & rat'::tsquery;
    tsquery    
