class_docstr: Test case of search interface 
class_docstr_tok: ["Test","case","of","search","interface"]
docstr: target: test search (high level api) for string primary key
  method: create connection, collection, insert and search
  expected: search/query successfully
docstr_tok: ["target",":","test","search","(","high","level","api",")","for","string","primary","key","method",":","create","connection",",","collection",",","insert","and","search","expected",":","search\/query","successfully"]
code: def test_high_level_search_query_string(self):
      """
      target: test search (high level api) for string primary key
      method: create connection, collection, insert and search
      expected: search/query successfully
      """
      client = self._connect(enable_high_level_api=True)
      collection_name = cf.gen_unique_str(prefix)
      # 1. create collection
      client_w.create_collection(
          client,
          collection_name,
          default_dim,
          id_type="string",
          max_length=ct.default_length,
      )
      client_w.describe_collection(
          client,
          collection_name,
          check_task=CheckTasks.check_describe_collection_property,
          check_items={
              "collection_name": collection_name,
              "dim": default_dim,
              "auto_id": auto_id,
          },
      )
      # 2. insert
      rng = np.random.default_rng(seed=19530)
      rows = [
          {
              default_primary_key_field_name: str(i),
              default_vector_field_name: list(
                  rng.random((1, default_dim))[0]
              ),
              default_float_field_name: i * 1.0,
              default_string_field_name: str(i),
          }
          for i in range(default_nb)
      ]
      client_w.insert(client, collection_name, rows)
      client_w.flush(client, collection_name)
      assert (
          client_w.num_entities(client, collection_name)[0]
          == default_nb
      )
      # 3. search
      vectors_to_search = rng.random((1, default_dim))
      client_w.search(
          client,
          collection_name,
          vectors_to_search,
          check_task=CheckTasks.check_search_results,
          check_items={
              "enable_high_level_api": True,
              "nq": len(vectors_to_search),
              "limit": default_limit,
          },
      )
      # 4. query
      client_w.query(
          client,
          collection_name,
          filter=default_search_exp,
          check_task=CheckTasks.check_query_results,
          check_items={
              exp_res: rows,
              "with_vec": True,
              "primary_field": default_primary_key_field_name,
          },
      )
      client_w.drop_collection(client, collection_name)
  
imports: import multiprocessing
  import numbers
  import random
  import numpy
  import threading
  import pytest
  import pandas
  import decimal
  from decimal import Decimal, getcontext
  from time import sleep
  import heapq
  from base.client_base import TestcaseBase
  from utils.util_log import test_log
  from common import common_func
  from common import common_type
  from common.common_type import CaseLabel, CheckTasks
  from utils.util_pymilvus import *
  from common.constants import *
  from pymilvus.orm.types import CONSISTENCY_STRONG, CONSISTENCY_BOUNDED, CONSISTENCY_SESSION, CONSISTENCY_EVENTUALLY
  from base.high_level_api_wrapper import HighLevelApiWrapper
label_desc: Use image node_id 10 for calling the TestHighLevelApi obj's underlying member method code with example usage: obj.test_high_level_search_query_string() without return types