Skip to content

Commit d31673b

Browse files
Merge #848
848: Add sort_facet_values_by to Faceting model r=sanders41 a=sanders41 # Pull Request `@curquiza` this is what is needed in addition to the code samples for #829 ## Related issue Fixes #829 ## What does this PR do? - Adds `sort_facet_values_by` to the `Faceting` model ## PR checklist Please check if your PR fulfills the following requirements: - [x] Does this PR fix an existing issue, or have you listed the changes applied in the PR description (and why they are needed)? - [x] Have you read the contributing guidelines? - [x] Have you made sure that the title is accurate and descriptive of the changes? Thank you so much for contributing to Meilisearch! Co-authored-by: Paul Sanders <[email protected]>
2 parents 9f6944e + 715a9e9 commit d31673b

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

meilisearch/models/index.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def __iter__(self) -> Iterator:
2929

3030
class Faceting(CamelBase):
3131
max_values_per_facet: int
32+
sort_facet_values_by: Optional[Dict[str, str]] = None
3233

3334

3435
class Pagination(CamelBase):

tests/settings/test_setting_faceting.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1+
import pytest
2+
3+
from meilisearch.models.index import Faceting
4+
15
DEFAULT_MAX_VALUE_PER_FACET = 100
6+
DEFAULT_SORT_FACET_VALUES_BY = {"*": "alpha"}
27
NEW_MAX_VALUE_PER_FACET = {"maxValuesPerFacet": 200}
38

49

510
def test_get_faceting_settings(empty_index):
611
response = empty_index().get_faceting_settings()
712

813
assert DEFAULT_MAX_VALUE_PER_FACET == response.max_values_per_facet
14+
assert DEFAULT_SORT_FACET_VALUES_BY == response.sort_facet_values_by
915

1016

1117
def test_update_faceting_settings(empty_index):
@@ -25,3 +31,51 @@ def test_delete_faceting_settings(empty_index):
2531
index.wait_for_task(response.task_uid)
2632
response = index.get_faceting_settings()
2733
assert DEFAULT_MAX_VALUE_PER_FACET == response.max_values_per_facet
34+
35+
36+
@pytest.mark.parametrize(
37+
"index_name, facet_order, max_values_per_facet, expected",
38+
[
39+
("*", "alpha", 17, {"max_values_per_facet": 17, "sort_facet_values_by": {"*": "alpha"}}),
40+
("*", "count", 41, {"max_values_per_facet": 41, "sort_facet_values_by": {"*": "count"}}),
41+
(
42+
"movies",
43+
"alpha",
44+
42,
45+
{"max_values_per_facet": 42, "sort_facet_values_by": {"*": "alpha", "movies": "alpha"}},
46+
),
47+
(
48+
"movies",
49+
"alpha",
50+
73,
51+
{"max_values_per_facet": 73, "sort_facet_values_by": {"*": "alpha", "movies": "alpha"}},
52+
),
53+
],
54+
)
55+
def test_update_faceting_sort_facet_values(
56+
index_name, facet_order, max_values_per_facet, expected, empty_index
57+
):
58+
faceting = Faceting(
59+
max_values_per_facet=max_values_per_facet,
60+
sort_facet_values_by={index_name: facet_order},
61+
)
62+
index = empty_index()
63+
response = index.update_faceting_settings(faceting.model_dump(by_alias=True))
64+
index.wait_for_task(response.task_uid)
65+
response = index.get_faceting_settings()
66+
assert response.model_dump() == expected
67+
68+
69+
def test_reset_faceting(empty_index):
70+
index = empty_index()
71+
response = index.update_faceting_settings(
72+
{"maxValuesPerFacet": 17, "sortFacetValuesBy": {"*": "count"}}
73+
)
74+
index.wait_for_task(response.task_uid)
75+
response = index.reset_faceting_settings()
76+
index.wait_for_task(response.task_uid)
77+
response = index.get_faceting_settings()
78+
assert response == Faceting(
79+
max_values_per_facet=DEFAULT_MAX_VALUE_PER_FACET,
80+
sort_facet_values_by=DEFAULT_SORT_FACET_VALUES_BY,
81+
)

0 commit comments

Comments
 (0)