Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions docs/changelog/136426.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
summary: "Docs: clarify ESQL time span alias rules (month m/mm vs minute min/mi/n), note case-insensitive matching and optional whitespace, and add unambiguous examples."
area: ES|QL
type: docs
issues:
- 135552
pr: 136426
17 changes: 15 additions & 2 deletions docs/reference/query-languages/esql/esql-time-spans.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,17 +110,30 @@ POST /_query
```


### Duration units and matching rules

Duration literals can be written with or without a space between the number and the unit
(for example, `1m` is equivalent to `1 m`). Matching is **case-insensitive**.

## Supported temporal units [esql-time-spans-table]

| Temporal Units | Valid Abbreviations |
| --- | --- |
| year | y, yr, years |
| quarter | q, quarters |
| month | mo, months |
| month | m, mm, month, months |
| week | w, weeks |
| day | d, days |
| hour | h, hours |
| minute | min, minutes |
| minute | min, mi, n, minute, minutes |
| second | s, sec, seconds |
| millisecond | ms, milliseconds |

**Examples**

```esql
FROM t | WHERE date_col > NOW() - 1m // month (same as: 1 m)
FROM t | WHERE ts > NOW() - 1mi // minute
FROM t | WHERE ts > NOW() - 1n // minute
FROM t | WHERE ts > NOW() - 500ms // millisecond
```
15 changes: 9 additions & 6 deletions muted-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -411,9 +411,6 @@ tests:
- class: org.elasticsearch.xpack.search.CrossClusterAsyncSearchIT
method: testCancelViaExpirationOnRemoteResultsWithMinimizeRoundtrips
issue: https://github.com/elastic/elasticsearch/issues/127302
- class: org.elasticsearch.xpack.esql.action.CrossClusterAsyncQueryStopIT
method: testStopQueryLocal
issue: https://github.com/elastic/elasticsearch/issues/133481
- class: org.elasticsearch.xpack.esql.inference.rerank.RerankOperatorTests
method: testSimpleCircuitBreaking
issue: https://github.com/elastic/elasticsearch/issues/133619
Expand Down Expand Up @@ -567,9 +564,6 @@ tests:
- class: org.elasticsearch.xpack.esql.action.EsqlActionBreakerIT
method: testTopNPushedToLuceneOnSortedIndex
issue: https://github.com/elastic/elasticsearch/issues/135939
- class: org.elasticsearch.xpack.esql.action.CrossClusterAsyncQueryStopIT
method: testStopQueryInlineStats
issue: https://github.com/elastic/elasticsearch/issues/135032
- class: org.elasticsearch.xpack.ml.integration.RegressionIT
method: testAliasFields
issue: https://github.com/elastic/elasticsearch/issues/135996
Expand Down Expand Up @@ -663,6 +657,15 @@ tests:
- class: org.elasticsearch.TransportVersionTests
method: testVersionComparison
issue: https://github.com/elastic/elasticsearch/issues/136410
- class: org.elasticsearch.xpack.restart.FullClusterRestartIT
method: testRollupAfterRestart {cluster=UPGRADED}
issue: https://github.com/elastic/elasticsearch/issues/136437
- class: org.elasticsearch.cluster.coordination.NodeJoiningIT
method: testNodeTriesToJoinClusterAndThenSameMasterIsElected
issue: https://github.com/elastic/elasticsearch/issues/136332
- class: org.elasticsearch.test.rest.yaml.RcsCcsCommonYamlTestSuiteIT
method: test {p0=search.vectors/200_dense_vector_docvalue_fields/Enable docvalue_fields parameter for dense_vector fields}
issue: https://github.com/elastic/elasticsearch/issues/136443

# Examples:
#
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{
"indices.put_sample_configuration": {
"documentation": {
"url": "https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-indices-put-sample-configuration",
"description": "Configure sampling for an index or data stream"
},
"stability": "experimental",
"visibility": "public",
"headers": {
"accept": [
"application/json"
],
"content_type": [
"application/json"
]
},
"url": {
"paths": [
{
"path": "/{index}/_sample/config",
"methods": [
"PUT"
],
"parts": {
"index": {
"type": "string",
"description": "The name of a data stream or index"
}
}
}
]
},
"params": {
"master_timeout": {
"type": "time",
"description": "Timeout for connection to master node"
},
"timeout": {
"type": "time",
"description": "Timeout for the request"
}
},
"body": {
"description": "The sampling configuration",
"required": true
}
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
---
setup:
- requires:
cluster_features: [ "random_sampling" ]
reason: requires feature 'random_sampling' to get random samples

---
teardown:
- do:
indices.delete:
index: "*test*"
ignore_unavailable: true
allow_no_indices: true

---
"Test Put sampling configuration with JSON body":
- do:
indices.create:
index: test-index
body:
settings:
number_of_shards: 1

- do:
indices.put_sample_configuration:
index: test-index
body:
rate: 0.5
max_samples: 100
max_size: "10mb"
time_to_live: "1h"

- match: { acknowledged: true }

---
"Put sampling configuration with condition":
- do:
indices.create:
index: test-condition-index

- do:
indices.put_sample_configuration:
index: test-condition-index
body:
rate: 1.0
max_samples: 50
if: "ctx?.field == 'sample_me'"

- match: { acknowledged: true }

---
"Put sampling configuration with minimal parameters":
- do:
indices.create:
index: test-minimal-index

- do:
indices.put_sample_configuration:
index: test-minimal-index
body:
rate: 0.1

- match: { acknowledged: true }

---
"Put sampling configuration overwrites existing":
- do:
indices.create:
index: test-overwrite-index

# First configuration
- do:
indices.put_sample_configuration:
index: test-overwrite-index
body:
rate: 0.3
max_samples: 25

- match: { acknowledged: true }

# Overwrite with new configuration
- do:
indices.put_sample_configuration:
index: test-overwrite-index
body:
rate: 0.8
max_samples: 75
max_size: "5mb"

- match: { acknowledged: true }

---
"Put sampling configuration for non-existent index":
- do:
catch: missing
indices.put_sample_configuration:
index: non-existent-index
body:
rate: 0.6
max_samples: 150

---
"Put sampling configuration with timeout parameters":
- do:
indices.create:
index: test-timeout-index

- do:
indices.put_sample_configuration:
index: test-timeout-index
master_timeout: "30s"
timeout: "10s"
body:
rate: 0.4
max_samples: 80

- match: { acknowledged: true }

---
"Put sampling configuration with invalid rate fails":
- do:
indices.create:
index: test-invalid-rate-index

- do:
catch: bad_request
indices.put_sample_configuration:
index: test-invalid-rate-index
body:
rate: 1.5 # Invalid rate > 1.0
max_samples: 100

---
"Put sampling configuration with missing rate fails":
- do:
indices.create:
index: test-missing-rate-index

- do:
catch: bad_request
indices.put_sample_configuration:
index: test-missing-rate-index
body:
max_samples: 100 # Missing required rate parameter

---
"Put sampling configuration with human readable values":
- do:
indices.create:
index: test-human-readable-index

- do:
indices.put_sample_configuration:
index: test-human-readable-index
body:
rate: ".05"
max_samples: 1000
max_size: "10mb"
time_to_live: "1d"

- match: { acknowledged: true }

---
"Put sampling configuration rejects multiple indices":
- do:
indices.create:
index: test-multi-index-1
body:
settings:
number_of_shards: 1

- do:
indices.create:
index: test-multi-index-2
body:
settings:
number_of_shards: 1

- do:
catch: bad_request
indices.put_sample_configuration:
index: "test-multi-index-1,test-multi-index-2"
body:
rate: 0.5
max_samples: 100

- match: { error.type: "action_request_validation_exception" }

---
"Put sampling configuration rejects wildcard matching multiple indices":
- do:
indices.create:
index: wildcard-test-1
body:
settings:
number_of_shards: 1

- do:
indices.create:
index: wildcard-test-2
body:
settings:
number_of_shards: 1

- do:
catch: missing
indices.put_sample_configuration:
index: "wildcard-test-*"
body:
rate: 0.3
max_samples: 50
Loading