Helper methods extend or combine API operations to make using the Search API easier.

Browse for records

Required ACL: browse

Retrieves all records from an index.

This helper method is based on the Browse for records API operation.

It iterates over the paginated API response and aggregates all records.

1
2
3
4
5
6
client.browse_objects(
    index_name: str,
    aggregator: Callable[[BrowseResponse], None] | None,
    browse_params: BrowseParams | None,
    request_options: dict | RequestOptions | None,
)

Parameters

index_name
type: str
Required

Index name from which to get all records.

aggregator
type: Callable[[BrowseResponse], None] | None

An aggregator function that takes the API response and returns an aggregated version.

browse_params
type: BrowseParams | None
default: None

Parameters for the Browse for records request.

request_options
type: dict | RequestOptions | None
default: None

Extra parameters, such as headers or query parameters. For more information, see Request options.

Browse for rules

Required ACL: settings

Retrieves all rules from an index.

This helper method is based on the Search for rules API operation.

It iterates over the paginated API response and aggregates all rules.

1
2
3
4
5
6
client.browse_rules(
    index_name: str,
    aggregator: Callable[[SearchRulesResponse], None]  | None,
    search_rules_params: SearchRulesParams | None,
    request_options: dict | RequestOptions | None,
)

Parameters

index_name
type: str
Required

Index name from which to get all rules.

aggregator
type: Callable[[SearchRulesResponse], None] | None

An aggregator function that takes the API response and returns an aggregated version.

search_rules_params
type: SearchRulesParams
default: SearchRulesParams(hits_per_page=1000)

Parameters for the Search for rules request.

request_options
type: dict | RequestOptions | None
default: None

Extra parameters, such as headers or query parameters. For more information, see Request options.

Browse for synonyms

Required ACL: settings

Retrieves all synonyms from an index.

This helper method is based on the Search for synonyms API operation.

It iterates over the paginated API response and aggregates all synonyms.

1
2
3
4
5
6
client.browse_synonyms(
    index_name: str,
    aggregator: Callable[[SearchSynonymsResponse], None] | None,
    search_synonyms_params: SearchSynonymsParams | None,
    request_options: dict | RequestOptions | None,
)

Parameters

index_name
type: str
Required

Index name from which to get all synonyms.

aggregator
type: Callable[[SearchSynonymsResponse], None] | None

An aggregator function that takes the API response and returns an aggregated version.

search_synonyms_params
type: SearchSynonymsParams | None
default: SearchSynonymsParams()

Parameters for the Search for synonyms request.

request_options
type: dict | RequestOptions | None
default: None

Extra parameters, such as headers or query parameters. For more information, see Request options.

Delete records

Required ACL: deleteObject

Deletes records from an index using their object IDs.

This helper methods is based on the Batch operations on one index API operation.

It constructs the batch write request with the deleteObject action and automatically sends requests in batches of 1,000 records.

1
2
3
4
client.delete_objects(
    index_name: str,
    objects: list[str],
)

Parameters

index_name
type: str
Required

Index name from which to delete records.

objects
type: list
items: str
Required

Object IDs to delete.

Create secured API keys

Creates a secured API key without any calls to Algolia’s servers.

This helper method takes a parent API key and adds restrictions to it, which can’t be changed at query time.

Secured API keys are forms of hash-based message authentication codes (HMAC).

This helper performs these steps to create a secured API key:

  1. Compute a SHA-256 HMAC with the parent API key as secret, and a URL-encoded list of query parameters as message. These query parameters will be applied with every use of the API key and can’t be changed by users.

  2. Concatenate the SHA-256 HMAC with the list of query parameters to a single string.

  3. Encode the whole string in base64.

1
2
3
4
client.generate_secured_api_key(
    parent_api_key: str,
    restrictions: SecuredApiKeyRestrictions | None,
)

Parameters

parent_api_key
type: str
Required

The API key to be used as secret for the secured API key. The secured API key inherits all restrictions from this API key. You can’t use an Admin API key.

restrictions
type: SecuredApiKeyRestrictions | None

Restrictions to apply to the secured API key. You must add at least one restriction. If you make requests with a secured API key with the same restrictions as the parent_api_key, the API returns an error with the status 403.

restrictions ➔ SecuredApiKeyRestrictions

Restrictions you can add to secured API keys.

search_params
type: SearchParams | None
default: None

Search parameters that will always be applied with this API key. For more information, see Search.

filters
type: str | None
default: None

Filters that will always be applied with this API key.

valid_until
type: int | None
default: None

Timestamp when the API key expires, in seconds since the Unix epoch.

