---
type: api
title: Get multiple term vectors
description: **All methods and paths for this operation:**
url: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/operation/operation-mtermvectors
resource: https://www.elastic.co/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/operation/operation-mtermvectors
products:
  - Elasticsearch
---

# Get multiple term vectors


Availability:

## Paths

- `POST` (also `GET`) `/{index}/_mtermvectors`
- `POST` (also `GET`) `/_mtermvectors`

- [Api key auth](/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/authentication#apikeyauth)
- [Basic auth](/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/authentication#basicauth)
- [Bearer auth](/elastic/docs-builder/docs/4371/api/doc/elasticsearch/v9/authentication#bearerauth)

#### Path Parameters

- `index` (string IndexName) — optional, leave it out to use `/_mtermvectors`
  The name of the index that contains the documents.

## Description

Get multiple term vectors with a single request.
You can specify existing documents by index and ID or provide artificial documents in the body of the request.
You can specify the index in the request body or request URI.
The response contains a `docs` array with all the fetched termvectors.
Each element has the structure provided by the termvectors API.

**Artificial documents**

You can also use `mtermvectors` to generate term vectors for artificial documents provided in the body of the request.
The mapping used is determined by the specified `_index`.

## Required authorization

* Index privileges: `read`

## Query String Parameters

- `ids` ([] string Id)
  A comma-separated list of documents ids. You must define ids as parameter or set "ids" or "docs" in the request body
- `fields` (union Fields)
  A comma-separated list or wildcard expressions of fields to include in the statistics.
It is used as the default list unless a specific field list is provided in the `completion_fields` or `fielddata_fields` parameters.
  One of: `Field` or `Field[]`
- `field_statistics` (boolean · default: true)
  If `true`, the response includes the document count, sum of document frequencies, and sum of total term frequencies.
- `offsets` (boolean · default: true)
  If `true`, the response includes term offsets.
- `payloads` (boolean · default: true)
  If `true`, the response includes term payloads.
- `positions` (boolean · default: true)
  If `true`, the response includes term positions.
- `preference` (string)
  The node or shard the operation should be performed on.
It is random by default.
- `realtime` (boolean · default: true)
  If true, the request is real-time as opposed to near-real-time.
- `routing` (union Routing)
  A custom value used to route operations to a specific shard.
Not allowed when `index.slice.enabled` is `true` for the target index; use `_slice` instead.
  One of: `string` or `string[]`
- `term_statistics` (boolean · default: false)
  If true, the response includes term frequency and document frequency.
- `version` (number VersionNumber)
  If `true`, returns the document version as part of a hit.
- `version_type` (enum VersionType)
  The version type.

Supported values include:
  - `internal`: Use internal versioning that starts at 1 and increments with each update or delete.
  - `external`: Only index the document if the specified version is strictly higher than the version of the stored document or if there is no existing document.
  - `external_gte`: Only index the document if the specified version is equal or higher than the version of the stored document or if there is no existing document.
NOTE: The `external_gte` version type is meant for special use cases and should be used with care.
If used incorrectly, it can result in loss of data.
  Values: `internal`, `external`, `external_gte`

## Request Body

`application/json`

- `docs` ([] Operation) — optional
  An array of existing or artificial documents.
  - `_id` (string Id) — optional
    The ID of the document.
  - `_index` (string IndexName) — optional
    The index of the document.
  - `doc` (object) — optional
    An artificial document (a document not present in the index) for which you want to retrieve term vectors.
  - `fields` (string Fields) — optional
    Comma-separated list or wildcard expressions of fields to include in the statistics.
Used as the default list unless a specific field list is provided in the `completion_fields` or `fielddata_fields` parameters.
  - `field_statistics` (boolean · default: true) — optional
    If `true`, the response includes the document count, sum of document frequencies, and sum of total term frequencies.
  - `filter` ({} Filter) — optional
    Filter terms based on their tf-idf scores.
    - `max_doc_freq` (number) — optional
      Ignore words which occur in more than this many docs.
Defaults to unbounded.
    - `max_num_terms` (number · default: 25) — optional
      The maximum number of terms that must be returned per field.
    - `max_term_freq` (number) — optional
      Ignore words with more than this frequency in the source doc.
It defaults to unbounded.
    - `max_word_length` (number · default: 0) — optional
      The maximum word length above which words will be ignored.
Defaults to unbounded.
    - `min_doc_freq` (number · default: 1) — optional
      Ignore terms which do not occur in at least this many docs.
    - `min_term_freq` (number · default: 1) — optional
      Ignore words with less than this frequency in the source doc.
    - `min_word_length` (number · default: 0) — optional
      The minimum word length below which words will be ignored.
  - `offsets` (boolean · default: true) — optional
    If `true`, the response includes term offsets.
  - `payloads` (boolean · default: true) — optional
    If `true`, the response includes term payloads.
  - `positions` (boolean · default: true) — optional
    If `true`, the response includes term positions.
  - `routing` (string Routing) — optional
    Custom value used to route operations to a specific shard.
  - `term_statistics` (boolean · default: false) — optional
    If true, the response includes term frequency and document frequency.
  - `version` (number VersionNumber) — optional
    If `true`, returns the document version as part of a hit.
  - `version_type` (enum VersionType) — optional
    Specific version type.

Supported values include:
  - `internal`: Use internal versioning that starts at 1 and increments with each update or delete.
  - `external`: Only index the document if the specified version is strictly higher than the version of the stored document or if there is no existing document.
  - `external_gte`: Only index the document if the specified version is equal or higher than the version of the stored document or if there is no existing document.
NOTE: The `external_gte` version type is meant for special use cases and should be used with care.
If used incorrectly, it can result in loss of data.
    Values: `internal`, `external`, `external_gte`
- `ids` ([] string Id) — optional
  A simplified syntax to specify documents by their ID if they're in the same index.

## Response

`application/json`

- `docs` ([] TermVectorsResult)
  - `_id` (string Id)
  - `_index` (string IndexName)
  - `_version` (number VersionNumber)
  - `took` (number)
  - `found` (boolean)
  - `term_vectors` (map string to TermVector)
    Map values ({} TermVector)
    - `field_statistics` ({} FieldStatistics)
      - `doc_count` (number)
      - `sum_doc_freq` (number)
      - `sum_ttf` (number)
    - `terms` (map string to Term)
      Map values ({} Term)
      - `doc_freq` (number)
      - `score` (number)
      - `term_freq` (number)
      - `tokens` ([] Token)
        - `end_offset` (number)
        - `payload` (string)
        - `position` (number)
        - `start_offset` (number)
      - `ttf` (number)
  - `error` ({} ErrorCause)
    - `type` (string)
      The type of error
    - `reason` (union string) — nullable
      A human-readable explanation of the error, in English.
      One of: `string`
    - `stack_trace` (string)
      The server stack trace. Present only if the `error_trace=true` parameter was sent with the request.
    - `caused_by` ({} ErrorCause) — recursive
      Same fields as `error` in `docs`
    - `root_cause` ([] ErrorCause) — recursive
      Same fields as `error` in `docs`
    - `suppressed` ([] ErrorCause) — recursive
      Same fields as `error` in `docs`
## Code Examples

#### Console

```console
POST /my-index-000001/_mtermvectors
{
  "docs": [
      {
        "_id": "2",
        "fields": [
            "message"
        ],
        "term_statistics": true
      },
      {
        "_id": "1"
      }
  ]
}
```

#### JavaScript

```javascript
const response = await client.mtermvectors({
  index: "my-index-000001",
  docs: [
    {
      _id: "2",
      fields: ["message"],
      term_statistics: true,
    },
    {
      _id: "1",
    },
  ],
});
```

#### Python

```python
resp = client.mtermvectors(
    index="my-index-000001",
    docs=[
        {
            "_id": "2",
            "fields": [
                "message"
            ],
            "term_statistics": True
        },
        {
            "_id": "1"
        }
    ],
)
```

#### curl

```curl
curl -X POST "$ELASTICSEARCH_URL/my-index-000001/_mtermvectors" \
  -H "Authorization: ApiKey $ELASTIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "docs": [
      {
        "_id": "2",
        "fields": [
          "message"
        ],
        "term_statistics": true
      },
      {
        "_id": "1"
      }
    ]
  }'
```

#### Java

```java
client.mtermvectors(m -> m
    .docs(List.of(MultiTermVectorsOperation.of(mu -> mu
            .id("2")
            .fields("message")
            .termStatistics(true)
        ),MultiTermVectorsOperation.of(mu -> mu
            .id("1")
        )))
    .index("my-index-000001")
);
```

#### C#

```c#
var response = await client
    .MtermvectorsAsync(d1 => d1
        .Index("my-index-000001")
        .Docs(d2 => d2
            .Fields(x => x.Message)
            .Id("2")
            .TermStatistics(true), d2 => d2
            .Id("1")
        )
    );
```

#### PHP

```php
$resp = $client->mtermvectors([
    "index" => "my-index-000001",
    "body" => [
        "docs" => array(
            [
                "_id" => "2",
                "fields" => array(
                    "message",
                ),
                "term_statistics" => true,
            ],
            [
                "_id" => "1",
            ],
        ),
    ],
]);
```

#### Ruby

```ruby
response = client.mtermvectors(
  index: "my-index-000001",
  body: {
    "docs": [
      {
        "_id": "2",
        "fields": [
          "message"
        ],
        "term_statistics": true
      },
      {
        "_id": "1"
      }
    ]
  }
)
```

