diff --git a/tests/python_client/chaos/checker.py b/tests/python_client/chaos/checker.py index 26292ae0c4..3cd18defc9 100644 --- a/tests/python_client/chaos/checker.py +++ b/tests/python_client/chaos/checker.py @@ -13,7 +13,7 @@ from prettytable import PrettyTable import functools from collections import Counter from time import sleep -from pymilvus import AnnSearchRequest, RRFRanker, MilvusClient, DataType, CollectionSchema, connections +from pymilvus import AnnSearchRequest, RRFRanker, MilvusClient, DataType, CollectionSchema, connections, LexicalHighlighter from pymilvus.milvus_client.index import IndexParams from pymilvus.bulk_writer import RemoteBulkWriter, BulkFileType from pymilvus.client.embedding_list import EmbeddingList @@ -1048,6 +1048,14 @@ class FullTextSearchChecker(Checker): @trace() def full_text_search(self): bm25_anns_field = random.choice(self.bm25_sparse_field_names) + # Create highlighter for full text search results + highlighter = LexicalHighlighter( + pre_tags=[""], + post_tags=[""], + highlight_search_text=True, + fragment_offset=10, + fragment_size=50 + ) try: res = self.milvus_client.search( collection_name=self.c_name, @@ -1056,7 +1064,8 @@ class FullTextSearchChecker(Checker): search_params=constants.DEFAULT_BM25_SEARCH_PARAM, limit=5, partition_names=self.p_names, - timeout=search_timeout + timeout=search_timeout, + highlighter=highlighter ) return res, True except Exception as e: @@ -1908,34 +1917,52 @@ class QueryChecker(Checker): class TextMatchChecker(Checker): - """check text match query operations in a dependent thread""" + """check text match search operations with highlighter in a dependent thread""" def __init__(self, collection_name=None, shards_num=2, replica_number=1, schema=None): if collection_name is None: - collection_name = cf.gen_unique_str("QueryChecker_") + collection_name = cf.gen_unique_str("TextMatchChecker_") super().__init__(collection_name=collection_name, shards_num=shards_num, schema=schema) index_params = create_index_params_from_dict(self.float_vector_field_name, constants.DEFAULT_INDEX_PARAM) self.milvus_client.create_index(collection_name=self.c_name, index_params=index_params) - self.milvus_client.load_collection(collection_name=self.c_name, replica_number=replica_number) # do load before query + self.milvus_client.load_collection(collection_name=self.c_name, replica_number=replica_number) self.insert_data() key_word = self.word_freq.most_common(1)[0][0] - text_match_field_name = random.choice(self.text_match_field_name_list) - self.term_expr = f"TEXT_MATCH({text_match_field_name}, '{key_word}')" + self.text_match_field_name = random.choice(self.text_match_field_name_list) + self.key_word = key_word + self.term_expr = f"TEXT_MATCH({self.text_match_field_name}, '{key_word}')" @trace() def text_match(self): + # Create highlighter with query for text match + highlighter = LexicalHighlighter( + pre_tags=[""], + post_tags=[""], + highlight_search_text=False, + highlight_query=[{"type": "TextMatch", "field": self.text_match_field_name, "text": self.key_word}] + ) try: - res = self.milvus_client.query(collection_name=self.c_name, filter=self.term_expr, limit=5, timeout=query_timeout) + res = self.milvus_client.search( + collection_name=self.c_name, + data=cf.gen_vectors(1, self.dim), + anns_field=self.float_vector_field_name, + search_params=constants.DEFAULT_SEARCH_PARAM, + filter=self.term_expr, + limit=5, + output_fields=[self.text_match_field_name], + timeout=search_timeout, + highlighter=highlighter + ) return res, True except Exception as e: - log.info(f"text_match error: {e}") return str(e), False @exception_handler() def run_task(self): key_word = self.word_freq.most_common(1)[0][0] - text_match_field_name = random.choice(self.text_match_field_name_list) - self.term_expr = f"TEXT_MATCH({text_match_field_name}, '{key_word}')" + self.text_match_field_name = random.choice(self.text_match_field_name_list) + self.key_word = key_word + self.term_expr = f"TEXT_MATCH({self.text_match_field_name}, '{key_word}')" res, result = self.text_match() return res, result