restrict_indices
type: list[str] | None
default: None

Index names that this API key should be allowed to access. You can use the wildcard character *. For example, restrict_indices: "dev_*" permits using all indices with names starting with dev_.

restrict_sources
type: str | None
default: None

IP network range that is allowed to use this API key.

user_token
type: str | None
default: None

Pseudonymous user identifier to restrict usage of this API key to specific users. By default, rate limits are set based on IP addresses. This can be an issue if many users search from the same IP address. To avoid this, add a user token to each generated API key.

Get secured API key remaining validity

Retrieves the time in seconds until the secured API key expires.

This helper method returns the amount of seconds left until the secured API key expires, as defined by its validUntil property. If the key already expired, this method returns a negative number, indicating the number of seconds since the key expired.

1
2
3
client.get_secured_api_key_remaining_validity(
  secured_api_key: str
)

Parameters

secured_api_key
type: str
Required

Secured API key for which to retrieve the time of validity.

Update attributes of records

Required ACL: addObject

Adds or updates attributes of records

This helper methods is based on the Batch operations on one index API operation.

It constructs the batch write request with the partialUpdateObject or partialUpdateObjectNoCreate action (depending on whether the create_if_not_exists option is true or false) and automatically sends requests in batches of 1,000 records.

1
2
3
4
5
client.partial_update_objects(
    index_name: str,
    objects: list[dict],
    create_if_not_exists: bool | None,
)

Parameters

index_name
type: str
Required

Index name where to update records.

objects
type: list
items: dict
Required

Records to update

create_if_not_exists
type: bool
default: false

Whether to create a new record if it doesn’t exist.

Replace all records

Required ACL: addObject

Replaces all records in an index with new ones.

This helper lets you replace all records in an index without interrupting the ability to search.

It’s based on the Batch indexing operations on one index and Copy or move an index API operations and performs these actions:

  1. Copy settings, synonyms, and rules to a temporary index.
  2. Add the records from the objects parameter to the temporary index.
  3. Move the temporary index to the original index to replace it.

If you use an API key with indexes restrictions, you need to allow access to the index INDEX_NAME_tmp_* (replace INDEX_NAME with the name of your original index).

1
2
3
4
5
6
client.replace_all_objects(
    index_name: str,
    objects: list[dict],
    batch_size: int,
    request_options: dict | RequestOptions | None,
)

Parameters

index_name
type: str
Required

Index name where to replace all records.

objects
type: list
items: dict
Required

Records that replace the existing records in your index.

batch_size
type: int
default: 1,000

Batch size for the indexing operation.

request_options
type: dict | RequestOptions | None
default: None

Extra parameters, such as headers or query parameters. For more information, see Request options.

Save records

Required ACL: addObject

Adds records to an index.

This helper methods is based on the Batch operations on one index API operation.

It constructs the batch write request with the addObject action and automatically sends requests in batches of 1,000 records.

1
2
3
4
client.save_objects(
    index_name: str,
    objects: list[dict],
)

Parameters

index_name
type: str
Required

Index name to which to add records.

objects
type: list
items: dict
Required

Records to add.

Wait for API keys

Waits for an API key operation to be finished.

When you add, update, or delete API keys, it might take a while before the change is applied.

1
2
3
4
5
6
7
8
client.wait_for_api_key(
    operation: str,
    key: str,
    api_key: ApiKey | None,
    max_retries: int,
    timeout: Callable[[int], int],
    request_options: dict | RequestOptions | None,
)

Parameters

key
type: str
Required

The API key that was added, update, or deleted. For example, you can get this value from the API response when creating or updating.

operation
type: str
Required

The type of operation to wait for:

  • add. Wait for the addition of a new API key
  • update. Wait for the update of an existing API key
  • delete. Wait for the deletion of an API key.
api_key
type: ApiKey | None
default: None

When waiting for an API key to be updated, api_key expects the original ApiKey object you passed to the Update API key operation.

max_retries
type: int
default: 50

Maximum number of times the API key’s status should be checked.

timeout
type: Callable[[int], int]
default: min(retry_count*0.2, 5)

A function that takes one parameter, the current number of retries, and returns the number of seconds after which to check the API key’s status again.

request_options
type: dict | RequestOptions | None
default: None

Extra parameters, such as headers or query parameters. For more information, see Request options.

Examples

Wait until an API key is added:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from algoliasearch.search.client import SearchClientSync

# In an asynchronous context, you can use SearchClient instead, which exposes the exact same methods.
client = SearchClientSync("ALGOLIA_APPLICATION_ID", "ALGOLIA_API_KEY")

