diff --git a/arango/collection.py b/arango/collection.py index 6bde79e3..5a59b1e6 100644 --- a/arango/collection.py +++ b/arango/collection.py @@ -1294,6 +1294,75 @@ def add_ttl_index( return self._add_index(data) + def add_inverted_index( + self, + fields: Json, + name: Optional[str] = None, + inBackground: Optional[bool] = None, + parallelism: Optional[int] = None, + primarySort: Optional[Json] = None, + storedValues: Optional[Sequence[Json]] = None, + analyzer: Optional[str] = None, + features: Optional[Sequence[str]] = None, + includeAllFields: Optional[bool] = None, + trackListPositions: Optional[bool] = None, + searchField: Optional[bool] = None, + ) -> Result[Json]: + """Create a new inverted index, introduced in version 3.10. + + :param fields: Document fields to index. + :type fields: Json + :param name: Optional name for the index. + :type name: str | None + :param inBackground: Do not hold the collection lock. + :type inBackground: bool | None + :param parallelism: + :type parallelism: int | None + :param primarySort: + :type primarySort: Json | None + :param storedValues: + :type storedValues: Sequence[Json] | None + :param analyzer: + :type analyzer: str | None + :param features: + :type features: Sequence[str] | None + :param includeAllFields: + :type includeAllFields: bool | None + :param trackListPositions: + :type trackListPositions: bool | None + :param searchField: + :type searchField: bool | None + :return: New index details. + :rtype: dict + :raise arango.exceptions.IndexCreateError: If create fails. + """ + data: Json = {"type": "inverted", "fields": fields} + + if name is not None: + data["name"] = name + if inBackground is not None: + data["inBackground"] = inBackground + if parallelism is not None: + data["parallelism"] = parallelism + if primarySort is not None: + data["primarySort"] = primarySort + if storedValues is not None: + data["storedValues"] = storedValues + if analyzer is not None: + data["analyzer"] = analyzer + if features is not None: + data["features"] = features + if includeAllFields is not None: + data["includeAllFields"] = includeAllFields + if trackListPositions is not None: + data["trackListPositions"] = trackListPositions + if searchField is not None: + data["searchField"] = searchField + if fields is not None: + data["fields"] = fields + + return self._add_index(data) + def delete_index(self, index_id: str, ignore_missing: bool = False) -> Result[bool]: """Delete an index. diff --git a/arango/database.py b/arango/database.py index 289bfdc9..6ad06482 100644 --- a/arango/database.py +++ b/arango/database.py @@ -2113,7 +2113,7 @@ def create_view( :param name: View name. :type name: str - :param view_type: View type (e.g. "arangosearch"). + :param view_type: View type (e.g. "arangosearch" or "search-alias"). :type view_type: str :param properties: View properties. For more information see https://www.arangodb.com/docs/stable/http/views-arangosearch.html diff --git a/arango/formatter.py b/arango/formatter.py index ffab8c4b..bfda602a 100644 --- a/arango/formatter.py +++ b/arango/formatter.py @@ -798,6 +798,23 @@ def format_view_link(body: Json) -> Json: return verify_format(body, result) +def format_view_index(body: Json) -> Json: + """Format view index data. + + :param body: Input body. + :type body: dict + :return: Formatted body. + :rtype: dict + """ + result: Json = {} + if "collection" in body: + result["collection"] = body["collection"] + if "index" in body: + result["index"] = body["index"] + + return verify_format(body, result) + + def format_view_consolidation_policy(body: Json) -> Json: """Format view consolidation policy data. @@ -868,6 +885,10 @@ def format_view(body: Json) -> Json: result["links"] = { name: format_view_link(link) for name, link in body["links"].items() } + if "indexes" in body: + result["indexes"] = { + name: format_view_index(idx) for name, idx in body["indexes"].items() + } return verify_format(body, result)