opensearch-docs-cn/_query-dsl/term/exists.md

149 lines
3.0 KiB
Markdown

---
layout: default
title: Exists
parent: Term-level queries
grand_parent: Query DSL
nav_order: 10
---
# Exists query
Use the `exists` query to search for documents that contain a specific field.
An indexed value will not exist for a document field in any of the following cases:
- The field has `"index" : false` specified in the mapping.
- The field in the source JSON is `null` or `[]`.
- The length of the field value exceeds the `ignore_above` setting in the mapping.
- The field value is malformed and `ignore_malformed` is defined in the mapping.
An indexed value will exist for a document field in any of the following cases:
- The value is an array that contains one or more null elements and one or more non-null elements (for example, `["one", null]`).
- The value is an empty string (`""` or `"-"`).
- The value is a custom `null_value`, as defined in the field mapping.
## Example
For example, consider an index that contains the following two documents:
```json
PUT testindex/_doc/1
{
"title": "The wind rises"
}
```
{% include copy-curl.html %}
```json
PUT testindex/_doc/2
{
"title": "Gone with the wind",
"description": "A 1939 American epic historical film"
}
```
{% include copy-curl.html %}
The following query searches for documents that contain the `description` field:
```json
GET testindex/_search
{
"query": {
"exists": {
"field": "description"
}
}
}
```
{% include copy-curl.html %}
The response contains the matching document:
```json
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "testindex",
"_id": "2",
"_score": 1,
"_source": {
"title": "Gone with the wind",
"description": "A 1939 American epic historical film"
}
}
]
}
}
```
## Finding documents with missing indexed values
To find documents with missing indexed values, you can use the `must_not` [Boolean query]({{site.url}}{{site.baseurl}}/query-dsl/compound/bool/) with the inner `exists` query. For example, the following request searches for documents in which the `description` field is missing:
```json
GET testindex/_search
{
"query": {
"bool": {
"must_not": {
"exists": {
"field": "description"
}
}
}
}
}
```
{% include copy-curl.html %}
The response contains the matching document:
```json
{
"took": 19,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0,
"hits": [
{
"_index": "testindex",
"_id": "1",
"_score": 0,
"_source": {
"title": "The wind rises"
}
}
]
}
}
```
## Parameters
The query accepts the name of the field (`<field>`) as a top-level parameter.