response = client.wait_for_api_key(
    key="api-key-add-operation-test-python",
    operation="add",
)

print(response)

# Skip deserialization
raw_response = client.wait_for_api_key_with_http_info(
    key="api-key-add-operation-test-python",
    operation="add",
)

print(raw_response.raw_data)

Wait until an API key is updated:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from algoliasearch.search.client import SearchClientSync

# In an asynchronous context, you can use SearchClient instead, which exposes the exact same methods.
client = SearchClientSync("ALGOLIA_APPLICATION_ID", "ALGOLIA_API_KEY")

response = client.wait_for_api_key(
    key="api-key-add-operation-test-python",
    operation="add",
)

print(response)

# Skip deserialization
raw_response = client.wait_for_api_key_with_http_info(
    key="api-key-add-operation-test-python",
    operation="add",
)

print(raw_response.raw_data)

Wait until an API key is deleted:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from algoliasearch.search.client import SearchClientSync

# In an asynchronous context, you can use SearchClient instead, which exposes the exact same methods.
client = SearchClientSync("ALGOLIA_APPLICATION_ID", "ALGOLIA_API_KEY")

response = client.wait_for_api_key(
    key="api-key-add-operation-test-python",
    operation="add",
)

print(response)

# Skip deserialization
raw_response = client.wait_for_api_key_with_http_info(
    key="api-key-add-operation-test-python",
    operation="add",
)

print(raw_response.raw_data)

Wait for application-level tasks

Waits for an application-level task to complete.

While indexing operations are index-level tasks, some tasks, such as working with dictionaries, are application-level tasks. They’re asynchronous: when you make a request, Algolia adds the task to a queue and runs it depending on the server load. The response includes a task_id property that you can use to wait until the task is complete.

This helper method polls the Check application task status API operation and stops if the task’s status is published.

1
2
3
4
5
6
client.wait_for_app_task(
    task_id: str,
    max_retries: int,
    timeout: Callable[[int], int],
    request_options: dict | RequestOptions | None,
)

Parameters

task_id
type: str
Required

Task ID for which to wait.

max_retries
type: int
default: 50

Maximum number of times the task status should be checked.

timeout
type: Callable[[int], int]
default: min(retry_count*0.2, 5)

A function that takes one parameter, the current number of retries, and returns the number of seconds after which to check the task’s status again.

request_options
type: dict | RequestOptions | None
default: None

Extra parameters, such as headers or query parameters. For more information, see Request options.

Examples

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from algoliasearch.search.client import SearchClientSync

# In an asynchronous context, you can use SearchClient instead, which exposes the exact same methods.
client = SearchClientSync("ALGOLIA_APPLICATION_ID", "ALGOLIA_API_KEY")

response = client.wait_for_app_task(
    task_id=123,
)

print(response)

# Skip deserialization
raw_response = client.wait_for_app_task_with_http_info(
    task_id=123,
)

print(raw_response.raw_data)

Wait for index operations

Waits for an indexing task to complete.

Indexing operations are asynchronous. When you make a request for an indexing operation, such as, adding or updating records, Algolia adds a task to a queue and returns a task_id property with the response. The task itself runs separately, depending on the server load.

This helper method polls the Check task status API operation and stops if the task’s status is published.

1
2
3
4
5
6
7
client.wait_for_task(
    index_name: str,
    task_id: str,
    max_retries: int,
    timeout: Callable[[int], int],
    request_options: dict | RequestOptions | None,
)

Parameters

index_name
type: str
Required

Index name for which to check the task.

task_id
type: str
Required

Task ID for which to wait.

max_retries
type: int
default: 50

Maximum number of times the task status should be checked.

timeout
type: Callable[[int], int]
default: min(retry_count*0.2, 5)

A function that takes one parameter, the current number of retries, and returns the number of seconds after which to check the task’s status again.

request_options
type: dict | RequestOptions | None
default: None

Extra parameters, such as headers or query parameters. For more information, see Request options.

Examples

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from algoliasearch.search.client import SearchClientSync

# In an asynchronous context, you can use SearchClient instead, which exposes the exact same methods.
client = SearchClientSync("ALGOLIA_APPLICATION_ID", "ALGOLIA_API_KEY")

response = client.wait_for_task(
    index_name="ALGOLIA_INDEX_NAME",
    task_id=123,
)

print(response)

# Skip deserialization
raw_response = client.wait_for_task_with_http_info(
    index_name="ALGOLIA_INDEX_NAME",
    task_id=123,
)

print(raw_response.raw_data)
Did you find this page helpful?