Skip to content
This repository has been archived by the owner on Mar 21, 2024. It is now read-only.

Tasks API - Filter tasks list by type/status/indexUid #116

Merged
merged 6 commits into from
Jul 7, 2022

Conversation

gmourier
Copy link
Member

@gmourier gmourier commented Feb 21, 2022

🤖 API Diff

Summary

Add filtering capabilities to the tasks endpoints to facilitate the management of an instance and its indexes, or a specific index.

This first iteration adds filters on the status, type and indexUid attributes of the task API resource.

Changes

  • Add filtering capabilities on type, status and indexUid for GET task lists endpoints.
  • It is possible to specify several values for a filter using the , character. e.g. ?status=enqueued,processing
  • Between two different filters, an AND operation is applied. e.g. ?status=enqueued&type=indexCreation is equivalent to status=enqueued AND type = indexCreation
  • GET /indexes/:indexUid/tasks is removed
    • It can be replaced by GET /tasks?indexUid=:indexUid
  • GET /indexes/:indexUid/tasks/:taskUid is removed
    • It's already replaced by GET /tasks/:taskUid
  • Task types documentPartial and documentAddition are renamed documentAdditionOrUpdate
  • Task type clearAll is renamed documentDeletion

Telemetry

  • Index Tasks Seen event is removed.
  • Add filtered_by_index_uid boolean property for Tasks Seen event.
  • Add filtered_by_type boolean property for Tasks Seen event.
  • Add filtered_by_statusboolean property for Tasks Seen event.

Motivation

Following the specification aiming to stabilize the task API resource, we want to give users the capability to refine the lists of task according to several criteria to find precise information more quickly.

@gmourier gmourier added the Ready For Review Feature specification must be reviewed. label Feb 21, 2022
@gmourier gmourier added this to Ready For Review in Specification Workflow Feb 21, 2022
@gmourier gmourier added the v0.28 label Feb 21, 2022
@gmourier gmourier force-pushed the add-filter-on-status-and-type-to-tasks-api-spec branch from 2b38651 to 6070409 Compare March 14, 2022 16:56
@bidoubiwa
Copy link
Contributor

bidoubiwa commented Mar 21, 2022

Is it possible to filter on index ? Since using GET /indexes/:index/task/0 would cause to throw a 404 error when called directly after creating the index. If added, we could suggest to users to always use GET /tasks&index=movies as it would never return a 404.

Also, by doing so, we would avoid having to fetch all tasks and then filter them just to have the ones from one index. Which in turn if there are a lot of different indexes may result in the user having to paginate to be sure they fetched all the tasks

Exemple:

const tasks = await client.getTasks() // could contain a lot of tasks unrelated to the index
const indexTasks = tasks.filter(task => indexUid === "movies")

vs

const tasks = await client.getTasks({ indexUid: "movies" })

@MarinPostma
Copy link
Contributor

MarinPostma commented Mar 22, 2022

Is it possible to filter on index ? Since using GET /indexes/:index/task/0 would cause to throw a 404 error when called directly after creating the index. If added, we could suggest to users to always use GET /tasks&index=movies as it would never return a 404.

Also, by doing so, we would avoid having to fetch all tasks and then filter them just to have the ones from one index. Which in turn if there are a lot of different indexes may result in the user having to paginate to be sure they fetched all the tasks

Exemple:

const tasks = await client.getTasks() // could contain a lot of tasks unrelated to the index
const indexTasks = tasks.filter(task => indexUid === "movies")

vs

const tasks = await client.getTasks({ indexUid: "movies" })

technically calling /indexes/:index/tasks is syntactic sugar for a filter on index. The spec doesn't say anything about allowing filters on /indexes/:uid/tasks route, but I think it should be part of this. my bad, just saw it :)

Copy link
Contributor

@MarinPostma MarinPostma left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This API feels a bit awkward to me TBH, we have on one end index and uid that are identified as resources, and status and type that are filters. It would be more consistent to have everything be filters, wouldn't it?

