Skip to content

Commit cdbbdc1

Browse files
committed
Add methods for Prefix Search settings requests
1 parent 4bc697d commit cdbbdc1

File tree

6 files changed

+113
-1
lines changed

6 files changed

+113
-1
lines changed

Diff for: .code-samples.meilisearch.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,12 @@ update_search_cutoff_1: |-
730730
client.index('movies').update_search_cutoff_ms(150)
731731
reset_search_cutoff_1: |-
732732
client.index('movies').reset_search_cutoff_ms()
733+
get_prefix_search_settings_1: |-
734+
client.index('books').get_prefix_search()
735+
update_prefix_search_settings_1: |-
736+
client.index('books').update_prefix_search(PrefixSearch.DISABLED)
737+
reset_prefix_search_settings_1: |-
738+
client.index('books').reset_prefix_search()
733739
get_proximity_precision_settings_1: |-
734740
client.index('books').get_proximity_precision()
735741
update_proximity_precision_settings_1: |-

Diff for: meilisearch/_httprequests.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
MeilisearchCommunicationError,
1313
MeilisearchTimeoutError,
1414
)
15-
from meilisearch.models.index import ProximityPrecision
15+
from meilisearch.models.index import PrefixSearch, ProximityPrecision
1616
from meilisearch.version import qualified_version
1717

1818

@@ -116,6 +116,7 @@ def put(
116116
bytes,
117117
str,
118118
int,
119+
PrefixSearch,
119120
ProximityPrecision,
120121
]
121122
] = None,

Diff for: meilisearch/config.py

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class Paths:
4242
swap = "swap-indexes"
4343
embedders = "embedders"
4444
search_cutoff_ms = "search-cutoff-ms"
45+
prefix_search = "prefix-search"
4546
proximity_precision = "proximity-precision"
4647
localized_attributes = "localized-attributes"
4748

Diff for: meilisearch/index.py

+53
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
LocalizedAttributes,
3333
OpenAiEmbedder,
3434
Pagination,
35+
PrefixSearch,
3536
ProximityPrecision,
3637
TypoTolerance,
3738
UserProvidedEmbedder,
@@ -2056,6 +2057,58 @@ def reset_search_cutoff_ms(self) -> TaskInfo:
20562057

20572058
return TaskInfo(**task)
20582059

2060+
# PREFIX SEARCH
2061+
2062+
def get_prefix_search(self) -> PrefixSearch:
2063+
"""Get the prefix search settings of an index.
2064+
2065+
Returns
2066+
-------
2067+
settings:
2068+
The prefix search settings of the index.
2069+
2070+
Raises
2071+
------
2072+
MeilisearchApiError
2073+
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
2074+
"""
2075+
prefix_search = self.http.get(self.__settings_url_for(self.config.paths.prefix_search))
2076+
2077+
return PrefixSearch[to_snake(prefix_search).upper()]
2078+
2079+
def update_prefix_search(self, body: Union[PrefixSearch, None]) -> TaskInfo:
2080+
"""Update the prefix search settings of the index.
2081+
2082+
Parameters
2083+
----------
2084+
body:
2085+
Prefix search settings
2086+
2087+
Returns
2088+
-------
2089+
task_info:
2090+
TaskInfo instance containing information about a task to track the progress of an asynchronous process.
2091+
https://www.meilisearch.com/docs/reference/api/tasks
2092+
"""
2093+
task = self.http.put(self.__settings_url_for(self.config.paths.prefix_search), body)
2094+
2095+
return TaskInfo(**task)
2096+
2097+
def reset_prefix_search(self) -> TaskInfo:
2098+
"""Reset the prefix search settings of the index
2099+
2100+
Returns
2101+
-------
2102+
task_info:
2103+
TaskInfo instance containing information about a task to track the progress of an asynchronous process.
2104+
https://www.meilisearch.com/docs/reference/api/tasks
2105+
"""
2106+
task = self.http.delete(
2107+
self.__settings_url_for(self.config.paths.prefix_search),
2108+
)
2109+
2110+
return TaskInfo(**task)
2111+
20592112
# PROXIMITY PRECISION SETTINGS
20602113

20612114
def get_proximity_precision(self) -> ProximityPrecision:

Diff for: meilisearch/models/index.py

+12
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,18 @@ class TypoTolerance(CamelBase):
4949
min_word_size_for_typos: Optional[MinWordSizeForTypos] = None
5050

5151

52+
class PrefixSearch(str, Enum):
53+
INDEXING_TIME = "indexingTime"
54+
"""
55+
Calculate prefix search during indexing. This is the default behavior.
56+
"""
57+
58+
DISABLED = "disabled"
59+
"""
60+
Do not calculate prefix search. May speed up indexing, but will severely impact search result relevancy.
61+
"""
62+
63+
5264
class ProximityPrecision(str, Enum):
5365
BY_WORD = "byWord"
5466
BY_ATTRIBUTE = "byAttribute"

Diff for: tests/settings/test_settings_prefix_search.py

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from meilisearch.models.index import PrefixSearch
2+
3+
4+
DEFAULT_PREFIX_SEARCH_SETTINGS = PrefixSearch.INDEXING_TIME
5+
6+
7+
def test_get_prefix_search(empty_index):
8+
response = empty_index().get_prefix_search()
9+
10+
assert DEFAULT_PREFIX_SEARCH_SETTINGS == response
11+
12+
13+
def test_update_prefix_search(empty_index):
14+
index = empty_index()
15+
16+
response = index.update_prefix_search(PrefixSearch.DISABLED)
17+
index.wait_for_task(response.task_uid)
18+
response = index.get_prefix_search()
19+
assert PrefixSearch.DISABLED == response
20+
21+
response = index.update_prefix_search(PrefixSearch.INDEXING_TIME)
22+
index.wait_for_task(response.task_uid)
23+
response = index.get_prefix_search()
24+
assert PrefixSearch.INDEXING_TIME == response
25+
26+
27+
def test_reset_prefix_search(empty_index):
28+
index = empty_index()
29+
30+
response = index.update_prefix_search(PrefixSearch.DISABLED)
31+
index.wait_for_task(response.task_uid)
32+
response = index.get_prefix_search()
33+
assert PrefixSearch.DISABLED == response
34+
assert DEFAULT_PREFIX_SEARCH_SETTINGS != response
35+
36+
response = index.reset_prefix_search()
37+
index.wait_for_task(response.task_uid)
38+
response = index.get_prefix_search()
39+
assert DEFAULT_PREFIX_SEARCH_SETTINGS == response

0 commit comments

Comments
 (0)