Skip to content

Commit 6d874ea

Browse files
Totodorenadav-govariPlataneclaudetrinity-1686a
authored
Merge upstream from 92a526b (#10)
* Fix and optimize CI (quickwit-oss#6176) * Fix rustfmt compatibility with nightly 1.96 (quickwit-oss#6187) Rustfmt 1.9.0 (shipped in nightly 2026-03-01) changed behavior for `imports_granularity = "Module"`: top-level imports are no longer merged. Expand grouped `pub use` re-exports and fix sort order. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * update UI deps and CI workflow (quickwit-oss#6186) * Remove unused React imports from test mocks The automatic JSX transform doesn't require importing React. These unused imports cause biome lint errors. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Update quickwit-ui dependencies Bump minor/patch versions: - @babel/core 7.28.5 → 7.29.0 - @biomejs/biome 2.3.5 → 2.4.4 - @mui/* 7.3.5 → 7.3.8, x-charts/x-date-pickers 8.18.0 → 8.27.x - react/react-dom 19.2.0 → 19.2.4 - react-router 7.12.0 → 7.13.1 - vite 7.2.2 → 7.3.1 - monaco-editor 0.54.0 → 0.55.1 - dayjs 1.11.7 → 1.11.19 - swagger-ui-react 5.30.2 → 5.32.0 - dompurify (resolution) 3.2.4 → 3.3.1 - and other minor bumps Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix stale apt cache in UI CI Cypress step Add apt-get update before installing protobuf-compiler to avoid 404 errors from stale package mirrors on GitHub Actions runners. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Remove unused dependencies react-monaco-editor and web-vitals react-monaco-editor was never imported (project uses @monaco-editor/react). web-vitals and reportWebVitals.ts were dead CRA boilerplate. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Migrate e2e tests from Cypress to Playwright - Replace Cypress with @playwright/test - Create playwright.config.ts with Chromium + baseURL - Translate 3 existing tests + add search page test - Use --only-shell for lighter Chromium install in CI - Exclude e2e/ from Jest via testPathIgnorePatterns Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix biome formatting in homepage.spec.ts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Refactor UI CI: replace matrix with dedicated jobs Split the matrix-based workflow into two explicit jobs: - `checks`: lint, type check, unit tests (Node-only, no Rust/Postgres) - `e2e`: Playwright tests (with Rust build, Postgres, Chromium) This avoids spinning up Postgres and installing Rust for the lint/type/test jobs that don't need them. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Share Rust cache between CI and UI CI workflows Align RUSTFLAGS in ui-ci.yml with ci.yml and add a shared-key to Swatinem/rust-cache so both workflows reuse the same cached artifacts. This avoids a cold Rust build in the UI e2e job when the main CI has already built on the same branch. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * lambda improvements (quickwit-oss#6171) * make lambda support optional * map lambda error to actual variant * retry rate limited lambdas * Add ES-compatible endpoints for Trino connector support (quickwit-oss#6168) * WIP * Add `--debug` option to REST API tests runner * Claude WIP * Support Trino ES connector's bool query and range query extensions - Accept `adjust_pure_negative` field in bool queries (emitted by ES Java BoolQueryBuilder, blocks all WHERE predicate pushdown without this fix) - Accept legacy `from`/`to`/`include_lower`/`include_upper` fields in range queries (used by ES Java RangeQueryBuilder instead of standard gt/gte/lt/lte) Co-authored-by: Cursor <cursoragent@cursor.com> * Support wildcard and multi-index patterns in _mappings endpoint The _mapping(s) endpoint now resolves wildcard (`*`) and comma-separated index patterns against the metastore, matching the behavior of real Elasticsearch. This enables Trino's wildcard table feature (e.g. `SELECT * FROM "stack*"`), which calls `GET /stack*/_mappings` to discover schemas across matching indices. Co-authored-by: Cursor <cursoragent@cursor.com> * Extract inline warp filters into filter.rs and revert debug additions Move the inline warp path filters for _aliases and _mappings handlers into dedicated functions in filter.rs, consistent with all other ES compat endpoints. Revert the --debug CLI flag added to run_tests.py as per-step debug: true in YAML files is sufficient. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix clippy collapsible_if and rustfmt formatting Collapse nested if-let + if into if-let chains in range query conversion logic. Fix line length and import ordering for rustfmt. Co-authored-by: Cursor <cursoragent@cursor.com> * Address PR quickwit-oss#6168 review comments - bool_query: rename adjust_pure_negative to _adjust_pure_negative with IgnoredAny to convey the field is accepted but unused - bool_query: remove unused let binding in test - range_query: rename json_number to into_json_number, remove doc comments on legacy fields, uncomment from/to conversion logic - cat_indices: add unit test for s parameter validation - mappings: add comprehensive tests for build_properties and merge_dynamic_fields - rest_handler: use advertise_addr for publish_address in _nodes/http and fix es_compat_delete_scroll_handler formatting Made-with: Cursor * bool_query: derive PartialEq instead of manual impl IgnoredAny implements PartialEq (but not Eq), so PartialEq can be derived. Only Eq needs a manual impl since IgnoredAny is a unit struct. Made-with: Cursor * Fix rustfmt nightly formatting for es_compat_delete_scroll_handler Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Adrien Guillo <adrien.guillo@datadoghq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * Fix typo in metrics name in metrics.md (quickwit-oss#6141) * Redact sensitive information in developer API debug output. Closes quickwit-oss#6132 (quickwit-oss#6191) Co-authored-by: Nicolas Coiffier <n.coiffier@celonis.com> * follow aws hints for lambda retries (quickwit-oss#6195) * feat(obs): export internal logs with otlp exporter (quickwit-oss#6142) * feat(obs): export obs as otel * fix: typo * fix: dd license tool * Fix e2e tests: navigate to /ui instead of / (quickwit-oss#6188) Navigate directly to `/ui` instead of relying on the root redirect, making the tests resilient to changes in the root redirect target. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * feat(es-compat): add index_filter support for field capabilities API (quickwit-oss#6102) * feat(es-compat): add index_filter support for field capabilities API Implements index_filter parameter support for the ES-compatible _field_caps endpoint, allowing users to filter field capabilities based on document queries. Changes: - Add query_ast field to ListFieldsRequest and LeafListFieldsRequest protos - Parse index_filter from ES Query DSL and convert to QueryAst - Pass query_ast through to leaf nodes for future filtering support - Add unit tests for index_filter parsing - Add REST API integration tests Note: This implementation accepts and parses the index_filter parameter for API compatibility. Full split-level document filtering will be added as a follow-up enhancement. Closes quickwit-oss#5693 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> Signed-off-by: ruo <ruoliu.dev@gmail.com> * feat(es-compat): implement split-level filtering for field_caps index_filter Address PR review comments for index_filter support in _field_caps API: - Extract `parse_index_filter_to_query_ast()` function with clean prototype - Implement split-level filtering via `split_matches_query()` using lightweight `query.count()` execution (no document materialization) - Add proper async handling with ByteRangeCache, warmup(), and run_cpu_intensive() for Quickwit's async-only storage - Add metastore-level pruning: - Tag extraction via `extract_tags_from_query()` - Time range extraction via `refine_start_end_timestamp_from_ast()` - Build DocMapper only when query_ast is provided (no overhead for common path without index_filter) - Fix REST API tests: use `json:` key (not `json_body:`), use lowercase term values to match tokenizer behavior - Update tests to run against both quickwit and elasticsearch engines Two-level filtering now implemented: 1. Metastore level: tags + time range from query AST 2. Split level: lightweight query execution for accurate filtering Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> Signed-off-by: ruo <ruoliu.dev@gmail.com> * refactor(es-compat): use best-effort metadata filtering for index_filter Remove heavy split-level query execution for field_caps index_filter. The implementation now aligns with ES's "best-effort" approach that uses metadata-level filtering only (time range, tags) instead of opening splits and executing queries. Changes: - Remove split_matches_query function (no longer opens splits) - Remove query_ast and doc_mapper from LeafListFieldsRequest proto - Keep metadata-level filtering in root_list_fields: - Time range extraction from query AST - Tag-based split pruning - Simplify leaf_list_fields to just return fields from all splits This matches ES semantics: "filtering is done on a best-effort basis... this API may return an index even if the provided filter matches no document." Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> Signed-off-by: ruo <ruoliu.dev@gmail.com> * fix(es-compat): reject empty index_filter to match ES behavior - Remove empty object {} handling in parse_index_filter_to_query_ast - ES rejects empty index_filter with 400, now QW does too - Add tag_fields config and tag-based index_filter test - Update unit and integration tests accordingly Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> Signed-off-by: ruo <ruoliu.dev@gmail.com> * Added ref doc for the new functionality. * cargo fmt fix --------- Signed-off-by: ruo <ruoliu.dev@gmail.com> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> Co-authored-by: fulmicoton <paul.masurel@datadoghq.com> * Rebalance shards when ingester status changes (quickwit-oss#6185) * Gossip ingester status * Update ingester pool when status changes * Rebalance shards when IngesterStatus changes * Fix timeout_after being 0, causing to not wait for ingester status propagation * Also refresh the ingester pool when an ingester status has changed * Add integration test * Make setup_ingester_pool and setup_indexer_pool a bit more uniform * make fix * Instrument rebalance_shards calls * Unified ClusterNode::for_test_with_ingester_status into ClusterNode::for_test * Remove duplicated readiness check on ingester status * Refactor the ClusterSandbox to add the possibility to dynamically add a node to a running cluster * Ensure the shard is created on the indexer that we shutdown in test_graceful_shutdown_no_data_loss integration test * Don't trigger a rebalance for Add(ready, IngesterStatus::Initializing); improve comments and tests for it * Don't refresh the indexer pool when an indexer update its ingester status * The ingester_pool should contains all ingesters, not only the ready ones * Debug message when no shards to rebalance --------- Co-authored-by: Adrien Guillo <adrien.guillo@datadoghq.com> --------- Signed-off-by: ruo <ruoliu.dev@gmail.com> Co-authored-by: nadav-govari <nadav.govari@datadoghq.com> Co-authored-by: Arthur <arthur.brongniart@datadoghq.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: trinity-1686a <trinity.pointard@datadoghq.com> Co-authored-by: congx4 <cong.xie@datadoghq.com> Co-authored-by: Adrien Guillo <adrien.guillo@datadoghq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Nicolas Coiffier <n.coiffier@celonis.com> Co-authored-by: Oleksii Syniakov <1282756+osyniakov@users.noreply.github.com> Co-authored-by: rlizzy <ruoliu.illinois@gmail.com> Co-authored-by: fulmicoton <paul.masurel@datadoghq.com>
1 parent 7b35b41 commit 6d874ea

81 files changed

Lines changed: 4933 additions & 2762 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,24 @@ jobs:
5555
- name: Cleanup Disk Space
5656
run: |
5757
df -h
58-
sudo rm -rf /usr/share/dotnet
59-
sudo rm -rf /usr/local/lib/android
60-
sudo rm -rf /usr/share/swift
61-
sudo rm -rf /usr/local/.ghcup
62-
sudo rm -rf /opt/hostedtoolcache/CodeQL
63-
df -h
58+
59+
if [ "$(df -BG / | awk 'NR==2 {gsub("G","",$4); print $4}')" -lt 30 ]; then
60+
echo "Less than 30GiB available. Running cleanup..."
61+
sudo rm -rf /usr/share/dotnet
62+
sudo rm -rf /usr/local/lib/android
63+
sudo rm -rf /usr/share/swift
64+
sudo rm -rf /usr/local/.ghcup
65+
sudo rm -rf /opt/hostedtoolcache/CodeQL
66+
df -h
67+
else
68+
echo "30GiB or more available. Skipping cleanup."
69+
fi
6470
6571
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
6672
- name: Install Ubuntu packages
67-
run: sudo apt-get -y install protobuf-compiler
73+
run: |
74+
sudo apt-get update
75+
sudo apt-get -y install protobuf-compiler
6876
- uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v.6.1.0
6977
with:
7078
python-version: '3.11'
@@ -88,9 +96,10 @@ jobs:
8896
if: steps.modified.outputs.rust_src == 'true'
8997
with:
9098
workspaces: "./quickwit -> target"
99+
shared-key: "quickwit-cargo"
91100
- name: Install nextest
92101
if: always() && steps.modified.outputs.rust_src == 'true'
93-
uses: taiki-e/cache-cargo-install-action@34ce5120836e5f9f1508d8713d7fdea0e8facd6f # v3.0.1
102+
uses: taiki-e/install-action@aba36d755ec7ca22d38b12111787c26115943952
94103
with:
95104
tool: cargo-nextest
96105
- name: cargo build
@@ -132,7 +141,9 @@ jobs:
132141
- .github/workflows/ci.yml
133142
- name: Install Ubuntu packages
134143
if: always() && steps.modified.outputs.rust_src == 'true'
135-
run: sudo apt-get -y install protobuf-compiler
144+
run: |
145+
sudo apt-get update
146+
sudo apt-get -y install protobuf-compiler
136147
- name: Setup nightly Rust Toolchain (for rustfmt)
137148
if: steps.modified.outputs.rust_src == 'true'
138149
uses: dtolnay/rust-toolchain@f7ccc83f9ed1e5b9c81d8a67d7ad1a747e22a561 # master
@@ -149,6 +160,7 @@ jobs:
149160
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
150161
with:
151162
workspaces: "./quickwit -> target"
163+
shared-key: "quickwit-cargo"
152164
- name: Install cargo deny
153165
if: always() && steps.modified.outputs.rust_src == 'true'
154166
uses: taiki-e/cache-cargo-install-action@34ce5120836e5f9f1508d8713d7fdea0e8facd6f # v3.0.1

.github/workflows/ui-ci.yml

Lines changed: 46 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,32 +18,36 @@ permissions:
1818
contents: read
1919

2020
jobs:
21-
tests:
22-
name: ${{ matrix.task.name }}
21+
checks:
22+
name: Lint, type check & unit tests
23+
runs-on: ubuntu-latest
24+
steps:
25+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
26+
- uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
27+
with:
28+
node-version: 24
29+
cache: "yarn"
30+
cache-dependency-path: quickwit/quickwit-ui/yarn.lock
31+
- name: Install JS dependencies
32+
run: yarn --cwd quickwit-ui install
33+
working-directory: ./quickwit
34+
- name: Lint
35+
run: yarn --cwd quickwit-ui lint
36+
working-directory: ./quickwit
37+
- name: Type check
38+
run: yarn --cwd quickwit-ui type
39+
working-directory: ./quickwit
40+
- name: Unit tests
41+
run: yarn --cwd quickwit-ui test
42+
working-directory: ./quickwit
43+
44+
e2e:
45+
name: Playwright e2e
2346
runs-on: ubuntu-latest
2447
permissions:
2548
contents: read
2649
actions: write
27-
strategy:
28-
fail-fast: false
29-
matrix:
30-
task:
31-
- name: Cypress run
32-
command: |
33-
sudo apt-get -y install protobuf-compiler
34-
CI=false yarn --cwd quickwit-ui build
35-
RUSTFLAGS="--cfg tokio_unstable" cargo build --features=postgres
36-
mkdir qwdata
37-
RUSTFLAGS="--cfg tokio_unstable" cargo run --features=postgres -- run --service searcher --service metastore --config ../config/quickwit.yaml &
38-
yarn --cwd quickwit-ui cypress run
39-
- name: Lint
40-
command: yarn --cwd quickwit-ui lint
41-
- name: Check type consistency
42-
command: yarn --cwd quickwit-ui type
43-
- name: Unit Test
44-
command: yarn --cwd quickwit-ui test
4550
services:
46-
# PostgreSQL service container
4751
postgres:
4852
image: postgres:latest
4953
ports:
@@ -52,7 +56,6 @@ jobs:
5256
POSTGRES_USER: quickwit-dev
5357
POSTGRES_PASSWORD: quickwit-dev
5458
POSTGRES_DB: quickwit-metastore-dev
55-
# Set health checks to wait until postgres has started
5659
options: >-
5760
--health-cmd pg_isready
5861
--health-interval 10s
@@ -61,7 +64,7 @@ jobs:
6164
env:
6265
CARGO_INCREMENTAL: 0
6366
RUST_BACKTRACE: 1
64-
RUSTFLAGS: -Dwarnings -C lto=off
67+
RUSTFLAGS: -Dwarnings --cfg tokio_unstable
6568
RUSTDOCFLAGS: -Dwarnings -Arustdoc::private_intra_doc_links
6669
QW_TEST_DATABASE_URL: postgres://quickwit-dev:quickwit-dev@postgres:5432/quickwit-metastore-dev
6770
steps:
@@ -75,14 +78,28 @@ jobs:
7578
uses: dtolnay/rust-toolchain@f7ccc83f9ed1e5b9c81d8a67d7ad1a747e22a561 # master
7679
with:
7780
toolchain: stable
78-
- name: Install JS dependencies
79-
run: yarn --cwd quickwit-ui install
80-
working-directory: ./quickwit
8181
- name: Setup Rust cache
82-
if: matrix.task.name == 'Cypress run'
8382
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
8483
with:
8584
workspaces: "./quickwit -> target"
86-
- name: ${{ matrix.task.name }}
87-
run: ${{ matrix.task.command }}
85+
shared-key: "quickwit-cargo"
86+
- name: Install JS dependencies
87+
run: yarn --cwd quickwit-ui install
88+
working-directory: ./quickwit
89+
- name: Install Playwright browsers
90+
run: npx playwright install chromium --with-deps --only-shell
91+
working-directory: ./quickwit/quickwit-ui
92+
- name: Build UI
93+
run: CI=false yarn --cwd quickwit-ui build
94+
working-directory: ./quickwit
95+
- name: Build Quickwit
96+
run: |
97+
sudo apt-get update && sudo apt-get -y install protobuf-compiler
98+
cargo build --features=postgres
99+
working-directory: ./quickwit
100+
- name: Run e2e tests
101+
run: |
102+
mkdir -p qwdata
103+
cargo run --features=postgres -- run --service searcher --service metastore --config ../config/quickwit.yaml &
104+
yarn --cwd quickwit-ui e2e-test
88105
working-directory: ./quickwit

LICENSE-3rdparty.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@ oneshot,https://github.com/faern/oneshot,MIT OR Apache-2.0,Linus Färnstrand <fa
281281
oorandom,https://hg.sr.ht/~icefox/oorandom,MIT,Simon Heath <icefox@dreamquest.io>
282282
openssl-probe,https://github.com/alexcrichton/openssl-probe,MIT OR Apache-2.0,Alex Crichton <alex@alexcrichton.com>
283283
opentelemetry,https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry,Apache-2.0,The opentelemetry Authors
284+
opentelemetry-appender-tracing,https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-appender-tracing,Apache-2.0,The opentelemetry-appender-tracing Authors
284285
opentelemetry-http,https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-http,Apache-2.0,The opentelemetry-http Authors
285286
opentelemetry-otlp,https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-otlp,Apache-2.0,The opentelemetry-otlp Authors
286287
opentelemetry-proto,https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-proto,Apache-2.0,The opentelemetry-proto Authors

docs/reference/es_compatible_api.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,79 @@ Example response:
365365

366366
[HTTP accept header]: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
367367

368+
369+
### `_field_caps` &nbsp; Field capabilities API
370+
371+
```
372+
GET api/v1/_elastic/<index>/_field_caps
373+
```
374+
```
375+
POST api/v1/_elastic/<index>/_field_caps
376+
```
377+
```
378+
GET api/v1/_elastic/_field_caps
379+
```
380+
```
381+
POST api/v1/_elastic/_field_caps
382+
```
383+
384+
The [field capabilities API](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-field-caps.html) returns information about the capabilities of fields among multiple indices.
385+
386+
#### Supported Query string parameters
387+
388+
| Variable | Type | Description | Default value |
389+
| --------------------- | ---------- | ------------------------------------------------------------------------------ | ------------- |
390+
| `fields` | `String` | Comma-separated list of fields to retrieve capabilities for. Supports wildcards (`*`). | (Optional) |
391+
| `allow_no_indices` | `Boolean` | If `true`, missing or closed indices are not an error. | (Optional) |
392+
| `expand_wildcards` | `String` | Controls what kind of indices that wildcard patterns can match. | (Optional) |
393+
| `ignore_unavailable` | `Boolean` | If `true`, unavailable indices are ignored. | (Optional) |
394+
| `start_timestamp` | `Integer` | *(Quickwit-specific)* If set, restricts splits to documents with a timestamp range start >= `start_timestamp` (seconds since epoch). | (Optional) |
395+
| `end_timestamp` | `Integer` | *(Quickwit-specific)* If set, restricts splits to documents with a timestamp range end < `end_timestamp` (seconds since epoch). | (Optional) |
396+
397+
#### Supported Request Body parameters
398+
399+
| Variable | Type | Description | Default value |
400+
| ------------------ | ------------- | --------------------------------------------------------------------------- | ------------- |
401+
| `index_filter` | `Json object` | A query to filter indices. If provided, only fields from indices that can potentially match the filter are returned. See [index_filter](#index_filter). | (Optional) |
402+
| `runtime_mappings` | `Json object` | Accepted but not supported. | (Optional) |
403+
404+
#### `index_filter`
405+
406+
The `index_filter` parameter allows you to filter which indices contribute to the field capabilities response. When provided, Quickwit uses the filter query to prune indices (splits) that cannot match the filter, and only returns field capabilities for the remaining ones.
407+
408+
Like Elasticsearch, this is a **best-effort** approach: Quickwit may return field capabilities from indices that do not actually contain any matching documents. In Quickwit, the filtering is limited to the existing split-pruning based on metadata:
409+
410+
- **Time pruning**: Range queries on the timestamp field can eliminate splits whose time range does not overlap with the filter.
411+
- **Tag pruning**: Term queries on [tag fields](../configuration/index-config.md#tag-fields) can eliminate splits that do not contain the requested tag value.
412+
413+
Other filter types (e.g. full-text queries or term queries on non-tag fields) are accepted but will not prune any splits — all indices will be returned as if no filter was specified. In particular, Quickwit does not check whether terms are present in the term dictionary.
414+
415+
#### Request Body example
416+
417+
```json
418+
{
419+
"index_filter": {
420+
"range": {
421+
"timestamp": {
422+
"gte": "2024-01-01T00:00:00Z",
423+
"lt": "2024-02-01T00:00:00Z"
424+
}
425+
}
426+
}
427+
}
428+
```
429+
430+
```json
431+
{
432+
"index_filter": {
433+
"term": {
434+
"status": "active"
435+
}
436+
}
437+
}
438+
```
439+
440+
368441
## Query DSL
369442

370443
[Elasticsearch Query DSL reference](https://www.elastic.co/guide/en/elasticsearch/reference/8.8/query-dsl.html).

docs/reference/metrics.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ Currently Quickwit exposes metrics for three caches: `fastfields`, `shortlived`,
4242

4343
| Namespace | Metric Name | Description | Type |
4444
| --------- | ----------- | ----------- | ---- |
45-
| `quickwit_ingest` | `ingested_num_bytes` | Total size of the docs ingested in bytes | `counter` |
46-
| `quickwit_ingest` | `ingested_num_docs` | Number of docs received to be ingested | `counter` |
45+
| `quickwit_ingest` | `docs_bytes_total` | Total size of the docs ingested, measured in ingester's leader, after validation and before persistence/replication | `counter` |
46+
| `quickwit_ingest` | `docs_total` | Total number of the docs ingested, measured in ingester's leader, after validation and before persistence/replication | `counter` |
4747
| `quickwit_ingest` | `queue_count` | Number of queues currently active | `counter` |
4848

4949
## Metastore Metrics

quickwit/Cargo.lock

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

quickwit/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ oneshot = "0.1"
164164
openssl = { version = "0.10", default-features = false }
165165
openssl-probe = "0.1"
166166
opentelemetry = "0.31"
167+
opentelemetry-appender-tracing = "0.31"
167168
opentelemetry_sdk = { version = "0.31", features = ["rt-tokio"] }
168169
opentelemetry-otlp = { version = "0.31", features = ["grpc-tonic"] }
169170
ouroboros = "0.18"

quickwit/quickwit-cli/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ numfmt = { workspace = true }
3737
once_cell = { workspace = true }
3838
openssl-probe = { workspace = true, optional = true }
3939
opentelemetry = { workspace = true }
40+
opentelemetry-appender-tracing = { workspace = true }
4041
opentelemetry_sdk = { workspace = true }
4142
opentelemetry-otlp = { workspace = true }
4243
reqwest = { workspace = true }
@@ -101,6 +102,7 @@ release-feature-set = [
101102
"quickwit-indexing/pulsar",
102103
"quickwit-indexing/sqs",
103104
"quickwit-indexing/vrl",
105+
"quickwit-serve/lambda",
104106
"quickwit-storage/azure",
105107
"quickwit-storage/gcs",
106108
"quickwit-metastore/postgres",
@@ -114,6 +116,7 @@ release-feature-vendored-set = [
114116
"quickwit-indexing/sqs",
115117
"quickwit-indexing/vrl",
116118
"quickwit-indexing/vendored-kafka",
119+
"quickwit-serve/lambda",
117120
"quickwit-storage/azure",
118121
"quickwit-storage/gcs",
119122
"quickwit-metastore/postgres",
@@ -126,6 +129,7 @@ release-macos-feature-vendored-set = [
126129
"quickwit-indexing/sqs",
127130
"quickwit-indexing/vrl",
128131
"quickwit-indexing/vendored-kafka-macos",
132+
"quickwit-serve/lambda",
129133
"quickwit-storage/azure",
130134
"quickwit-storage/gcs",
131135
"quickwit-metastore/postgres",

0 commit comments

Comments
 (0)