text/0061-error-format-and-definitions.md Show resolved Hide resolved
text/0060-tasks-api.md Outdated Show resolved Hide resolved
@gmourier gmourier mentioned this pull request Mar 30, 2022
1 task
@gmourier gmourier added In Progress Feature specification is in elaboration. Important changes can still occurs in the specification. and removed Ready For Review Feature specification must be reviewed. labels Apr 14, 2022
@gmourier gmourier changed the title Tasks API - Filter lists by type/status Tasks API - Filter lists by type/status/index Apr 14, 2022
@gmourier
Copy link
Member Author

gmourier commented Apr 14, 2022

@bidoubiwa, if we add a query parameter to filter tasks by indexUid, we could evaluate if we can remove the syntactic sugar /indexes/:index_uid/tasks and /indexes/:index_uid/tasks/:task_uid to simplify the number of endpoints, we will have to look at the usage with our analytics.

@bidoubiwa
Copy link
Contributor

I'm all for removing /indexes/:index_uid/tasks/:task_uid as it leads to much to a possible 404. I'm curious about the analytics.

Copy link
Member

@brunoocasali brunoocasali left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left some polemical comments 😬 😅

text/0060-tasks-api.md Outdated Show resolved Hide resolved
text/0060-tasks-api.md Outdated Show resolved Hide resolved
@brunoocasali
Copy link
Member

Oh, I think I came late to the party about the potential removal of the index/uid/tasks, @MarinPostma and @bidoubiwa already raised the question! 🐞

@gmourier gmourier added Telemetry Update the telemetry collect. OpenAPI Update OpenAPI specification. Q3:2022 labels Apr 21, 2022
@gmourier gmourier removed this from Ready For Review in Specification Workflow Apr 21, 2022
@gmourier gmourier changed the title Tasks API - Filter lists by type/status/index Tasks API - Filter lists by type/status/indexUid Apr 21, 2022
@gmourier gmourier changed the title Tasks API - Filter lists by type/status/indexUid Tasks API - Filter tasks list by type/status/indexUid Apr 21, 2022
@gmourier gmourier self-assigned this Apr 21, 2022
@gmourier gmourier force-pushed the add-filter-on-status-and-type-to-tasks-api-spec branch 3 times, most recently from 6817e5e to 58415df Compare April 21, 2022 14:03
@github-actions
Copy link

github-actions bot commented Apr 21, 2022

🚨 Breaking API change detected:

Modified (26)

  • DELETE /indexes/{indexUid}/documents
    • Response modified: 202
      • Body attribute added: type
  • DELETE /indexes/{indexUid}/documents/{documentId}
    • Response modified: 202
      • Body attribute added: type
  • DELETE /indexes/{indexUid}/settings
    • Response modified: 202
      • Body attribute added: type
  • DELETE /indexes/{indexUid}/settings/displayed-attributes
    • Response modified: 202
      • Body attribute added: type
  • DELETE /indexes/{indexUid}/settings/distinct-attribute
    • Response modified: 202
      • Body attribute added: type
  • DELETE /indexes/{indexUid}/settings/filterable-attributes
    • Response modified: 202
      • Body attribute added: type
  • DELETE /indexes/{indexUid}/settings/ranking-rules
    • Response modified: 202
      • Body attribute added: type
  • DELETE /indexes/{indexUid}/settings/searchable-attributes
    • Response modified: 202
      • Body attribute added: type
  • DELETE /indexes/{indexUid}/settings/sortable-attributes
    • Response modified: 202
      • Body attribute added: type
  • DELETE /indexes/{indexUid}/settings/stop-words
    • Response modified: 202
      • Body attribute added: type
  • DELETE /indexes/{indexUid}/settings/synonyms
    • Response modified: 202
      • Body attribute added: type
  • DELETE /indexes/{indexUid}/settings/typo-tolerance
    • Response modified: 202
      • Body attribute added: type
  • GET /tasks
    • Path parameters added: indexUid, status, type
  • POST /indexes/{indexUid}/documents
    • Response modified: 202
      • Body attribute added: type
  • POST /indexes/{indexUid}/documents/delete-batch
    • Response modified: 202
      • Body attribute added: type
  • POST /indexes/{indexUid}/settings
    • Response modified: 202
      • Body attribute added: type
  • POST /indexes/{indexUid}/settings/displayed-attributes
    • Response modified: 202
      • Body attribute added: type
  • POST /indexes/{indexUid}/settings/distinct-attribute
    • Response modified: 202
      • Body attribute added: type
  • POST /indexes/{indexUid}/settings/filterable-attributes
    • Response modified: 202
      • Body attribute added: type
  • POST /indexes/{indexUid}/settings/ranking-rules
    • Response modified: 202
      • Body attribute added: type
  • POST /indexes/{indexUid}/settings/searchable-attributes
    • Response modified: 202
      • Body attribute added: type
  • POST /indexes/{indexUid}/settings/sortable-attributes
    • Response modified: 202
      • Body attribute added: type
  • POST /indexes/{indexUid}/settings/stop-words
    • Response modified: 202
      • Body attribute added: type
  • POST /indexes/{indexUid}/settings/synonyms
    • Response modified: 202
      • Body attribute added: type
  • POST /indexes/{indexUid}/settings/typo-tolerance
    • Response modified: 202
      • Body attribute added: type
  • PUT /indexes/{indexUid}/documents
    • Response modified: 202
      • Body attribute added: type

