191 Commits
Author SHA1 Message Date
David Yaffe 84f9324395 fix(Security): Apply patch update 0.9.2 to main (#6907)
* Restrict Kafka client params that execute commands or load libraries

Kafka source configs can be submitted through the REST API, so they should not be able to make librdkafka run shell commands or load native libraries. Kerberos ticket refresh is now opt-in through the operator-set `QW_KAFKA_KINIT_CMD` environment variable.

* Bump tantivy to e1acb3e

* Bump version to 0.9.2

* Add security note to REST API docs

* Treat an empty QW_KAFKA_KINIT_CMD as unset

An empty or whitespace-only value now behaves like an unset variable and keeps Kerberos ticket refresh disabled.
2026-10-19 15:03:05 +00:00
François Massot d18e34ee07 Serve MCP endpoint at /mcp instead of /api/v1/mcp (#6863)
MCP negotiates its protocol revision in-band (initialize and the
MCP-Protocol-Version header), so nesting it under the versioned REST API
adds no value. /mcp matches the convention used by MCP clients and servers.
2026-10-02 14:16:16 +00:00
François Massot 7a0df70a42 Add read-only MCP endpoint backed by Elasticsearch API (#6858) 2026-10-01 16:26:19 +02:00
PSeitz 7782e2f9fb remove component:shortlived metric cache counter (#6675)
* remove component:shortlived metric cache counter

* update docs
2026-08-11 10:56:21 +02:00
Recoordinate c56125284f docs: fix typos in upgrades and query-language docs (#6671) 2026-08-09 03:03:33 +02:00
PSeitz-ddandPascal Seitz fb99535bcc Categorize split search errors in outcome metrics (#6663)
Add bounded error labels for reader creation, warmup, Tantivy search,
and panic failures. Expose these categories in documentation and Grafana.

Co-authored-by: Pascal Seitz <pascal.seitz@gmail.com>
2026-08-06 14:11:30 +00:00
PSeitz e3bed43de5 split search failures in outcome metrics (#6662)
Classify storage, warmup, Tantivy execution failures, and panics as
category="error" rather than cancellation phases.
2026-08-06 10:23:16 +00:00
Luca CominardiandCursor f49ce1ee44 Add global metrics labels env var (#6649)
* Add global metrics labels env var

Co-authored-by: Cursor <cursoragent@cursor.com>

* Name metrics label separators

Co-authored-by: Cursor <cursoragent@cursor.com>

* Rename metrics labels env var constant

Co-authored-by: Cursor <cursoragent@cursor.com>

* Move metrics labels docs to CLI reference

Co-authored-by: Cursor <cursoragent@cursor.com>

* Validate global metrics labels during telemetry startup

Reject malformed label configuration before installing recorders so metrics cannot start with silently incomplete global labels.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-03 10:19:13 +00:00
Arthur 73e4c521ca Emit metastore max connections metric (#6643) 2026-07-30 17:08:33 +02:00
François MassotandClaude Opus 4.7 5a9739fcc1 Release 0.9.0 (#6316)
* docs(release): CHANGELOG and upgrade guide for 0.9.0

- Flesh out the CHANGELOG [0.9.0] section with the ~400 user-facing
  PRs merged since v0.8.2: new Breaking / Migration block, ingest v2
  as default, AWS Lambda search offloading (distinct from the removed
  standalone Lambda mode), Jaeger v2, Trino compat, composite
  aggregation, and many small fixes/changes.
- Add docs/get-started/upgrade.md covering the 0.8.x -> 0.9 migration
  path: ingest v2 default, `rest_listen_port` deprecation, stemming
  behind `multilang`, metastore migration, rollback.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(release): bump workspace version to 0.9.0

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(release): refresh 0.9 release notes

* docs: fix tag pruning link

* docs: sync quickstart index config

* docs: fix 0.9 tutorial workflows

* chore(release): bump Quickwit UI version to 0.9.0

* docs: correct 0.9 tutorial behavior

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-07-25 16:19:10 +02:00
François MassotandPaul Masurel 934bab3088 Metastore inflight default (#6591)
* Tune PostgreSQL metastore in-flight requests

* Simplify metastore in-flight sizing change

---------

Co-authored-by: Paul Masurel <paul@quickwit.io>
2026-07-18 18:24:29 +00:00
Adrien Guillo a2dd31c1d2 Remove telemetry (#6431)
* Remove telemetry

* Update LICENSE-3rdparty.csv
2026-05-15 10:47:54 -04:00
Nicolas Coiffier 44c439f7f3 Fix typos in metrics.md (#6304) 2026-04-14 11:07:33 -04:00
1ff255cdf7 feat(es-compat): add index_filter support for field capabilities API (#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 #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>
2026-03-10 09:29:08 +00:00
Nicolas Coiffier 137621a507 Fix typo in metrics name in metrics.md (#6141) 2026-03-05 10:55:19 +01:00
Raphaël Cohen b6f853fbd2 feat: Add case_insensitive param to some Elastic DSL queries (#6005)
* feat: Add case_insensitive param to some Elastic DSL queries

Signed-off-by: Darkheir <raphael.cohen@sekoia.io>

* Apply PR review sugestion

Signed-off-by: Darkheir <raphael.cohen@sekoia.io>

---------

Signed-off-by: Darkheir <raphael.cohen@sekoia.io>
2025-12-08 09:50:05 +01:00
Raphaël Cohen bfed5c65d1 feat: Prefix and Wildcard in Elastic DSL (#6000)
* feat: Prefix and Wildcard in Elastic DSL

Signed-off-by: Darkheir <raphael.cohen@sekoia.io>

* chore: Add licence header

Signed-off-by: Darkheir <raphael.cohen@sekoia.io>

* feat: Add integration tests

Signed-off-by: Darkheir <raphael.cohen@sekoia.io>

* feat: Add support for short request format

Signed-off-by: Darkheir <raphael.cohen@sekoia.io>

* Apply PR review sugestion

Signed-off-by: Darkheir <raphael.cohen@sekoia.io>

---------

Signed-off-by: Darkheir <raphael.cohen@sekoia.io>
2025-12-03 09:01:11 +00:00
Adrien Guillo 4c6a293fe7 Remove search stream endpoint (#5886) 2025-09-23 15:12:12 +02:00
kilavvy 16ab39018f Fix Typos in Documentation and Comments (#5798)
* Update updating-mapper.md

* Update lib.rs
2025-06-17 08:16:18 +00:00
Remi Dettai 077d747a2a Clarify how to perform exact match searches in Quickwit (#5797)
* Add test using range to emulate keyword query

* Add docs

* Fix prefix test case
2025-06-12 11:54:04 +00:00
trinity-1686a dc54c8ed60 support creating index on update if missing (#5773)
* add support for creating missing index on update

* add create-on-update to cli

* add test

* optionally create source on update

* add documentation
2025-06-06 11:03:12 +02:00
omahs 61d878cd69 Fix typos (#5766) 2025-05-12 15:54:23 +02:00
Remi Dettai 7dabbe5fa5 Fix index update endpoint panic when index_uri is the bucket root (#5711)
* Add failing unit test

* Fix index update endpoint panic when index_uri is the bucket root

* Simplify update endpoint to use same default URI as create
2025-04-15 12:14:27 +00:00
Remi Dettai 4b29e49e82 Add total size bytes gauge for search after cache (#5742)
* Add total size bytes gauge for search after cache

* Rename cache size const

* Clarify terminology

* Also clarify docs

* Clarify ClusterClient.put_kv contract

* Document MiniKV limitations
2025-04-10 12:30:49 +00:00
Remi Dettai d344aa1112 Document doc mapping update bug (#5739)
* Create test showing the problem

* Add documentation and ignore failing test

* Fix incomplete issue links
2025-04-08 19:08:56 +02:00
Remi Dettai c9978270a6 Add template docs (#5669)
* Add template docs

* Use index template instead of just template
2025-02-17 09:03:08 +00:00
Remi Dettai ffd816ba71 Add update source API (#5636) 2025-01-27 18:33:16 -05:00
Remi Dettai 072d0fe7c8 Detailed ingest response (#5635)
* Detailed ingest response

* Fix unit tests

* Change detailed_parse_failures into detailed_response

And other nit improvements.

* Add to cli
2025-01-21 09:38:58 +01:00
Remi Dettai dee631b4bd Add wildcard docs (#5632)
Also improve tests
2025-01-14 14:39:49 +01:00
Remi Dettai f9a7e68147 Update docs to prepare for 0.9 release (#5605)
* Update docs to prepare for 0.9 release

* Fix typos and minor clarifications
2025-01-13 09:03:52 +00:00
trinity-1686aandAdrien Guillo ec200599d4 start adding documentation on updating mapping (#5290)
* start adding documentation on updating mapping

* improve update-api documentation

* document valid conversions

* improve section on reversibility

* typos and wording

Co-authored-by: Adrien Guillo <adrien@quickwit.io>

* reword sentence

---------

Co-authored-by: Adrien Guillo <adrien@quickwit.io>
2025-01-06 10:14:05 +01:00
Remi Dettai 2121ba1ce3 Fix lenient option with wildcard queries (#5575)
* Better error messages in integ tests

* Initial fix suggestion from Trinity

* Add rest api test and clarify docs about leniency

* Add missing field test on wildcard query

* Fix add query building unit tests

* Forgotten staging file
2024-12-11 15:05:42 +00:00
Tomer Gabel d2d1d4fa04 Fix metric name in docs (#5567) 2024-11-28 17:03:33 +01:00
Remi Dettai 297aabe34a Add missing Search API section header (#5556) 2024-11-25 08:08:55 +00:00
Paul Masurel a2c5f1d3d9 4829 minimum should match (#5488)
* Added support for minimum_should_match in quickwit es API

Fixing rest compatilibility tests.

Closes #4828

* CR comments
2024-10-18 10:53:59 +09:00
PSeitz a3ce1b8d63 document missing agg parameter (#5498)
document missing parameter and improve clarity

closes #5496
2024-10-17 09:07:00 -04:00
PSeitz 060dfd8929 document searcher config request_timeout_secs (#5452)
* document searcher config request_timeout_secs

* add some more details to the docs

* update url
2024-10-02 06:58:25 +00:00
Paul Masurelandtrinity-1686a 26d983dd1b Allowing failed splits in root search. (#5440)
* Allowing failed splits in root search.

This PR adds a query string parameter (`allow_partial_search_results`) in
the elasticsearch api controlling encounterring an error on a subset
of the splits, should fail a search query or if a response
(reflecting the partial set of successful splits) should be returned.

It changes the behavior of the root search gRPC call, that will not return
an error in presence of partial split errors, but instead returns the list of splits that failed.

This PR also changes the default behavior of the elasticsearch rest API: following elasticsearch behavior on failing shards, quickwit will allow split errors.

The Quickwit API default behavior, on the other hand, is unchanged.

Closes #5411

* Apply suggestions from code review

Co-authored-by: trinity-1686a <trinity@quickwit.io>

* Changing the moment when aggregation fast fields are checked.

The logic is now aligned with what is done for queries:
we check the schema at the root level.

If the aggregation does not make sense for the current
index docmapping, the query is rejected.

---------

Co-authored-by: trinity-1686a <trinity@quickwit.io>
2024-09-27 22:14:19 +09:00
Remi Dettai 6a61f55176 Fix ancient test that recently re-surfaced (#5425)
* Enable and fix the test

* Update the docs

* Clarify that Doc IDs change
2024-09-13 15:59:43 +00:00
trinity-1686a d142f59b8d add more env var config for postgres (#5365)
* add more env var config for postgres

* add tests for migrations

* add documentation for new environment variables
2024-09-12 13:40:19 +00:00
Remi Dettai b6db60d296 Fix typos all over the codebase (#5259) 2024-07-27 12:08:58 +09:00
trinity-1686a c6426183b2 support updating doc mapper through api (#5253)
* support updating doc mapper through api

* update documentation on update api
2024-07-26 14:19:12 +02:00
PSeitz c84e642a70 add test and docs for cardinality and extended_stats aggregation (#5204) 2024-07-09 18:17:43 +08:00
PSeitz 674212bde9 Update term aggregation order docs (#5121) 2024-06-14 02:01:51 +00:00
Vladimir KuznichenkovandPaul Masurel c53558b59d Add es resolve api (#5113)
* Add ES Resolve index API handler

This [method][1] is used by Opensearch Dashboards when user typing index
 name in pattern creation UI.

OpenSearch Dashboard makes first request with `*:*` pattern which
should be converted to `*` as QuickWit do not support `:` in the index
name. This part is not implemented within this PR.

[1]: https://www.elastic.co/guide/en/elasticsearch/reference/7.17/indices-resolve-index-api.html

* Rename variables according to type

Seems left over from prev development as are we
[passing](quickwit/quickwit-serve/src/elasticsearch_api/mod.rs:81)
`metastore` service.

* Add `_cat` ES API documentation

Took params from `cat_indices.rs` and followed common structure of the
page.

* Added rest api integration test.

---------

Co-authored-by: Paul Masurel <paul@quickwit.io>
2024-06-13 17:17:45 +09:00
Remi Dettai f27198fbd1 Index update from index config (#5078)
* Add indexing_settings and use index config as input

* Doc fixes and cleanup deprecated parameters

* Doc improvments

* Fix outdated IndexMetadata content

* Fix typos in CLI output

* Add metastore tests for each updatable config field

* Address review comments

* Fix unintended privatisation of DocMapping

* Fix typo in tests

* Address review comments
2024-06-12 19:58:38 +00:00
Adrien Guillo f6f72cd57a Fix typos 2024-06-12 08:53:41 -04:00
Paul Masurel de67160a1a added documentation + CR comments (#5111) 2024-06-12 17:20:35 +09:00
trinity-1686a fba07f0d0d update delete query documentation (#4860) 2024-04-25 09:02:07 -04:00
Remi Dettai 10fa0abe1a Fix possible source types (#4896) 2024-04-23 14:48:33 +02:00