[[term-vector]]
=== `term_vector`

Term vectors contain information about the terms produced by the
<<analysis,analysis>> process, including:

* a list of terms.
* the position (or order) of each term.
* the start and end character offsets mapping the term to its
  origin in the original string.
* payloads (if they are available) — user-defined binary data
  associated with each term position.

These term vectors can be stored so that they can be retrieved for a
particular document.

The `term_vector` setting accepts:

[horizontal]
`no`::                      No term vectors are stored. (default)
`yes`::                     Just the terms in the field are stored.
`with_positions`::          Terms and positions are stored.
`with_offsets`::            Terms and character offsets are stored.
`with_positions_offsets`::  Terms, positions, and character offsets are stored.
`with_positions_payloads`:: Terms, positions, and payloads are stored.
`with_positions_offsets_payloads`::  Terms, positions, offsets and payloads are stored.

The fast vector highlighter requires `with_positions_offsets`.
<<docs-termvectors, The term vectors API>> can retrieve whatever is stored.

WARNING:  Setting `with_positions_offsets` will double the size of a field's
index.

[source,console]
--------------------------------------------------
PUT my_index
{
  "mappings": {
    "properties": {
      "text": {
        "type":        "text",
        "term_vector": "with_positions_offsets"
      }
    }
  }
}

PUT my_index/_doc/1
{
  "text": "Quick brown fox"
}

GET my_index/_search
{
  "query": {
    "match": {
      "text": "brown fox"
    }
  },
  "highlight": {
    "fields": {
      "text": {} <1>
    }
  }
}
--------------------------------------------------

<1> The fast vector highlighter will be used by default for the `text` field
    because term vectors are enabled.