Removed (2)

  • [Breaking] GET /indexes/{indexUid}/tasks
  • [Breaking] GET /indexes/{indexUid}/tasks/{taskUid}

View documentation diff

Powered by Bump

@gmourier gmourier added Ready For Review Feature specification must be reviewed. and removed In Progress Feature specification is in elaboration. Important changes can still occurs in the specification. labels Apr 21, 2022
@gmourier
Copy link
Member Author

The specification is now updated with the latest information given in the comments.

curquiza
curquiza previously approved these changes May 24, 2022
bors bot added a commit to meilisearch/meilisearch that referenced this pull request May 31, 2022
2399: Update the tasks endpoints r=MarinPostma a=Kerollmops

This PR wraps all the changes related to the `tasks` endpoints, it is related to #2377 but doesn't close it. I will create a new PR to work on [the seek-based pagination](meilisearch/specifications#115).

I wanted to do something cool with Github: being able to merge multiple PR in this one, to help review changes one by one, unfortunately, Github doesn't allow creating empty PRs. I also struggled with git itself when it comes to merging things in the right order, so I decided that I would add all of the changes in this single PR. I will list the changes and references to the specs here.

 - [x] Tasks statuses and types must be case insensitive
 - [x] Tasks statuses, types and indexUid must accept the `*` selector
 - [ ] Rename the `TaskDetails` struct fields

## Changes

