Skip to content

Commit 1c4ce20

Browse files
Merge #871
871: Support text separator customization r=sanders41 a=ellnix # Pull Request ## Related issue Fixes #852 ## 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? Co-authored-by: ellnix <[email protected]>
2 parents 8d8b4ad + 98168cf commit 1c4ce20

File tree

4 files changed

+208
-0
lines changed

4 files changed

+208
-0
lines changed

.code-samples.meilisearch.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -683,6 +683,18 @@ facet_search_2: |-
683683
client.index('books').update_faceting_settings({ 'sortFacetValuesBy': { 'genres': 'count' } })
684684
facet_search_3: |-
685685
client.index('books').facet_search('genres', 'c')
686+
get_separator_tokens_1: |-
687+
client.index('articles').get_separator_tokens()
688+
update_separator_tokens_1: |-
689+
client.index('articles').update_separator_tokens(["|", "&hellip;"])
690+
reset_separator_tokens_1: |-
691+
client.index('articles').reset_separator_tokens()
692+
get_non_separator_tokens_1: |-
693+
client.index('articles').get_non_separator_tokens()
694+
update_non_separator_tokens_1: |-
695+
client.index('articles').update_non_separator_tokens(["@", "#"])
696+
reset_non_separator_tokens_1: |-
697+
client.index('articles').reset_non_separator_tokens()
686698
get_dictionary_1: |-
687699
client.index('books').get_dictionary()
688700
update_dictionary_1: |-

meilisearch/config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ class Paths:
3434
pagination = "pagination"
3535
faceting = "faceting"
3636
dictionary = "dictionary"
37+
separator_tokens = "separator-tokens"
38+
non_separator_tokens = "non-separator-tokens"
3739
swap = "swap-indexes"
3840

3941
def __init__(

meilisearch/index.py

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1637,6 +1637,124 @@ def reset_dictionary(self) -> TaskInfo:
16371637

16381638
return TaskInfo(**task)
16391639

1640+
# TEXT SEPARATOR SUB-ROUTES
1641+
1642+
def get_separator_tokens(self) -> List[str]:
1643+
"""Get the additional text separator tokens set on this index.
1644+
1645+
Returns
1646+
-------
1647+
settings:
1648+
List containing the separator tokens of the index.
1649+
1650+
Raises
1651+
------
1652+
MeilisearchApiError
1653+
An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://www.meilisearch.com/docs/reference/errors/error_codes#meilisearch-errors
1654+
"""
1655+
return self.http.get(self.__settings_url_for(self.config.paths.separator_tokens))
1656+
1657+
def get_non_separator_tokens(self) -> List[str]:
1658+
"""Get the list of disabled text separator tokens on this index.
1659+
1660+
Returns
1661+
-------
1662+
settings:
1663+
List containing the disabled separator tokens of the index.
1664+
1665+
Raises
1666+
------
1667+
MeilisearchApiError
1668+
An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://www.meilisearch.com/docs/reference/errors/error_codes#meilisearch-errors
1669+
"""
1670+
return self.http.get(self.__settings_url_for(self.config.paths.non_separator_tokens))
1671+
1672+
def update_separator_tokens(self, body: Union[List[str], None]) -> TaskInfo:
1673+
"""Update the additional separator tokens of the index.
1674+
1675+
Parameters
1676+
----------
1677+
body:
1678+
List of the new separator tokens.
1679+
1680+
Returns
1681+
-------
1682+
task_info:
1683+
TaskInfo instance containing information about a task to track the progress of an asynchronous process.
1684+
https://www.meilisearch.com/docs/reference/api/tasks#get-one-task
1685+
1686+
Raises
1687+
------
1688+
MeilisearchApiError
1689+
An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://www.meilisearch.com/docs/reference/errors/error_codes#meilisearch-errors
1690+
"""
1691+
task = self.http.put(self.__settings_url_for(self.config.paths.separator_tokens), body)
1692+
1693+
return TaskInfo(**task)
1694+
1695+
def update_non_separator_tokens(self, body: Union[List[str], None]) -> TaskInfo:
1696+
"""Update the disabled separator tokens of the index.
1697+
1698+
Parameters
1699+
----------
1700+
body:
1701+
List of the newly disabled separator tokens.
1702+
1703+
Returns
1704+
-------
1705+
task_info:
1706+
TaskInfo instance containing information about a task to track the progress of an asynchronous process.
1707+
https://www.meilisearch.com/docs/reference/api/tasks#get-one-task
1708+
1709+
Raises
1710+
------
1711+
MeilisearchApiError
1712+
An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://www.meilisearch.com/docs/reference/errors/error_codes#meilisearch-errors
1713+
"""
1714+
task = self.http.put(self.__settings_url_for(self.config.paths.non_separator_tokens), body)
1715+
1716+
return TaskInfo(**task)
1717+
1718+
def reset_separator_tokens(self) -> TaskInfo:
1719+
"""Clear all additional separator tokens
1720+
1721+
Returns
1722+
-------
1723+
task_info:
1724+
TaskInfo instance containing information about a task to track the progress of an asynchronous process.
1725+
https://www.meilisearch.com/docs/reference/api/tasks#get-one-task
1726+
1727+
Raises
1728+
------
1729+
MeilisearchApiError
1730+
An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://www.meilisearch.com/docs/reference/errors/error_codes#meilisearch-errors
1731+
"""
1732+
task = self.http.delete(
1733+
self.__settings_url_for(self.config.paths.separator_tokens),
1734+
)
1735+
1736+
return TaskInfo(**task)
1737+
1738+
def reset_non_separator_tokens(self) -> TaskInfo:
1739+
"""Clear all disabled separator tokens
1740+
1741+
Returns
1742+
-------
1743+
task_info:
1744+
TaskInfo instance containing information about a task to track the progress of an asynchronous process.
1745+
https://www.meilisearch.com/docs/reference/api/tasks#get-one-task
1746+
1747+
Raises
1748+
------
1749+
MeilisearchApiError
1750+
An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://www.meilisearch.com/docs/reference/errors/error_codes#meilisearch-errors
1751+
"""
1752+
task = self.http.delete(
1753+
self.__settings_url_for(self.config.paths.non_separator_tokens),
1754+
)
1755+
1756+
return TaskInfo(**task)
1757+
16401758
@staticmethod
16411759
def _batch(
16421760
documents: List[Dict[str, Any]], batch_size: int
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
NEW_SEPARATOR_TOKENS = ["|", "&hellip;"]
2+
NEW_NON_SEPARATOR_TOKENS = ["@", "#"]
3+
4+
5+
def test_get_separator_tokens_default(empty_index):
6+
"""Tests getting the default value of separator tokens."""
7+
separator_tokens = empty_index().get_separator_tokens()
8+
assert separator_tokens == []
9+
10+
11+
def test_get_non_separator_tokens_default(empty_index):
12+
"""Tests getting the default value of separator tokens."""
13+
non_separator_tokens = empty_index().get_separator_tokens()
14+
assert non_separator_tokens == []
15+
16+
17+
def test_update_separator_tokens(empty_index):
18+
"""Tests updating the separator tokens."""
19+
index = empty_index()
20+
task = index.update_separator_tokens(NEW_SEPARATOR_TOKENS)
21+
task = index.wait_for_task(task.task_uid)
22+
assert task.status == "succeeded"
23+
24+
separator_tokens = index.get_separator_tokens()
25+
for token in NEW_SEPARATOR_TOKENS:
26+
assert token in separator_tokens
27+
28+
29+
def test_update_non_separator_tokens(empty_index):
30+
"""Tests updating the non separator tokens."""
31+
index = empty_index()
32+
task = index.update_non_separator_tokens(NEW_NON_SEPARATOR_TOKENS)
33+
task = index.wait_for_task(task.task_uid)
34+
assert task.status == "succeeded"
35+
36+
non_separator_tokens = index.get_non_separator_tokens()
37+
for token in NEW_NON_SEPARATOR_TOKENS:
38+
assert token in non_separator_tokens
39+
40+
41+
def test_reset_separator_tokens(empty_index):
42+
"""Tests resetting the separator tokens to its default empty list."""
43+
index = empty_index()
44+
task = index.update_separator_tokens(NEW_SEPARATOR_TOKENS)
45+
task = index.wait_for_task(task.task_uid)
46+
assert task.status == "succeeded"
47+
48+
separator_tokens = index.get_separator_tokens()
49+
for token in NEW_SEPARATOR_TOKENS:
50+
assert token in separator_tokens
51+
52+
reset_task = index.reset_separator_tokens()
53+
reset_task = index.wait_for_task(reset_task.task_uid)
54+
assert reset_task.status == "succeeded"
55+
56+
separator_tokens = index.get_separator_tokens()
57+
assert separator_tokens == []
58+
59+
60+
def test_non_reset_separator_tokens(empty_index):
61+
"""Tests resetting the separator tokens to its default empty list."""
62+
index = empty_index()
63+
task = index.update_non_separator_tokens(NEW_NON_SEPARATOR_TOKENS)
64+
task = index.wait_for_task(task.task_uid)
65+
assert task.status == "succeeded"
66+
67+
non_separator_tokens = index.get_non_separator_tokens()
68+
for token in NEW_NON_SEPARATOR_TOKENS:
69+
assert token in non_separator_tokens
70+
71+
reset_task = index.reset_non_separator_tokens()
72+
reset_task = index.wait_for_task(reset_task.task_uid)
73+
assert reset_task.status == "succeeded"
74+
75+
non_separator_tokens = index.get_non_separator_tokens()
76+
assert non_separator_tokens == []

0 commit comments

Comments
 (0)