MeiliSearch/meilisearch/tests
bors[bot] 414b3fae89
Merge #3571
3571: Introduce two filters to select documents with `null` and empty fields r=irevoire a=Kerollmops

# Pull Request

## Related issue
This PR implements the `X IS NULL`, `X IS NOT NULL`, `X IS EMPTY`, `X IS NOT EMPTY` filters that [this comment](https://github.com/meilisearch/product/discussions/539#discussioncomment-5115884) is describing in a very detailed manner.

## What does this PR do?

### `IS NULL` and `IS NOT NULL`

This PR will be exposed as a prototype for now. Below is the copy/pasted version of a spec that defines this filter.

- `IS NULL` matches fields that `EXISTS` AND `= IS NULL`
- `IS NOT NULL` matches fields that `NOT EXISTS` OR `!= IS NULL`

1. `{"name": "A", "price": null}`
2. `{"name": "A", "price": 10}`
3. `{"name": "A"}`

`price IS NULL` would match 1
`price IS NOT NULL` or `NOT price IS NULL` would match 2,3
`price EXISTS` would match 1, 2
`price NOT EXISTS` or `NOT price EXISTS` would match 3

common query : `(price EXISTS) AND (price IS NOT NULL)` would match 2

### `IS EMPTY` and `IS NOT EMPTY`

- `IS EMPTY` matches Array `[]`, Object `{}`, or String `""` fields that `EXISTS` and are empty
- `IS NOT EMPTY` matches fields that `NOT EXISTS` OR are not empty.

1. `{"name": "A", "tags": null}`
2. `{"name": "A", "tags": [null]}`
3. `{"name": "A", "tags": []}`
4. `{"name": "A", "tags": ["hello","world"]}`
5. `{"name": "A", "tags": [""]}`
6. `{"name": "A"}`
7. `{"name": "A", "tags": {}}`
8. `{"name": "A", "tags": {"t1":"v1"}}`
9. `{"name": "A", "tags": {"t1":""}}`
10. `{"name": "A", "tags": ""}`

`tags IS EMPTY` would match 3,7,10
`tags IS NOT EMPTY` or `NOT tags IS EMPTY` would match 1,2,4,5,6,8,9
`tags IS NULL` would match 1
`tags IS NOT NULL` or `NOT tags IS NULL` would match 2,3,4,5,6,7,8,9,10
`tags EXISTS` would match 1,2,3,4,5,7,8,9,10
`tags NOT EXISTS` or `NOT tags EXISTS` would match 6

common query : `(tags EXISTS) AND (tags IS NOT NULL) AND (tags IS NOT EMPTY)` would match 2,4,5,8,9

## What should the reviewer do?

- Check that I tested the filters
- Check that I deleted the ids of the documents when deleting documents


Co-authored-by: Clément Renault <clement@meilisearch.com>
Co-authored-by: Kerollmops <clement@meilisearch.com>
2023-04-27 13:14:00 +00:00
..
assets serde ndjson fix 2022-12-21 11:27:15 +08:00
auth Fix the tests 2023-04-24 17:50:57 +02:00
common Improve the health route by ensuring lmdb is not down 2023-04-06 15:31:42 +02:00
dashboard Renames meilisearch-http to meilisearch 2022-12-08 08:22:53 -07:00
documents Fix the clippy warnings 2023-04-25 16:40:32 +02:00
dumps wait until all tasks are processed before running our dump integration tests 2023-04-05 18:35:43 +02:00
index add tests on the index resource 2023-01-24 13:20:20 +01:00
search Merge #3571 2023-04-27 13:14:00 +00:00
settings Fix tests 2023-01-19 15:48:20 +01:00
snapshot put back the sleep as it was and fix the from 2023-03-06 18:09:09 +01:00
stats Renames meilisearch-http to meilisearch 2022-12-08 08:22:53 -07:00
swap_indexes Fix tests 2023-01-19 15:48:20 +01:00
tasks Test: await for the deletion task to complete before trying to add another task 2023-04-13 18:22:42 +02:00
content_type.rs Fix non insta tests 2023-01-19 16:10:05 +01:00
integration.rs add functionnal + error tests on the swap_indexes route 2023-01-18 09:36:04 +01:00