- [ ] Add seek-based pagination following [the spec](meilisearch/specifications#115) 
- [x] Add filtering on the `/tasks` endpoint following [this spec](meilisearch/specifications#116)
  - [x] Add filtering capabilities on `type`, `status` and `indexUid` for `GET` `task` lists endpoints.
  - [x] It is possible to specify several values for a filter using the `,` character. e.g. `?status=enqueued,processing`
  - [x] Between two different filters, an AND operation is applied. e.g. `?status=enqueued&type=indexCreation` is equivalent to `status=enqueued AND type = indexCreation`
- [x] Remove `GET /indexes/:indexUid/tasks`. It can be replaced by `GET /tasks?indexUid=:indexUid`
- [x] Remove `GET /indexes/:indexUid/tasks/:taskUid`.
- [x] Rename `uid` to `taskUid` in the `202 - Accepted` task response return by every asynchronous tasks (ex: index creation, document addition...)
- [x] Rename some task properties
  - [x] `documentPartial`-> `documentAdditionOrUpdate`
  - [x] `documentAddition`-> `documentAdditionOrUpdate`
  - [x] `clearAll` -> `documentDeletion` 

Co-authored-by: Kerollmops <clement@meilisearch.com>
@gmourier gmourier force-pushed the add-filter-on-status-and-type-to-tasks-api-spec branch from 2afb0f3 to 4d3ebdd Compare July 7, 2022 10:29
@gmourier gmourier merged commit a4af7d2 into develop Jul 7, 2022
@gmourier gmourier deleted the add-filter-on-status-and-type-to-tasks-api-spec branch July 7, 2022 10:34
gmourier added a commit that referenced this pull request Jul 7, 2022
* move filtering tasks by status/type parameter to task api spec

* Update specification

* Add details about case-sensitivy + rework error message

* Introducing naming changes plus make the specification a source of truth instead of a changelog

* Remove a future possibility being introduced

* misc - replace createIndex to the right type and add the missing type field to the 202 Response resource
gmourier added a commit that referenced this pull request Jul 11, 2022
* Bump open-api.yml to v0.28

* Telemetry - Add `x-meilisearch-client` query parameter (#145)

* Introduce the x-meilisearch-client query parameter

* Update text/0034-telemetry-policies.md

Co-authored-by: Bruno Casali <brunoocasali@gmail.com>

* Update text/0034-telemetry-policies.md

Co-authored-by: Bruno Casali <brunoocasali@gmail.com>

Co-authored-by: Bruno Casali <brunoocasali@gmail.com>

* GeoSearch — Support string type for `_geo` `lat` and `lng` fields (#83)

* Update specification to support string type for _geo lat and lng fields

* mention types mixing for _geo object

* Tasks API - Rename `uid` to `taskUid` in the `202 - Accepted` Summarized Task Response (#144)

* Rename 202 uid to taskUid

* Update text/0060-tasks-api.md

Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com>

Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com>

* Tasks API - Seek/Keyset based pagination (#115)

* Move cursor based pagination spec to tasks API spec

* remove pagination as a future capability

* Clarify boundaries for limit query parameter

* Update OpenApi specification

* Remove limit field boundaries

* Apply suggestions from code review

Co-authored-by: Clément Renault <renault.cle@gmail.com>

* Update open-api.yml and removes cursor term mentions

* Update text/0060-tasks-api.md

Co-authored-by: Tommy <68053732+dichotommy@users.noreply.github.com>

* Remove  route mention in seek-keyset pagination section

Co-authored-by: Clément Renault <renault.cle@gmail.com>
Co-authored-by: Tommy <68053732+dichotommy@users.noreply.github.com>

* Tasks API - Filter tasks list by `type`/`status`/`indexUid` (#116)

* move filtering tasks by status/type parameter to task api spec

* Update specification

* Add details about case-sensitivy + rework error message

* Introducing naming changes plus make the specification a source of truth instead of a changelog

* Remove a future possibility being introduced

* misc - replace createIndex to the right type and add the missing type field to the 202 Response resource

* Dumps API - Make dump creation an asynchronous task (#139)

* wip

* Make a dump creation a visible asynchronous task

* Add precisions

* Update open-api.yml

* Add ommited type field for summarized task response

* Add future possibilities

* Apply suggestions from code review

Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com>

* Precise that indexUid can be null

* Precise priorization of dumpCreation task over other task types

* Keep taskUid for 202 response

* remove dumps.get API key action

Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com>

* Search API - Remove/Rename confusing fields (#135)

* Rename nbHits, remove exhaustive* boolean fields

* Rename approximativeNbHits to estimatedTotalHits

* Update open-api.yaml

* Apply naming changes for facet distribution and showing matches position

* Add a telemetry for facet distribution usage

* API Guideline - Return list of API resources under a `results` array (#138)

* Place list of documents under a results array on /documents

* Add results array for indexes object list

* Add the future of indexes pagination

* Update open-api.yml

* Fix typo

* Apply suggestions from code review

Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com>

* Add offset/limit pagination for indexes and API keys

* Try to add multipe refs to a response object

Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com>

* Remove name field (#140)

* Documents API - `displayedAttributes` should not impact the documents API / Rename `attributesToRetrieve` to `fields` (#143)

* Specifies that displayedAttributes setting does not impact the GET documents endpoint

* Rename attributeToRetrieve to fields on /documents

* Add a future possibily to rejectt a field from a document in the given response

* Precise behavior details about fields query parameter

* Add fields query parameter on GET /indexes/{index}/documents/{docId}

* API Keys - Determinist API Keys + Security changes (#148)

* Add an uid to make API Keys determinists, plus add a non-unique human readable name field to ease reading information

* Describe errors for uid and name fields

* Apply suggestions from code review

Co-authored-by: Bruno Casali <brunoocasali@gmail.com>

* misc: add precisions

* Reorganize route descriptions

* Update error_code when API Key already exists for a given uid

* Apply suggestions from code review

Co-authored-by: Many the fish <legendre.maxime.isn@gmail.com>

* Add new keys actions, remove master-key changes, introduce a new error for immutable field and update tenant token

* Update open-api spec

* Update immutable_field error message

* Apply suggestions from code review

Co-authored-by: Many the fish <legendre.maxime.isn@gmail.com>

* Mention that the Default Admin API Key can manage keys

* Specify that the JWT Tenant Token must be enrypted with the API Key value

* Update the spec regarding the description of the Admin API Key to be up-to-date

* Add uid_or_key url param to update and delete a key

* Update text/0085-api-keys.md

Co-authored-by: Many the fish <legendre.maxime.isn@gmail.com>

* Update text/0085-api-keys.md

Co-authored-by: Many the fish <legendre.maxime.isn@gmail.com>

Co-authored-by: Bruno Casali <brunoocasali@gmail.com>
Co-authored-by: Many the fish <legendre.maxime.isn@gmail.com>
Co-authored-by: Kerollmops <clement@meilisearch.com>

* Geosearch - Enhance lat/lng format error messages (#149)

* Update the geosearch error message

* misc: organiser error message in the right specification

Co-authored-by: Guillaume Mourier <guillaume@meilisearch.com>

* Introduces HTTP Verbs changesto be compliant regarding a Rest API (#152)

* Telemetry - Replace `x-meilisearch-client` query parameter by `X-Meilisearch-Client` header (#150)

* Removes x-meilisearch-client, replace it by a header

* Remove capslock

* fix typo (#151)

* Mention telemetry.meilisearch.com (#153)

* update ranking rules error message (#154)

* Misc — Update dump versions compatibility table (#156)

* Update dump table

* Update text/0105-dumps-api.md

* Settings API - Customize the hard limits for `pagination` and `faceting` (#157)

* Introduces specification files

* Update files name

* branch telemetry

* Update open-api.yml

* Update text/0034-telemetry-policies.md

Co-authored-by: Clément Renault <renault.cle@gmail.com>

* update open-api.yml

* Update text/157-faceting-setting-api.md

Co-authored-by: Clément Renault <renault.cle@gmail.com>

* Rename limitedTo to maxTotalHits

* Specify order of returned facet

Co-authored-by: Clément Renault <renault.cle@gmail.com>

* Add dumpCreation task type to OpenAPI.yml

* Tasks filtering params to be in query instead of path on OpenAPI spec

Co-authored-by: Bruno Casali <brunoocasali@gmail.com>
Co-authored-by: cvermand <33010418+bidoubiwa@users.noreply.github.com>
Co-authored-by: Clément Renault <renault.cle@gmail.com>
Co-authored-by: Tommy <68053732+dichotommy@users.noreply.github.com>
Co-authored-by: Many the fish <legendre.maxime.isn@gmail.com>
Co-authored-by: Kerollmops <clement@meilisearch.com>
Co-authored-by: Tamo <tamo@meilisearch.com>
Co-authored-by: ad hoc <postma.marin@protonmail.com>
Co-authored-by: Clémentine Urquizar - curqui <clementine@meilisearch.com>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
OpenAPI Update OpenAPI specification. Q3:2022 Ready For Review Feature specification must be reviewed. Telemetry Update the telemetry collect. v0.28
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants