Skip to content

Commit 53851ac

Browse files
committed
support run analyzer
Signed-off-by: aoiasd <[email protected]>
1 parent 5220f8d commit 53851ac

File tree

7 files changed

+146
-19
lines changed

7 files changed

+146
-19
lines changed

pymilvus/client/grpc_handler.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2258,3 +2258,16 @@ def remove_privileges_from_group(
22582258
)
22592259
resp = self._stub.OperatePrivilegeGroup(req, wait_for_ready=True, timeout=timeout)
22602260
check_status(resp)
2261+
2262+
@retry_on_rpc_failure()
2263+
def run_analyzer(
2264+
self,
2265+
texts: Union[str, List[str]],
2266+
analyzer_params: Union[str, Dict],
2267+
timeout: Optional[float],
2268+
**kwargs,
2269+
):
2270+
req = Prepare.run_analyzer(texts, analyzer_params)
2271+
resp = self._stub.RunAnalyzer(req, timeout=timeout)
2272+
check_status(resp.status)
2273+
return resp.results

pymilvus/client/prepare.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1728,3 +1728,18 @@ def operate_privilege_group_req(
17281728
privileges=[milvus_types.PrivilegeEntity(name=p) for p in privileges],
17291729
type=operate_privilege_group_type,
17301730
)
1731+
1732+
@classmethod
1733+
def run_analyzer(cls, texts: Union[str, List[str]], analyzer_params: Union[str, Dict]):
1734+
req = milvus_types.RunAnalyzerRequset()
1735+
if isinstance(texts, str):
1736+
req.placeholder.append(texts.encode("utf-8"))
1737+
else:
1738+
req.placeholder.extend([text.encode("utf-8") for text in texts])
1739+
1740+
if isinstance(analyzer_params, dict):
1741+
req.analyzer_params = ujson.dumps(analyzer_params)
1742+
else:
1743+
req.analyzer_params = analyzer_params
1744+
1745+
return req

pymilvus/grpc_gen/milvus_pb2.py

Lines changed: 23 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pymilvus/grpc_gen/milvus_pb2.pyi

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2211,3 +2211,27 @@ class ListImportsAuthPlaceholder(_message.Message):
22112211
db_name: str
22122212
collection_name: str
22132213
def __init__(self, db_name: _Optional[str] = ..., collection_name: _Optional[str] = ...) -> None: ...
2214+
2215+
class RunAnalyzerRequset(_message.Message):
2216+
__slots__ = ("base", "analyzer_params", "placeholder")
2217+
BASE_FIELD_NUMBER: _ClassVar[int]
2218+
ANALYZER_PARAMS_FIELD_NUMBER: _ClassVar[int]
2219+
PLACEHOLDER_FIELD_NUMBER: _ClassVar[int]
2220+
base: _common_pb2.MsgBase
2221+
analyzer_params: str
2222+
placeholder: _containers.RepeatedScalarFieldContainer[bytes]
2223+
def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., analyzer_params: _Optional[str] = ..., placeholder: _Optional[_Iterable[bytes]] = ...) -> None: ...
2224+
2225+
class AnalyzerResult(_message.Message):
2226+
__slots__ = ("tokens",)
2227+
TOKENS_FIELD_NUMBER: _ClassVar[int]
2228+
tokens: _containers.RepeatedScalarFieldContainer[str]
2229+
def __init__(self, tokens: _Optional[_Iterable[str]] = ...) -> None: ...
2230+
2231+
class RunAnalyzerResponse(_message.Message):
2232+
__slots__ = ("status", "results")
2233+
STATUS_FIELD_NUMBER: _ClassVar[int]
2234+
RESULTS_FIELD_NUMBER: _ClassVar[int]
2235+
status: _common_pb2.Status
2236+
results: _containers.RepeatedCompositeFieldContainer[AnalyzerResult]
2237+
def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., results: _Optional[_Iterable[_Union[AnalyzerResult, _Mapping]]] = ...) -> None: ...

pymilvus/grpc_gen/milvus_pb2_grpc.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,11 @@ def __init__(self, channel):
486486
request_serializer=milvus__pb2.OperatePrivilegeGroupRequest.SerializeToString,
487487
response_deserializer=common__pb2.Status.FromString,
488488
)
489+
self.RunAnalyzer = channel.unary_unary(
490+
'/milvus.proto.milvus.MilvusService/RunAnalyzer',
491+
request_serializer=milvus__pb2.RunAnalyzerRequset.SerializeToString,
492+
response_deserializer=milvus__pb2.RunAnalyzerResponse.FromString,
493+
)
489494

490495

491496
class MilvusServiceServicer(object):
@@ -1062,6 +1067,12 @@ def OperatePrivilegeGroup(self, request, context):
10621067
context.set_details('Method not implemented!')
10631068
raise NotImplementedError('Method not implemented!')
10641069

1070+
def RunAnalyzer(self, request, context):
1071+
"""Missing associated documentation comment in .proto file."""
1072+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
1073+
context.set_details('Method not implemented!')
1074+
raise NotImplementedError('Method not implemented!')
1075+
10651076

10661077
def add_MilvusServiceServicer_to_server(servicer, server):
10671078
rpc_method_handlers = {
@@ -1535,6 +1546,11 @@ def add_MilvusServiceServicer_to_server(servicer, server):
15351546
request_deserializer=milvus__pb2.OperatePrivilegeGroupRequest.FromString,
15361547
response_serializer=common__pb2.Status.SerializeToString,
15371548
),
1549+
'RunAnalyzer': grpc.unary_unary_rpc_method_handler(
1550+
servicer.RunAnalyzer,
1551+
request_deserializer=milvus__pb2.RunAnalyzerRequset.FromString,
1552+
response_serializer=milvus__pb2.RunAnalyzerResponse.SerializeToString,
1553+
),
15381554
}
15391555
generic_handler = grpc.method_handlers_generic_handler(
15401556
'milvus.proto.milvus.MilvusService', rpc_method_handlers)
@@ -3143,6 +3159,23 @@ def OperatePrivilegeGroup(request,
31433159
options, channel_credentials,
31443160
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
31453161

3162+
@staticmethod
3163+
def RunAnalyzer(request,
3164+
target,
3165+
options=(),
3166+
channel_credentials=None,
3167+
call_credentials=None,
3168+
insecure=False,
3169+
compression=None,
3170+
wait_for_ready=None,
3171+
timeout=None,
3172+
metadata=None):
3173+
return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/RunAnalyzer',
3174+
milvus__pb2.RunAnalyzerRequset.SerializeToString,
3175+
milvus__pb2.RunAnalyzerResponse.FromString,
3176+
options, channel_credentials,
3177+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
3178+
31463179

31473180
class ProxyServiceStub(object):
31483181
"""Missing associated documentation comment in .proto file."""

pymilvus/orm/utility.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
# the License.
1212

1313
from datetime import datetime, timedelta, timezone
14-
from typing import List, Mapping, Optional
14+
from typing import Dict, List, Mapping, Optional, Union
1515

1616
from pymilvus.client.types import (
1717
BulkInsertState,
@@ -1310,3 +1310,39 @@ def list_indexes(
13101310
# list all indexes of this field.
13111311
index_name_list.append(index.index_name)
13121312
return index_name_list
1313+
1314+
1315+
def run_analyzer(
1316+
text: Union[str, List[str]],
1317+
analyzer_params: Union[str, Dict, None] = None,
1318+
using: str = "default",
1319+
timeout: Optional[float] = None,
1320+
):
1321+
"""Run analyzer. Return result tokens of analysis.
1322+
1323+
:param text: The input text (string or string list).
1324+
:type text: str or List[str]
1325+
1326+
:param analyzer_params: The parameters of analyzer.
1327+
:type analyzer_params: str or Dict or None
1328+
1329+
:param using: Alias to the connection. Default connection is used if this is not specified.
1330+
:type using: str
1331+
1332+
:param kwargs:
1333+
* *field_name* (``str``)
1334+
The name of field. If no field name is specified, all indexes
1335+
of this collection will be returned.
1336+
:type kwargs: dict
1337+
1338+
:return: The result tokens of analysis.
1339+
:rtype: List[str] or List[List[str]]
1340+
"""
1341+
if analyzer_params is None:
1342+
analyzer_params = {}
1343+
1344+
results = _get_connection(using).run_analyzer(text, analyzer_params, timeout)
1345+
1346+
if isinstance(text, str):
1347+
return results[0].tokens
1348+
return [result.tokens for result in results]

0 commit comments

Comments
 (0)