diff --git a/pom.xml b/pom.xml
index 95009f8..cd93bd1 100755
--- a/pom.xml
+++ b/pom.xml
@@ -120,8 +120,8 @@
         <artifactId>maven-compiler-plugin</artifactId>  
         <version>2.3.2</version>  
         <configuration> 
-          <source>1.6</source>  
-          <target>1.6</target>  
+          <source>1.8</source>
+          <target>1.8</target>
           <encoding>UTF-8</encoding> 
         </configuration> 
       </plugin>  
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/OTSProtocolParser.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/OTSProtocolParser.java
index a5ad78d..d77b2e1 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/OTSProtocolParser.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/OTSProtocolParser.java
@@ -2,6 +2,7 @@
 
 import com.alicloud.openservices.tablestore.ClientException;
 import com.alicloud.openservices.tablestore.model.*;
+import com.alicloud.openservices.tablestore.model.search.SyncStat;
 import com.alicloud.openservices.tablestore.model.sql.SQLPayloadVersion;
 import com.alicloud.openservices.tablestore.model.sql.SQLStatementType;
 
@@ -86,6 +87,13 @@ public static IndexUpdateMode parseIndexUpdateMode(OtsInternalApi.IndexUpdateMod
         }
     }
 
+    public static SyncStat.SyncPhase parseIndexSyncPhase(OtsInternalApi.IndexSyncPhase indexSyncPhase) {
+        if (indexSyncPhase == OtsInternalApi.IndexSyncPhase.ISP_INCR) {
+            return SyncStat.SyncPhase.INCR;
+        }
+        return SyncStat.SyncPhase.FULL;
+    }
+
     public static IndexMeta parseIndexMeta(OtsInternalApi.IndexMeta indexMeta) {
         IndexMeta result = new IndexMeta(indexMeta.getName());
         for (String pk : indexMeta.getPrimaryKeyList()) {
@@ -96,6 +104,9 @@ public static IndexMeta parseIndexMeta(OtsInternalApi.IndexMeta indexMeta) {
         }
         result.setIndexType(parseIndexType(indexMeta.getIndexType()));
         result.setIndexUpdateMode(parseIndexUpdateMode(indexMeta.getIndexUpdateMode()));
+        if (indexMeta.hasIndexSyncPhase()) {
+            result.setIndexSyncPhase(parseIndexSyncPhase(indexMeta.getIndexSyncPhase()));
+        }
 
         return result;
     }
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/OtsInternalApi.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/OtsInternalApi.java
index 84796b6..ca0d801 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/OtsInternalApi.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/OtsInternalApi.java
@@ -362,6 +362,78 @@ private IndexType(int index, int value) {
     // @@protoc_insertion_point(enum_scope:com.alicloud.openservices.tablestore.core.protocol.IndexType)
   }
   
+  public enum IndexSyncPhase
+      implements com.google.protobuf.ProtocolMessageEnum {
+    ISP_INVALID(0, 0),
+    ISP_FULL(1, 1),
+    ISP_INCR(2, 2),
+    ;
+    
+    public static final int ISP_INVALID_VALUE = 0;
+    public static final int ISP_FULL_VALUE = 1;
+    public static final int ISP_INCR_VALUE = 2;
+    
+    
+    public final int getNumber() { return value; }
+    
+    public static IndexSyncPhase valueOf(int value) {
+      switch (value) {
+        case 0: return ISP_INVALID;
+        case 1: return ISP_FULL;
+        case 2: return ISP_INCR;
+        default: return null;
+      }
+    }
+    
+    public static com.google.protobuf.Internal.EnumLiteMap<IndexSyncPhase>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static com.google.protobuf.Internal.EnumLiteMap<IndexSyncPhase>
+        internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<IndexSyncPhase>() {
+            public IndexSyncPhase findValueByNumber(int number) {
+              return IndexSyncPhase.valueOf(number);
+            }
+          };
+    
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      return getDescriptor().getValues().get(index);
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(5);
+    }
+    
+    private static final IndexSyncPhase[] VALUES = {
+      ISP_INVALID, ISP_FULL, ISP_INCR, 
+    };
+    
+    public static IndexSyncPhase valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      return VALUES[desc.getIndex()];
+    }
+    
+    private final int index;
+    private final int value;
+    
+    private IndexSyncPhase(int index, int value) {
+      this.index = index;
+      this.value = value;
+    }
+    
+    // @@protoc_insertion_point(enum_scope:com.alicloud.openservices.tablestore.core.protocol.IndexSyncPhase)
+  }
+  
   public enum RowExistenceExpectation
       implements com.google.protobuf.ProtocolMessageEnum {
     IGNORE(0, 0),
@@ -407,7 +479,7 @@ public RowExistenceExpectation findValueByNumber(int number) {
     }
     public static final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(5);
+      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(6);
     }
     
     private static final RowExistenceExpectation[] VALUES = {
@@ -476,7 +548,7 @@ public SSEKeyType findValueByNumber(int number) {
     }
     public static final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(6);
+      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(7);
     }
     
     private static final SSEKeyType[] VALUES = {
@@ -548,7 +620,7 @@ public ReturnType findValueByNumber(int number) {
     }
     public static final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(7);
+      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(8);
     }
     
     private static final ReturnType[] VALUES = {
@@ -620,7 +692,7 @@ public OperationType findValueByNumber(int number) {
     }
     public static final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(8);
+      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(9);
     }
     
     private static final OperationType[] VALUES = {
@@ -689,7 +761,7 @@ public Direction findValueByNumber(int number) {
     }
     public static final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(9);
+      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(10);
     }
     
     private static final Direction[] VALUES = {
@@ -758,7 +830,7 @@ public StreamStatus findValueByNumber(int number) {
     }
     public static final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(10);
+      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(11);
     }
     
     private static final StreamStatus[] VALUES = {
@@ -830,7 +902,7 @@ public ActionType findValueByNumber(int number) {
     }
     public static final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(11);
+      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(12);
     }
     
     private static final ActionType[] VALUES = {
@@ -899,7 +971,7 @@ public DataBlockType findValueByNumber(int number) {
     }
     public static final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(12);
+      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(13);
     }
     
     private static final DataBlockType[] VALUES = {
@@ -968,7 +1040,7 @@ public SQLPayloadVersion findValueByNumber(int number) {
     }
     public static final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(13);
+      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(14);
     }
     
     private static final SQLPayloadVersion[] VALUES = {
@@ -1049,7 +1121,7 @@ public SQLStatementType findValueByNumber(int number) {
     }
     public static final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(14);
+      return com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor().getEnumTypes().get(15);
     }
     
     private static final SQLStatementType[] VALUES = {
@@ -3483,6 +3555,10 @@ public interface IndexMetaOrBuilder
     // required .com.alicloud.openservices.tablestore.core.protocol.IndexType index_type = 5;
     boolean hasIndexType();
     com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexType getIndexType();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.IndexSyncPhase index_sync_phase = 6;
+    boolean hasIndexSyncPhase();
+    com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexSyncPhase getIndexSyncPhase();
   }
   public static final class IndexMeta extends
       com.google.protobuf.GeneratedMessage
@@ -3593,12 +3669,23 @@ public com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexTy
       return indexType_;
     }
     
+    // optional .com.alicloud.openservices.tablestore.core.protocol.IndexSyncPhase index_sync_phase = 6;
+    public static final int INDEX_SYNC_PHASE_FIELD_NUMBER = 6;
+    private com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexSyncPhase indexSyncPhase_;
+    public boolean hasIndexSyncPhase() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexSyncPhase getIndexSyncPhase() {
+      return indexSyncPhase_;
+    }
+    
     private void initFields() {
       name_ = "";
       primaryKey_ = com.google.protobuf.LazyStringArrayList.EMPTY;
       definedColumn_ = com.google.protobuf.LazyStringArrayList.EMPTY;
       indexUpdateMode_ = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexUpdateMode.IUM_ASYNC_INDEX;
       indexType_ = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexType.IT_GLOBAL_INDEX;
+      indexSyncPhase_ = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexSyncPhase.ISP_INVALID;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -3639,6 +3726,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
         output.writeEnum(5, indexType_.getNumber());
       }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeEnum(6, indexSyncPhase_.getNumber());
+      }
       getUnknownFields().writeTo(output);
     }
     
@@ -3678,6 +3768,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeEnumSize(5, indexType_.getNumber());
       }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(6, indexSyncPhase_.getNumber());
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -3812,6 +3906,8 @@ public Builder clear() {
         bitField0_ = (bitField0_ & ~0x00000008);
         indexType_ = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexType.IT_GLOBAL_INDEX;
         bitField0_ = (bitField0_ & ~0x00000010);
+        indexSyncPhase_ = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexSyncPhase.ISP_INVALID;
+        bitField0_ = (bitField0_ & ~0x00000020);
         return this;
       }
       
@@ -3874,6 +3970,10 @@ public com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexMe
           to_bitField0_ |= 0x00000004;
         }
         result.indexType_ = indexType_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.indexSyncPhase_ = indexSyncPhase_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -3919,6 +4019,9 @@ public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.OtsI
         if (other.hasIndexType()) {
           setIndexType(other.getIndexType());
         }
+        if (other.hasIndexSyncPhase()) {
+          setIndexSyncPhase(other.getIndexSyncPhase());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -3999,6 +4102,17 @@ public Builder mergeFrom(
               }
               break;
             }
+            case 48: {
+              int rawValue = input.readEnum();
+              com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexSyncPhase value = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexSyncPhase.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(6, rawValue);
+              } else {
+                bitField0_ |= 0x00000020;
+                indexSyncPhase_ = value;
+              }
+              break;
+            }
           }
         }
       }
@@ -4201,6 +4315,30 @@ public Builder clearIndexType() {
         return this;
       }
       
+      // optional .com.alicloud.openservices.tablestore.core.protocol.IndexSyncPhase index_sync_phase = 6;
+      private com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexSyncPhase indexSyncPhase_ = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexSyncPhase.ISP_INVALID;
+      public boolean hasIndexSyncPhase() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexSyncPhase getIndexSyncPhase() {
+        return indexSyncPhase_;
+      }
+      public Builder setIndexSyncPhase(com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexSyncPhase value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000020;
+        indexSyncPhase_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearIndexSyncPhase() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        indexSyncPhase_ = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexSyncPhase.ISP_INVALID;
+        onChanged();
+        return this;
+      }
+      
       // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.IndexMeta)
     }
     
@@ -56639,362 +56777,366 @@ public Builder clearType() {
       "umnType\"w\n\014TableOptions\022\024\n\014time_to_live\030" +
       "\001 \001(\005\022\024\n\014max_versions\030\002 \001(\005\022%\n\035deviation" +
       "_cell_version_in_sec\030\005 \001(\003\022\024\n\014allow_upda" +
-      "te\030\006 \001(\010\"\371\001\n\tIndexMeta\022\014\n\004name\030\001 \002(\t\022\023\n\013" +
+      "te\030\006 \001(\010\"\327\002\n\tIndexMeta\022\014\n\004name\030\001 \002(\t\022\023\n\013" +
       "primary_key\030\002 \003(\t\022\026\n\016defined_column\030\003 \003(" +
       "\t\022^\n\021index_update_mode\030\004 \002(\0162C.com.alicl" +
       "oud.openservices.tablestore.core.protoco" +
       "l.IndexUpdateMode\022Q\n\nindex_type\030\005 \002(\0162=.",
       "com.alicloud.openservices.tablestore.cor" +
-      "e.protocol.IndexType\"\333\001\n\tTableMeta\022\022\n\nta" +
-      "ble_name\030\001 \002(\t\022Y\n\013primary_key\030\002 \003(\0132D.co" +
-      "m.alicloud.openservices.tablestore.core." +
-      "protocol.PrimaryKeySchema\022_\n\016defined_col" +
-      "umn\030\003 \003(\0132G.com.alicloud.openservices.ta" +
-      "blestore.core.protocol.DefinedColumnSche" +
-      "ma\"\211\001\n\tCondition\022b\n\rrow_existence\030\001 \002(\0162" +
-      "K.com.alicloud.openservices.tablestore.c" +
-      "ore.protocol.RowExistenceExpectation\022\030\n\020",
-      "column_condition\030\002 \001(\014\"+\n\014CapacityUnit\022\014" +
-      "\n\004read\030\001 \001(\005\022\r\n\005write\030\002 \001(\005\"9\n\020CapacityD" +
-      "ataSize\022\021\n\tread_size\030\001 \001(\003\022\022\n\nwrite_size" +
-      "\030\002 \001(\003\"\254\001\n\031ReservedThroughputDetails\022W\n\r" +
-      "capacity_unit\030\001 \002(\0132@.com.alicloud.opens" +
-      "ervices.tablestore.core.protocol.Capacit" +
-      "yUnit\022\032\n\022last_increase_time\030\002 \002(\003\022\032\n\022las" +
-      "t_decrease_time\030\003 \001(\003\"m\n\022ReservedThrough" +
-      "put\022W\n\rcapacity_unit\030\001 \002(\0132@.com.aliclou" +
-      "d.openservices.tablestore.core.protocol.",
-      "CapacityUnit\"\315\001\n\020ConsumedCapacity\022W\n\rcap" +
-      "acity_unit\030\001 \002(\0132@.com.alicloud.openserv" +
-      "ices.tablestore.core.protocol.CapacityUn" +
-      "it\022`\n\022capacity_data_size\030\002 \001(\0132D.com.ali" +
-      "cloud.openservices.tablestore.core.proto" +
-      "col.CapacityDataSize\"]\n\023StreamSpecificat" +
-      "ion\022\025\n\renable_stream\030\001 \002(\010\022\027\n\017expiration" +
-      "_time\030\002 \001(\005\022\026\n\016columns_to_get\030\003 \003(\t\"\203\001\n\r" +
-      "StreamDetails\022\025\n\renable_stream\030\001 \002(\010\022\021\n\t" +
-      "stream_id\030\002 \001(\t\022\027\n\017expiration_time\030\003 \001(\005",
-      "\022\030\n\020last_enable_time\030\004 \001(\003\022\025\n\rcolumn_to_" +
-      "get\030\005 \003(\t\"\226\001\n\020SSESpecification\022\016\n\006enable" +
-      "\030\001 \002(\010\022P\n\010key_type\030\002 \001(\0162>.com.alicloud." +
-      "openservices.tablestore.core.protocol.SS" +
-      "EKeyType\022\016\n\006key_id\030\003 \001(\014\022\020\n\010role_arn\030\004 \001" +
-      "(\014\"\220\001\n\nSSEDetails\022\016\n\006enable\030\001 \002(\010\022P\n\010key" +
-      "_type\030\002 \001(\0162>.com.alicloud.openservices." +
-      "tablestore.core.protocol.SSEKeyType\022\016\n\006k" +
-      "ey_id\030\003 \001(\014\022\020\n\010role_arn\030\004 \001(\014\"\241\005\n\022Create" +
-      "TableRequest\022Q\n\ntable_meta\030\001 \002(\0132=.com.a",
-      "licloud.openservices.tablestore.core.pro" +
-      "tocol.TableMeta\022c\n\023reserved_throughput\030\002" +
-      " \002(\0132F.com.alicloud.openservices.tablest" +
-      "ore.core.protocol.ReservedThroughput\022W\n\r" +
-      "table_options\030\003 \001(\0132@.com.alicloud.opens" +
-      "ervices.tablestore.core.protocol.TableOp" +
-      "tions\022V\n\npartitions\030\004 \003(\0132B.com.alicloud" +
-      ".openservices.tablestore.core.protocol.P" +
-      "artitionRange\022\\\n\013stream_spec\030\005 \001(\0132G.com" +
-      ".alicloud.openservices.tablestore.core.p",
-      "rotocol.StreamSpecification\022V\n\010sse_spec\030" +
-      "\006 \001(\0132D.com.alicloud.openservices.tables" +
-      "tore.core.protocol.SSESpecification\022R\n\013i" +
-      "ndex_metas\030\007 \003(\0132=.com.alicloud.openserv" +
-      "ices.tablestore.core.protocol.IndexMeta\022" +
-      "\030\n\020enable_local_txn\030\010 \001(\010\"\025\n\023CreateTable" +
-      "Response\"\233\001\n\022CreateIndexRequest\022\027\n\017main_" +
-      "table_name\030\001 \002(\t\022Q\n\nindex_meta\030\002 \002(\0132=.c" +
-      "om.alicloud.openservices.tablestore.core" +
-      ".protocol.IndexMeta\022\031\n\021include_base_data",
-      "\030\003 \001(\010\"\025\n\023CreateIndexResponse\"?\n\020DropInd" +
-      "exRequest\022\027\n\017main_table_name\030\001 \002(\t\022\022\n\nin" +
-      "dex_name\030\002 \002(\t\"\023\n\021DropIndexResponse\"\207\001\n\027" +
-      "AddDefinedColumnRequest\022\022\n\ntable_name\030\001 " +
-      "\002(\t\022X\n\007columns\030\002 \003(\0132G.com.alicloud.open" +
-      "services.tablestore.core.protocol.Define" +
-      "dColumnSchema\"\032\n\030AddDefinedColumnRespons" +
-      "e\"A\n\032DeleteDefinedColumnRequest\022\022\n\ntable" +
-      "_name\030\001 \002(\t\022\017\n\007columns\030\002 \003(\t\"\035\n\033DeleteDe" +
-      "finedColumnResponse\"\304\002\n\022UpdateTableReque",
-      "st\022\022\n\ntable_name\030\001 \002(\t\022c\n\023reserved_throu" +
-      "ghput\030\002 \001(\0132F.com.alicloud.openservices." +
-      "tablestore.core.protocol.ReservedThrough" +
-      "put\022W\n\rtable_options\030\003 \001(\0132@.com.aliclou" +
-      "d.openservices.tablestore.core.protocol." +
-      "TableOptions\022\\\n\013stream_spec\030\004 \001(\0132G.com." +
+      "e.protocol.IndexType\022\\\n\020index_sync_phase" +
+      "\030\006 \001(\0162B.com.alicloud.openservices.table" +
+      "store.core.protocol.IndexSyncPhase\"\333\001\n\tT" +
+      "ableMeta\022\022\n\ntable_name\030\001 \002(\t\022Y\n\013primary_" +
+      "key\030\002 \003(\0132D.com.alicloud.openservices.ta" +
+      "blestore.core.protocol.PrimaryKeySchema\022" +
+      "_\n\016defined_column\030\003 \003(\0132G.com.alicloud.o" +
+      "penservices.tablestore.core.protocol.Def" +
+      "inedColumnSchema\"\211\001\n\tCondition\022b\n\rrow_ex",
+      "istence\030\001 \002(\0162K.com.alicloud.openservice" +
+      "s.tablestore.core.protocol.RowExistenceE" +
+      "xpectation\022\030\n\020column_condition\030\002 \001(\014\"+\n\014" +
+      "CapacityUnit\022\014\n\004read\030\001 \001(\005\022\r\n\005write\030\002 \001(" +
+      "\005\"9\n\020CapacityDataSize\022\021\n\tread_size\030\001 \001(\003" +
+      "\022\022\n\nwrite_size\030\002 \001(\003\"\254\001\n\031ReservedThrough" +
+      "putDetails\022W\n\rcapacity_unit\030\001 \002(\0132@.com." +
       "alicloud.openservices.tablestore.core.pr" +
-      "otocol.StreamSpecification\"\275\002\n\023UpdateTab" +
-      "leResponse\022r\n\033reserved_throughput_detail" +
-      "s\030\001 \002(\0132M.com.alicloud.openservices.tabl",
-      "estore.core.protocol.ReservedThroughputD" +
-      "etails\022W\n\rtable_options\030\002 \002(\0132@.com.alic" +
-      "loud.openservices.tablestore.core.protoc" +
-      "ol.TableOptions\022Y\n\016stream_details\030\003 \001(\0132" +
-      "A.com.alicloud.openservices.tablestore.c" +
-      "ore.protocol.StreamDetails\"*\n\024DescribeTa" +
-      "bleRequest\022\022\n\ntable_name\030\001 \002(\t\"\350\004\n\025Descr" +
-      "ibeTableResponse\022Q\n\ntable_meta\030\001 \002(\0132=.c" +
-      "om.alicloud.openservices.tablestore.core" +
-      ".protocol.TableMeta\022r\n\033reserved_throughp",
-      "ut_details\030\002 \002(\0132M.com.alicloud.openserv" +
-      "ices.tablestore.core.protocol.ReservedTh" +
-      "roughputDetails\022W\n\rtable_options\030\003 \002(\0132@" +
-      ".com.alicloud.openservices.tablestore.co" +
-      "re.protocol.TableOptions\022Y\n\016stream_detai" +
-      "ls\030\005 \001(\0132A.com.alicloud.openservices.tab" +
-      "lestore.core.protocol.StreamDetails\022\024\n\014s" +
-      "hard_splits\030\006 \003(\014\022S\n\013sse_details\030\007 \001(\0132>" +
-      ".com.alicloud.openservices.tablestore.co" +
-      "re.protocol.SSEDetails\022R\n\013index_metas\030\010 ",
-      "\003(\0132=.com.alicloud.openservices.tablesto" +
-      "re.core.protocol.IndexMeta\022\025\n\rcreation_t" +
-      "ime\030\t \001(\003\"\022\n\020ListTableRequest\"(\n\021ListTab" +
-      "leResponse\022\023\n\013table_names\030\001 \003(\t\"(\n\022Delet" +
-      "eTableRequest\022\022\n\ntable_name\030\001 \002(\t\"\025\n\023Del" +
-      "eteTableResponse\"&\n\020LoadTableRequest\022\022\n\n" +
-      "table_name\030\001 \002(\t\"\023\n\021LoadTableResponse\"(\n" +
-      "\022UnloadTableRequest\022\022\n\ntable_name\030\001 \002(\t\"" +
-      "\025\n\023UnloadTableResponse\"H\n\tTimeRange\022\022\n\ns" +
-      "tart_time\030\001 \001(\003\022\020\n\010end_time\030\002 \001(\003\022\025\n\rspe",
-      "cific_time\030\003 \001(\003\"\201\001\n\rReturnContent\022S\n\013re" +
-      "turn_type\030\001 \001(\0162>.com.alicloud.openservi" +
-      "ces.tablestore.core.protocol.ReturnType\022" +
-      "\033\n\023return_column_names\030\002 \003(\t\"\232\002\n\rGetRowR" +
-      "equest\022\022\n\ntable_name\030\001 \002(\t\022\023\n\013primary_ke" +
-      "y\030\002 \002(\014\022\026\n\016columns_to_get\030\003 \003(\t\022Q\n\ntime_" +
-      "range\030\004 \001(\0132=.com.alicloud.openservices." +
-      "tablestore.core.protocol.TimeRange\022\024\n\014ma" +
-      "x_versions\030\005 \001(\005\022\016\n\006filter\030\007 \001(\014\022\024\n\014star" +
-      "t_column\030\010 \001(\t\022\022\n\nend_column\030\t \001(\t\022\r\n\005to",
-      "ken\030\n \001(\014\022\026\n\016transaction_id\030\013 \001(\t\"\211\001\n\016Ge" +
-      "tRowResponse\022V\n\010consumed\030\001 \002(\0132D.com.ali" +
+      "otocol.CapacityUnit\022\032\n\022last_increase_tim" +
+      "e\030\002 \002(\003\022\032\n\022last_decrease_time\030\003 \001(\003\"m\n\022R",
+      "eservedThroughput\022W\n\rcapacity_unit\030\001 \002(\013" +
+      "2@.com.alicloud.openservices.tablestore." +
+      "core.protocol.CapacityUnit\"\315\001\n\020ConsumedC" +
+      "apacity\022W\n\rcapacity_unit\030\001 \002(\0132@.com.ali" +
       "cloud.openservices.tablestore.core.proto" +
-      "col.ConsumedCapacity\022\013\n\003row\030\002 \002(\014\022\022\n\nnex" +
-      "t_token\030\003 \001(\014\"\377\001\n\020UpdateRowRequest\022\022\n\nta" +
-      "ble_name\030\001 \002(\t\022\022\n\nrow_change\030\002 \002(\014\022P\n\tco" +
-      "ndition\030\003 \002(\0132=.com.alicloud.openservice" +
-      "s.tablestore.core.protocol.Condition\022Y\n\016" +
-      "return_content\030\004 \001(\0132A.com.alicloud.open" +
-      "services.tablestore.core.protocol.Return",
-      "Content\022\026\n\016transaction_id\030\005 \001(\t\"x\n\021Updat" +
-      "eRowResponse\022V\n\010consumed\030\001 \002(\0132D.com.ali" +
-      "cloud.openservices.tablestore.core.proto" +
-      "col.ConsumedCapacity\022\013\n\003row\030\002 \001(\014\"\365\001\n\rPu" +
-      "tRowRequest\022\022\n\ntable_name\030\001 \002(\t\022\013\n\003row\030\002" +
-      " \002(\014\022P\n\tcondition\030\003 \002(\0132=.com.alicloud.o" +
-      "penservices.tablestore.core.protocol.Con" +
-      "dition\022Y\n\016return_content\030\004 \001(\0132A.com.ali" +
+      "col.CapacityUnit\022`\n\022capacity_data_size\030\002" +
+      " \001(\0132D.com.alicloud.openservices.tablest" +
+      "ore.core.protocol.CapacityDataSize\"]\n\023St" +
+      "reamSpecification\022\025\n\renable_stream\030\001 \002(\010" +
+      "\022\027\n\017expiration_time\030\002 \001(\005\022\026\n\016columns_to_",
+      "get\030\003 \003(\t\"\203\001\n\rStreamDetails\022\025\n\renable_st" +
+      "ream\030\001 \002(\010\022\021\n\tstream_id\030\002 \001(\t\022\027\n\017expirat" +
+      "ion_time\030\003 \001(\005\022\030\n\020last_enable_time\030\004 \001(\003" +
+      "\022\025\n\rcolumn_to_get\030\005 \003(\t\"\226\001\n\020SSESpecifica" +
+      "tion\022\016\n\006enable\030\001 \002(\010\022P\n\010key_type\030\002 \001(\0162>" +
+      ".com.alicloud.openservices.tablestore.co" +
+      "re.protocol.SSEKeyType\022\016\n\006key_id\030\003 \001(\014\022\020" +
+      "\n\010role_arn\030\004 \001(\014\"\220\001\n\nSSEDetails\022\016\n\006enabl" +
+      "e\030\001 \002(\010\022P\n\010key_type\030\002 \001(\0162>.com.alicloud" +
+      ".openservices.tablestore.core.protocol.S",
+      "SEKeyType\022\016\n\006key_id\030\003 \001(\014\022\020\n\010role_arn\030\004 " +
+      "\001(\014\"\241\005\n\022CreateTableRequest\022Q\n\ntable_meta" +
+      "\030\001 \002(\0132=.com.alicloud.openservices.table" +
+      "store.core.protocol.TableMeta\022c\n\023reserve" +
+      "d_throughput\030\002 \002(\0132F.com.alicloud.opense" +
+      "rvices.tablestore.core.protocol.Reserved" +
+      "Throughput\022W\n\rtable_options\030\003 \001(\0132@.com." +
+      "alicloud.openservices.tablestore.core.pr" +
+      "otocol.TableOptions\022V\n\npartitions\030\004 \003(\0132" +
+      "B.com.alicloud.openservices.tablestore.c",
+      "ore.protocol.PartitionRange\022\\\n\013stream_sp" +
+      "ec\030\005 \001(\0132G.com.alicloud.openservices.tab" +
+      "lestore.core.protocol.StreamSpecificatio" +
+      "n\022V\n\010sse_spec\030\006 \001(\0132D.com.alicloud.opens" +
+      "ervices.tablestore.core.protocol.SSESpec" +
+      "ification\022R\n\013index_metas\030\007 \003(\0132=.com.ali" +
       "cloud.openservices.tablestore.core.proto" +
-      "col.ReturnContent\022\026\n\016transaction_id\030\005 \001(",
-      "\t\"u\n\016PutRowResponse\022V\n\010consumed\030\001 \002(\0132D." +
-      "com.alicloud.openservices.tablestore.cor" +
-      "e.protocol.ConsumedCapacity\022\013\n\003row\030\002 \001(\014" +
-      "\"\200\002\n\020DeleteRowRequest\022\022\n\ntable_name\030\001 \002(" +
-      "\t\022\023\n\013primary_key\030\002 \002(\014\022P\n\tcondition\030\003 \002(" +
-      "\0132=.com.alicloud.openservices.tablestore" +
-      ".core.protocol.Condition\022Y\n\016return_conte" +
-      "nt\030\004 \001(\0132A.com.alicloud.openservices.tab" +
-      "lestore.core.protocol.ReturnContent\022\026\n\016t" +
-      "ransaction_id\030\005 \001(\t\"x\n\021DeleteRowResponse",
-      "\022V\n\010consumed\030\001 \002(\0132D.com.alicloud.opense" +
-      "rvices.tablestore.core.protocol.Consumed" +
-      "Capacity\022\013\n\003row\030\002 \001(\014\"\216\002\n\031TableInBatchGe" +
-      "tRowRequest\022\022\n\ntable_name\030\001 \002(\t\022\023\n\013prima" +
-      "ry_key\030\002 \003(\014\022\r\n\005token\030\003 \003(\014\022\026\n\016columns_t" +
-      "o_get\030\004 \003(\t\022Q\n\ntime_range\030\005 \001(\0132=.com.al" +
-      "icloud.openservices.tablestore.core.prot" +
-      "ocol.TimeRange\022\024\n\014max_versions\030\006 \001(\005\022\016\n\006" +
-      "filter\030\010 \001(\014\022\024\n\014start_column\030\t \001(\t\022\022\n\nen" +
-      "d_column\030\n \001(\t\"s\n\022BatchGetRowRequest\022]\n\006",
-      "tables\030\001 \003(\0132M.com.alicloud.openservices" +
-      ".tablestore.core.protocol.TableInBatchGe" +
-      "tRowRequest\"\354\001\n\030RowInBatchGetRowResponse" +
-      "\022\r\n\005is_ok\030\001 \002(\010\022H\n\005error\030\002 \001(\01329.com.ali" +
+      "col.IndexMeta\022\030\n\020enable_local_txn\030\010 \001(\010\"" +
+      "\025\n\023CreateTableResponse\"\233\001\n\022CreateIndexRe" +
+      "quest\022\027\n\017main_table_name\030\001 \002(\t\022Q\n\nindex_",
+      "meta\030\002 \002(\0132=.com.alicloud.openservices.t" +
+      "ablestore.core.protocol.IndexMeta\022\031\n\021inc" +
+      "lude_base_data\030\003 \001(\010\"\025\n\023CreateIndexRespo" +
+      "nse\"?\n\020DropIndexRequest\022\027\n\017main_table_na" +
+      "me\030\001 \002(\t\022\022\n\nindex_name\030\002 \002(\t\"\023\n\021DropInde" +
+      "xResponse\"\207\001\n\027AddDefinedColumnRequest\022\022\n" +
+      "\ntable_name\030\001 \002(\t\022X\n\007columns\030\002 \003(\0132G.com" +
+      ".alicloud.openservices.tablestore.core.p" +
+      "rotocol.DefinedColumnSchema\"\032\n\030AddDefine" +
+      "dColumnResponse\"A\n\032DeleteDefinedColumnRe",
+      "quest\022\022\n\ntable_name\030\001 \002(\t\022\017\n\007columns\030\002 \003" +
+      "(\t\"\035\n\033DeleteDefinedColumnResponse\"\304\002\n\022Up" +
+      "dateTableRequest\022\022\n\ntable_name\030\001 \002(\t\022c\n\023" +
+      "reserved_throughput\030\002 \001(\0132F.com.alicloud" +
+      ".openservices.tablestore.core.protocol.R" +
+      "eservedThroughput\022W\n\rtable_options\030\003 \001(\013" +
+      "2@.com.alicloud.openservices.tablestore." +
+      "core.protocol.TableOptions\022\\\n\013stream_spe" +
+      "c\030\004 \001(\0132G.com.alicloud.openservices.tabl" +
+      "estore.core.protocol.StreamSpecification",
+      "\"\275\002\n\023UpdateTableResponse\022r\n\033reserved_thr" +
+      "oughput_details\030\001 \002(\0132M.com.alicloud.ope" +
+      "nservices.tablestore.core.protocol.Reser" +
+      "vedThroughputDetails\022W\n\rtable_options\030\002 " +
+      "\002(\0132@.com.alicloud.openservices.tablesto" +
+      "re.core.protocol.TableOptions\022Y\n\016stream_" +
+      "details\030\003 \001(\0132A.com.alicloud.openservice" +
+      "s.tablestore.core.protocol.StreamDetails" +
+      "\"*\n\024DescribeTableRequest\022\022\n\ntable_name\030\001" +
+      " \002(\t\"\350\004\n\025DescribeTableResponse\022Q\n\ntable_",
+      "meta\030\001 \002(\0132=.com.alicloud.openservices.t" +
+      "ablestore.core.protocol.TableMeta\022r\n\033res" +
+      "erved_throughput_details\030\002 \002(\0132M.com.ali" +
       "cloud.openservices.tablestore.core.proto" +
-      "col.Error\022V\n\010consumed\030\003 \001(\0132D.com.aliclo" +
-      "ud.openservices.tablestore.core.protocol" +
-      ".ConsumedCapacity\022\013\n\003row\030\004 \001(\014\022\022\n\nnext_t" +
-      "oken\030\005 \001(\014\"\214\001\n\032TableInBatchGetRowRespons" +
-      "e\022\022\n\ntable_name\030\001 \002(\t\022Z\n\004rows\030\002 \003(\0132L.co",
-      "m.alicloud.openservices.tablestore.core." +
-      "protocol.RowInBatchGetRowResponse\"u\n\023Bat" +
-      "chGetRowResponse\022^\n\006tables\030\001 \003(\0132N.com.a" +
-      "licloud.openservices.tablestore.core.pro" +
-      "tocol.TableInBatchGetRowResponse\"\255\002\n\031Row" +
-      "InBatchWriteRowRequest\022O\n\004type\030\001 \002(\0162A.c" +
-      "om.alicloud.openservices.tablestore.core" +
-      ".protocol.OperationType\022\022\n\nrow_change\030\002 " +
-      "\002(\014\022P\n\tcondition\030\003 \002(\0132=.com.alicloud.op" +
-      "enservices.tablestore.core.protocol.Cond",
-      "ition\022Y\n\016return_content\030\004 \001(\0132A.com.alic" +
+      "col.ReservedThroughputDetails\022W\n\rtable_o" +
+      "ptions\030\003 \002(\0132@.com.alicloud.openservices" +
+      ".tablestore.core.protocol.TableOptions\022Y" +
+      "\n\016stream_details\030\005 \001(\0132A.com.alicloud.op" +
+      "enservices.tablestore.core.protocol.Stre" +
+      "amDetails\022\024\n\014shard_splits\030\006 \003(\014\022S\n\013sse_d",
+      "etails\030\007 \001(\0132>.com.alicloud.openservices" +
+      ".tablestore.core.protocol.SSEDetails\022R\n\013" +
+      "index_metas\030\010 \003(\0132=.com.alicloud.openser" +
+      "vices.tablestore.core.protocol.IndexMeta" +
+      "\022\025\n\rcreation_time\030\t \001(\003\"\022\n\020ListTableRequ" +
+      "est\"(\n\021ListTableResponse\022\023\n\013table_names\030" +
+      "\001 \003(\t\"(\n\022DeleteTableRequest\022\022\n\ntable_nam" +
+      "e\030\001 \002(\t\"\025\n\023DeleteTableResponse\"&\n\020LoadTa" +
+      "bleRequest\022\022\n\ntable_name\030\001 \002(\t\"\023\n\021LoadTa" +
+      "bleResponse\"(\n\022UnloadTableRequest\022\022\n\ntab",
+      "le_name\030\001 \002(\t\"\025\n\023UnloadTableResponse\"H\n\t" +
+      "TimeRange\022\022\n\nstart_time\030\001 \001(\003\022\020\n\010end_tim" +
+      "e\030\002 \001(\003\022\025\n\rspecific_time\030\003 \001(\003\"\201\001\n\rRetur" +
+      "nContent\022S\n\013return_type\030\001 \001(\0162>.com.alic" +
       "loud.openservices.tablestore.core.protoc" +
-      "ol.ReturnContent\"\216\001\n\033TableInBatchWriteRo" +
-      "wRequest\022\022\n\ntable_name\030\001 \002(\t\022[\n\004rows\030\002 \003" +
-      "(\0132M.com.alicloud.openservices.tablestor" +
-      "e.core.protocol.RowInBatchWriteRowReques" +
-      "t\"\242\001\n\024BatchWriteRowRequest\022_\n\006tables\030\001 \003" +
-      "(\0132O.com.alicloud.openservices.tablestor" +
-      "e.core.protocol.TableInBatchWriteRowRequ" +
-      "est\022\026\n\016transaction_id\030\002 \001(\t\022\021\n\tis_atomic",
-      "\030\003 \001(\010\"\332\001\n\032RowInBatchWriteRowResponse\022\r\n" +
-      "\005is_ok\030\001 \002(\010\022H\n\005error\030\002 \001(\01329.com.aliclo" +
-      "ud.openservices.tablestore.core.protocol" +
-      ".Error\022V\n\010consumed\030\003 \001(\0132D.com.alicloud." +
-      "openservices.tablestore.core.protocol.Co" +
-      "nsumedCapacity\022\013\n\003row\030\004 \001(\014\"\220\001\n\034TableInB" +
-      "atchWriteRowResponse\022\022\n\ntable_name\030\001 \002(\t" +
-      "\022\\\n\004rows\030\002 \003(\0132N.com.alicloud.openservic" +
-      "es.tablestore.core.protocol.RowInBatchWr" +
-      "iteRowResponse\"y\n\025BatchWriteRowResponse\022",
-      "`\n\006tables\030\001 \003(\0132P.com.alicloud.openservi" +
-      "ces.tablestore.core.protocol.TableInBatc" +
-      "hWriteRowResponse\"\260\003\n\017GetRangeRequest\022\022\n" +
-      "\ntable_name\030\001 \002(\t\022P\n\tdirection\030\002 \002(\0162=.c" +
-      "om.alicloud.openservices.tablestore.core" +
-      ".protocol.Direction\022\026\n\016columns_to_get\030\003 " +
-      "\003(\t\022Q\n\ntime_range\030\004 \001(\0132=.com.alicloud.o" +
-      "penservices.tablestore.core.protocol.Tim" +
-      "eRange\022\024\n\014max_versions\030\005 \001(\005\022\r\n\005limit\030\006 " +
-      "\001(\005\022#\n\033inclusive_start_primary_key\030\007 \002(\014",
-      "\022!\n\031exclusive_end_primary_key\030\010 \002(\014\022\016\n\006f" +
-      "ilter\030\n \001(\014\022\024\n\014start_column\030\013 \001(\t\022\022\n\nend" +
-      "_column\030\014 \001(\t\022\r\n\005token\030\r \001(\014\022\026\n\016transact" +
-      "ion_id\030\016 \001(\t\"\254\001\n\020GetRangeResponse\022V\n\010con" +
+      "ol.ReturnType\022\033\n\023return_column_names\030\002 \003" +
+      "(\t\"\232\002\n\rGetRowRequest\022\022\n\ntable_name\030\001 \002(\t" +
+      "\022\023\n\013primary_key\030\002 \002(\014\022\026\n\016columns_to_get\030" +
+      "\003 \003(\t\022Q\n\ntime_range\030\004 \001(\0132=.com.alicloud" +
+      ".openservices.tablestore.core.protocol.T",
+      "imeRange\022\024\n\014max_versions\030\005 \001(\005\022\016\n\006filter" +
+      "\030\007 \001(\014\022\024\n\014start_column\030\010 \001(\t\022\022\n\nend_colu" +
+      "mn\030\t \001(\t\022\r\n\005token\030\n \001(\014\022\026\n\016transaction_i" +
+      "d\030\013 \001(\t\"\211\001\n\016GetRowResponse\022V\n\010consumed\030\001" +
+      " \002(\0132D.com.alicloud.openservices.tablest" +
+      "ore.core.protocol.ConsumedCapacity\022\013\n\003ro" +
+      "w\030\002 \002(\014\022\022\n\nnext_token\030\003 \001(\014\"\377\001\n\020UpdateRo" +
+      "wRequest\022\022\n\ntable_name\030\001 \002(\t\022\022\n\nrow_chan" +
+      "ge\030\002 \002(\014\022P\n\tcondition\030\003 \002(\0132=.com.aliclo" +
+      "ud.openservices.tablestore.core.protocol",
+      ".Condition\022Y\n\016return_content\030\004 \001(\0132A.com" +
+      ".alicloud.openservices.tablestore.core.p" +
+      "rotocol.ReturnContent\022\026\n\016transaction_id\030" +
+      "\005 \001(\t\"x\n\021UpdateRowResponse\022V\n\010consumed\030\001" +
+      " \002(\0132D.com.alicloud.openservices.tablest" +
+      "ore.core.protocol.ConsumedCapacity\022\013\n\003ro" +
+      "w\030\002 \001(\014\"\365\001\n\rPutRowRequest\022\022\n\ntable_name\030" +
+      "\001 \002(\t\022\013\n\003row\030\002 \002(\014\022P\n\tcondition\030\003 \002(\0132=." +
+      "com.alicloud.openservices.tablestore.cor" +
+      "e.protocol.Condition\022Y\n\016return_content\030\004",
+      " \001(\0132A.com.alicloud.openservices.tablest" +
+      "ore.core.protocol.ReturnContent\022\026\n\016trans" +
+      "action_id\030\005 \001(\t\"u\n\016PutRowResponse\022V\n\010con" +
       "sumed\030\001 \002(\0132D.com.alicloud.openservices." +
       "tablestore.core.protocol.ConsumedCapacit" +
-      "y\022\014\n\004rows\030\002 \002(\014\022\036\n\026next_start_primary_ke" +
-      "y\030\003 \001(\014\022\022\n\nnext_token\030\004 \001(\014\"?\n\034StartLoca" +
-      "lTransactionRequest\022\022\n\ntable_name\030\001 \002(\t\022" +
-      "\013\n\003key\030\002 \002(\014\"7\n\035StartLocalTransactionRes",
-      "ponse\022\026\n\016transaction_id\030\001 \002(\t\"2\n\030CommitT" +
-      "ransactionRequest\022\026\n\016transaction_id\030\001 \002(" +
-      "\t\"\033\n\031CommitTransactionResponse\"1\n\027AbortT" +
-      "ransactionRequest\022\026\n\016transaction_id\030\001 \002(" +
-      "\t\"\032\n\030AbortTransactionResponse\"\'\n\021ListStr" +
-      "eamRequest\022\022\n\ntable_name\030\001 \001(\t\"F\n\006Stream" +
-      "\022\021\n\tstream_id\030\001 \002(\t\022\022\n\ntable_name\030\002 \002(\t\022" +
-      "\025\n\rcreation_time\030\003 \002(\003\"a\n\022ListStreamResp" +
-      "onse\022K\n\007streams\030\001 \003(\0132:.com.alicloud.ope" +
-      "nservices.tablestore.core.protocol.Strea",
-      "m\"M\n\013StreamShard\022\020\n\010shard_id\030\001 \002(\t\022\021\n\tpa" +
-      "rent_id\030\002 \001(\t\022\031\n\021parent_sibling_id\030\003 \001(\t" +
-      "\"\210\001\n\025DescribeStreamRequest\022\021\n\tstream_id\030" +
-      "\001 \002(\t\022 \n\030inclusive_start_shard_id\030\002 \001(\t\022" +
-      "\023\n\013shard_limit\030\003 \001(\005\022%\n\035support_timeseri" +
-      "es_data_table\030\004 \001(\010\"\322\002\n\026DescribeStreamRe" +
-      "sponse\022\021\n\tstream_id\030\001 \002(\t\022\027\n\017expiration_" +
-      "time\030\002 \002(\005\022\022\n\ntable_name\030\003 \002(\t\022\025\n\rcreati" +
-      "on_time\030\004 \002(\003\022W\n\rstream_status\030\005 \002(\0162@.c" +
-      "om.alicloud.openservices.tablestore.core",
-      ".protocol.StreamStatus\022O\n\006shards\030\006 \003(\0132?" +
+      "y\022\013\n\003row\030\002 \001(\014\"\200\002\n\020DeleteRowRequest\022\022\n\nt" +
+      "able_name\030\001 \002(\t\022\023\n\013primary_key\030\002 \002(\014\022P\n\t" +
+      "condition\030\003 \002(\0132=.com.alicloud.openservi" +
+      "ces.tablestore.core.protocol.Condition\022Y" +
+      "\n\016return_content\030\004 \001(\0132A.com.alicloud.op",
+      "enservices.tablestore.core.protocol.Retu" +
+      "rnContent\022\026\n\016transaction_id\030\005 \001(\t\"x\n\021Del" +
+      "eteRowResponse\022V\n\010consumed\030\001 \002(\0132D.com.a" +
+      "licloud.openservices.tablestore.core.pro" +
+      "tocol.ConsumedCapacity\022\013\n\003row\030\002 \001(\014\"\216\002\n\031" +
+      "TableInBatchGetRowRequest\022\022\n\ntable_name\030" +
+      "\001 \002(\t\022\023\n\013primary_key\030\002 \003(\014\022\r\n\005token\030\003 \003(" +
+      "\014\022\026\n\016columns_to_get\030\004 \003(\t\022Q\n\ntime_range\030" +
+      "\005 \001(\0132=.com.alicloud.openservices.tables" +
+      "tore.core.protocol.TimeRange\022\024\n\014max_vers",
+      "ions\030\006 \001(\005\022\016\n\006filter\030\010 \001(\014\022\024\n\014start_colu" +
+      "mn\030\t \001(\t\022\022\n\nend_column\030\n \001(\t\"s\n\022BatchGet" +
+      "RowRequest\022]\n\006tables\030\001 \003(\0132M.com.aliclou" +
+      "d.openservices.tablestore.core.protocol." +
+      "TableInBatchGetRowRequest\"\354\001\n\030RowInBatch" +
+      "GetRowResponse\022\r\n\005is_ok\030\001 \002(\010\022H\n\005error\030\002" +
+      " \001(\01329.com.alicloud.openservices.tablest" +
+      "ore.core.protocol.Error\022V\n\010consumed\030\003 \001(" +
+      "\0132D.com.alicloud.openservices.tablestore" +
+      ".core.protocol.ConsumedCapacity\022\013\n\003row\030\004",
+      " \001(\014\022\022\n\nnext_token\030\005 \001(\014\"\214\001\n\032TableInBatc" +
+      "hGetRowResponse\022\022\n\ntable_name\030\001 \002(\t\022Z\n\004r" +
+      "ows\030\002 \003(\0132L.com.alicloud.openservices.ta" +
+      "blestore.core.protocol.RowInBatchGetRowR" +
+      "esponse\"u\n\023BatchGetRowResponse\022^\n\006tables" +
+      "\030\001 \003(\0132N.com.alicloud.openservices.table" +
+      "store.core.protocol.TableInBatchGetRowRe" +
+      "sponse\"\255\002\n\031RowInBatchWriteRowRequest\022O\n\004" +
+      "type\030\001 \002(\0162A.com.alicloud.openservices.t" +
+      "ablestore.core.protocol.OperationType\022\022\n",
+      "\nrow_change\030\002 \002(\014\022P\n\tcondition\030\003 \002(\0132=.c" +
+      "om.alicloud.openservices.tablestore.core" +
+      ".protocol.Condition\022Y\n\016return_content\030\004 " +
+      "\001(\0132A.com.alicloud.openservices.tablesto" +
+      "re.core.protocol.ReturnContent\"\216\001\n\033Table" +
+      "InBatchWriteRowRequest\022\022\n\ntable_name\030\001 \002" +
+      "(\t\022[\n\004rows\030\002 \003(\0132M.com.alicloud.openserv" +
+      "ices.tablestore.core.protocol.RowInBatch" +
+      "WriteRowRequest\"\242\001\n\024BatchWriteRowRequest" +
+      "\022_\n\006tables\030\001 \003(\0132O.com.alicloud.openserv",
+      "ices.tablestore.core.protocol.TableInBat" +
+      "chWriteRowRequest\022\026\n\016transaction_id\030\002 \001(" +
+      "\t\022\021\n\tis_atomic\030\003 \001(\010\"\332\001\n\032RowInBatchWrite" +
+      "RowResponse\022\r\n\005is_ok\030\001 \002(\010\022H\n\005error\030\002 \001(" +
+      "\01329.com.alicloud.openservices.tablestore" +
+      ".core.protocol.Error\022V\n\010consumed\030\003 \001(\0132D" +
       ".com.alicloud.openservices.tablestore.co" +
-      "re.protocol.StreamShard\022\025\n\rnext_shard_id" +
-      "\030\007 \001(\t\022 \n\030is_timeseries_data_table\030\010 \001(\010" +
-      "\"`\n\027GetShardIteratorRequest\022\021\n\tstream_id" +
-      "\030\001 \002(\t\022\020\n\010shard_id\030\002 \002(\t\022\021\n\ttimestamp\030\003 " +
-      "\001(\003\022\r\n\005token\030\004 \001(\t\"F\n\030GetShardIteratorRe" +
-      "sponse\022\026\n\016shard_iterator\030\001 \002(\t\022\022\n\nnext_t" +
-      "oken\030\002 \001(\t\"S\n\026GetStreamRecordRequest\022\026\n\016" +
-      "shard_iterator\030\001 \002(\t\022\r\n\005limit\030\002 \001(\005\022\022\n\nt",
-      "able_name\030\003 \001(\t\"\246\003\n\027GetStreamRecordRespo" +
-      "nse\022p\n\016stream_records\030\001 \003(\0132X.com.aliclo" +
-      "ud.openservices.tablestore.core.protocol" +
-      ".GetStreamRecordResponse.StreamRecord\022\033\n" +
-      "\023next_shard_iterator\030\002 \001(\t\022V\n\010consumed\030\003" +
-      " \001(\0132D.com.alicloud.openservices.tablest" +
-      "ore.core.protocol.ConsumedCapacity\022\027\n\017ma" +
-      "y_more_record\030\004 \001(\010\032\212\001\n\014StreamRecord\022S\n\013" +
-      "action_type\030\001 \002(\0162>.com.alicloud.openser" +
-      "vices.tablestore.core.protocol.ActionTyp",
-      "e\022\016\n\006record\030\002 \002(\014\022\025\n\rorigin_record\030\003 \001(\014" +
-      "\"\205\001\n\037ComputeSplitPointsBySizeRequest\022\022\n\n" +
-      "table_name\030\001 \002(\t\022\022\n\nsplit_size\030\002 \002(\003\022\037\n\027" +
-      "split_size_unit_in_byte\030\003 \001(\003\022\031\n\021split_p" +
-      "oint_limit\030\004 \001(\005\"\220\003\n ComputeSplitPointsB" +
-      "ySizeResponse\022V\n\010consumed\030\001 \002(\0132D.com.al" +
-      "icloud.openservices.tablestore.core.prot" +
-      "ocol.ConsumedCapacity\022T\n\006schema\030\002 \003(\0132D." +
-      "com.alicloud.openservices.tablestore.cor" +
-      "e.protocol.PrimaryKeySchema\022\024\n\014split_poi",
-      "nts\030\003 \003(\014\022u\n\tlocations\030\004 \003(\0132b.com.alicl" +
+      "re.protocol.ConsumedCapacity\022\013\n\003row\030\004 \001(" +
+      "\014\"\220\001\n\034TableInBatchWriteRowResponse\022\022\n\nta" +
+      "ble_name\030\001 \002(\t\022\\\n\004rows\030\002 \003(\0132N.com.alicl",
       "oud.openservices.tablestore.core.protoco" +
-      "l.ComputeSplitPointsBySizeResponse.Split" +
-      "Location\0321\n\rSplitLocation\022\020\n\010location\030\001 " +
-      "\002(\t\022\016\n\006repeat\030\002 \002(\022\"\217\002\n\021BulkExportReques" +
-      "t\022\022\n\ntable_name\030\001 \002(\t\022\026\n\016columns_to_get\030" +
-      "\002 \003(\t\022#\n\033inclusive_start_primary_key\030\003 \002" +
-      "(\014\022!\n\031exclusive_end_primary_key\030\004 \002(\014\022\016\n" +
-      "\006filter\030\005 \001(\014\022v\n\024data_block_type_hint\030\006 " +
-      "\001(\0162A.com.alicloud.openservices.tablesto",
-      "re.core.protocol.DataBlockType:\025DBT_SIMP" +
-      "LE_ROW_MATRIX\"\366\001\n\022BulkExportResponse\022V\n\010" +
-      "consumed\030\001 \002(\0132D.com.alicloud.openservic" +
-      "es.tablestore.core.protocol.ConsumedCapa" +
-      "city\022\014\n\004rows\030\002 \002(\014\022\036\n\026next_start_primary" +
-      "_key\030\003 \001(\014\022Z\n\017data_block_type\030\004 \001(\0162A.co" +
+      "l.RowInBatchWriteRowResponse\"y\n\025BatchWri" +
+      "teRowResponse\022`\n\006tables\030\001 \003(\0132P.com.alic" +
+      "loud.openservices.tablestore.core.protoc" +
+      "ol.TableInBatchWriteRowResponse\"\260\003\n\017GetR" +
+      "angeRequest\022\022\n\ntable_name\030\001 \002(\t\022P\n\tdirec" +
+      "tion\030\002 \002(\0162=.com.alicloud.openservices.t" +
+      "ablestore.core.protocol.Direction\022\026\n\016col" +
+      "umns_to_get\030\003 \003(\t\022Q\n\ntime_range\030\004 \001(\0132=." +
+      "com.alicloud.openservices.tablestore.cor",
+      "e.protocol.TimeRange\022\024\n\014max_versions\030\005 \001" +
+      "(\005\022\r\n\005limit\030\006 \001(\005\022#\n\033inclusive_start_pri" +
+      "mary_key\030\007 \002(\014\022!\n\031exclusive_end_primary_" +
+      "key\030\010 \002(\014\022\016\n\006filter\030\n \001(\014\022\024\n\014start_colum" +
+      "n\030\013 \001(\t\022\022\n\nend_column\030\014 \001(\t\022\r\n\005token\030\r \001" +
+      "(\014\022\026\n\016transaction_id\030\016 \001(\t\"\254\001\n\020GetRangeR" +
+      "esponse\022V\n\010consumed\030\001 \002(\0132D.com.alicloud" +
+      ".openservices.tablestore.core.protocol.C" +
+      "onsumedCapacity\022\014\n\004rows\030\002 \002(\014\022\036\n\026next_st" +
+      "art_primary_key\030\003 \001(\014\022\022\n\nnext_token\030\004 \001(",
+      "\014\"?\n\034StartLocalTransactionRequest\022\022\n\ntab" +
+      "le_name\030\001 \002(\t\022\013\n\003key\030\002 \002(\014\"7\n\035StartLocal" +
+      "TransactionResponse\022\026\n\016transaction_id\030\001 " +
+      "\002(\t\"2\n\030CommitTransactionRequest\022\026\n\016trans" +
+      "action_id\030\001 \002(\t\"\033\n\031CommitTransactionResp" +
+      "onse\"1\n\027AbortTransactionRequest\022\026\n\016trans" +
+      "action_id\030\001 \002(\t\"\032\n\030AbortTransactionRespo" +
+      "nse\"\'\n\021ListStreamRequest\022\022\n\ntable_name\030\001" +
+      " \001(\t\"F\n\006Stream\022\021\n\tstream_id\030\001 \002(\t\022\022\n\ntab" +
+      "le_name\030\002 \002(\t\022\025\n\rcreation_time\030\003 \002(\003\"a\n\022",
+      "ListStreamResponse\022K\n\007streams\030\001 \003(\0132:.co" +
       "m.alicloud.openservices.tablestore.core." +
-      "protocol.DataBlockType\"\201\001\n\021BulkImportReq" +
-      "uest\022\022\n\ntable_name\030\001 \002(\t\022X\n\004rows\030\002 \003(\0132J" +
-      ".com.alicloud.openservices.tablestore.co",
-      "re.protocol.RowInBulkImportRequest\"}\n\026Ro" +
-      "wInBulkImportRequest\022O\n\004type\030\001 \002(\0162A.com" +
-      ".alicloud.openservices.tablestore.core.p" +
-      "rotocol.OperationType\022\022\n\nrow_change\030\002 \002(" +
-      "\014\"\203\001\n\022BulkImportResponse\022\022\n\ntable_name\030\001" +
-      " \002(\t\022Y\n\004rows\030\002 \003(\0132K.com.alicloud.opense" +
-      "rvices.tablestore.core.protocol.RowInBul" +
-      "kImportResponse\"\312\001\n\027RowInBulkImportRespo" +
-      "nse\022\r\n\005is_ok\030\001 \002(\010\022H\n\005error\030\002 \001(\01329.com." +
-      "alicloud.openservices.tablestore.core.pr",
-      "otocol.Error\022V\n\010consumed\030\003 \001(\0132D.com.ali" +
-      "cloud.openservices.tablestore.core.proto" +
-      "col.ConsumedCapacity\"\235\001\n\024ComputeSplitsRe" +
-      "quest\022\022\n\ntable_name\030\001 \001(\t\022q\n\033search_inde" +
-      "x_splits_options\030\002 \001(\0132L.com.alicloud.op" +
-      "enservices.tablestore.core.protocol.Sear" +
-      "chIndexSplitsOptions\".\n\030SearchIndexSplit" +
-      "sOptions\022\022\n\nindex_name\030\001 \001(\t\"@\n\025ComputeS" +
-      "plitsResponse\022\022\n\nsession_id\030\001 \001(\014\022\023\n\013spl" +
-      "its_size\030\002 \001(\005\"\215\001\n\017SQLQueryRequest\022\r\n\005qu",
-      "ery\030\001 \002(\t\022V\n\007version\030\002 \001(\0162E.com.aliclou" +
-      "d.openservices.tablestore.core.protocol." +
-      "SQLPayloadVersion\022\023\n\013sql_version\030\003 \001(\003\"\350" +
-      "\001\n\025TableConsumedCapacity\022\022\n\ntable_name\030\001" +
-      " \001(\t\022V\n\010consumed\030\002 \001(\0132D.com.alicloud.op" +
-      "enservices.tablestore.core.protocol.Cons" +
-      "umedCapacity\022c\n\023reserved_throughput\030\003 \001(" +
-      "\0132F.com.alicloud.openservices.tablestore" +
-      ".core.protocol.ReservedThroughput\"\251\002\n\020SQ" +
-      "LQueryResponse\022[\n\010consumes\030\001 \003(\0132I.com.a",
+      "protocol.Stream\"M\n\013StreamShard\022\020\n\010shard_" +
+      "id\030\001 \002(\t\022\021\n\tparent_id\030\002 \001(\t\022\031\n\021parent_si" +
+      "bling_id\030\003 \001(\t\"\210\001\n\025DescribeStreamRequest" +
+      "\022\021\n\tstream_id\030\001 \002(\t\022 \n\030inclusive_start_s" +
+      "hard_id\030\002 \001(\t\022\023\n\013shard_limit\030\003 \001(\005\022%\n\035su" +
+      "pport_timeseries_data_table\030\004 \001(\010\"\322\002\n\026De" +
+      "scribeStreamResponse\022\021\n\tstream_id\030\001 \002(\t\022" +
+      "\027\n\017expiration_time\030\002 \002(\005\022\022\n\ntable_name\030\003",
+      " \002(\t\022\025\n\rcreation_time\030\004 \002(\003\022W\n\rstream_st" +
+      "atus\030\005 \002(\0162@.com.alicloud.openservices.t" +
+      "ablestore.core.protocol.StreamStatus\022O\n\006" +
+      "shards\030\006 \003(\0132?.com.alicloud.openservices" +
+      ".tablestore.core.protocol.StreamShard\022\025\n" +
+      "\rnext_shard_id\030\007 \001(\t\022 \n\030is_timeseries_da" +
+      "ta_table\030\010 \001(\010\"`\n\027GetShardIteratorReques" +
+      "t\022\021\n\tstream_id\030\001 \002(\t\022\020\n\010shard_id\030\002 \002(\t\022\021" +
+      "\n\ttimestamp\030\003 \001(\003\022\r\n\005token\030\004 \001(\t\"F\n\030GetS" +
+      "hardIteratorResponse\022\026\n\016shard_iterator\030\001",
+      " \002(\t\022\022\n\nnext_token\030\002 \001(\t\"S\n\026GetStreamRec" +
+      "ordRequest\022\026\n\016shard_iterator\030\001 \002(\t\022\r\n\005li" +
+      "mit\030\002 \001(\005\022\022\n\ntable_name\030\003 \001(\t\"\246\003\n\027GetStr" +
+      "eamRecordResponse\022p\n\016stream_records\030\001 \003(" +
+      "\0132X.com.alicloud.openservices.tablestore" +
+      ".core.protocol.GetStreamRecordResponse.S" +
+      "treamRecord\022\033\n\023next_shard_iterator\030\002 \001(\t" +
+      "\022V\n\010consumed\030\003 \001(\0132D.com.alicloud.opense" +
+      "rvices.tablestore.core.protocol.Consumed" +
+      "Capacity\022\027\n\017may_more_record\030\004 \001(\010\032\212\001\n\014St",
+      "reamRecord\022S\n\013action_type\030\001 \002(\0162>.com.al" +
+      "icloud.openservices.tablestore.core.prot" +
+      "ocol.ActionType\022\016\n\006record\030\002 \002(\014\022\025\n\rorigi" +
+      "n_record\030\003 \001(\014\"\205\001\n\037ComputeSplitPointsByS" +
+      "izeRequest\022\022\n\ntable_name\030\001 \002(\t\022\022\n\nsplit_" +
+      "size\030\002 \002(\003\022\037\n\027split_size_unit_in_byte\030\003 " +
+      "\001(\003\022\031\n\021split_point_limit\030\004 \001(\005\"\220\003\n Compu" +
+      "teSplitPointsBySizeResponse\022V\n\010consumed\030" +
+      "\001 \002(\0132D.com.alicloud.openservices.tables" +
+      "tore.core.protocol.ConsumedCapacity\022T\n\006s",
+      "chema\030\002 \003(\0132D.com.alicloud.openservices." +
+      "tablestore.core.protocol.PrimaryKeySchem" +
+      "a\022\024\n\014split_points\030\003 \003(\014\022u\n\tlocations\030\004 \003" +
+      "(\0132b.com.alicloud.openservices.tablestor" +
+      "e.core.protocol.ComputeSplitPointsBySize" +
+      "Response.SplitLocation\0321\n\rSplitLocation\022" +
+      "\020\n\010location\030\001 \002(\t\022\016\n\006repeat\030\002 \002(\022\"\217\002\n\021Bu" +
+      "lkExportRequest\022\022\n\ntable_name\030\001 \002(\t\022\026\n\016c" +
+      "olumns_to_get\030\002 \003(\t\022#\n\033inclusive_start_p" +
+      "rimary_key\030\003 \002(\014\022!\n\031exclusive_end_primar",
+      "y_key\030\004 \002(\014\022\016\n\006filter\030\005 \001(\014\022v\n\024data_bloc" +
+      "k_type_hint\030\006 \001(\0162A.com.alicloud.openser" +
+      "vices.tablestore.core.protocol.DataBlock" +
+      "Type:\025DBT_SIMPLE_ROW_MATRIX\"\366\001\n\022BulkExpo" +
+      "rtResponse\022V\n\010consumed\030\001 \002(\0132D.com.alicl" +
+      "oud.openservices.tablestore.core.protoco" +
+      "l.ConsumedCapacity\022\014\n\004rows\030\002 \002(\014\022\036\n\026next" +
+      "_start_primary_key\030\003 \001(\014\022Z\n\017data_block_t" +
+      "ype\030\004 \001(\0162A.com.alicloud.openservices.ta" +
+      "blestore.core.protocol.DataBlockType\"\201\001\n",
+      "\021BulkImportRequest\022\022\n\ntable_name\030\001 \002(\t\022X" +
+      "\n\004rows\030\002 \003(\0132J.com.alicloud.openservices" +
+      ".tablestore.core.protocol.RowInBulkImpor" +
+      "tRequest\"}\n\026RowInBulkImportRequest\022O\n\004ty" +
+      "pe\030\001 \002(\0162A.com.alicloud.openservices.tab" +
+      "lestore.core.protocol.OperationType\022\022\n\nr" +
+      "ow_change\030\002 \002(\014\"\203\001\n\022BulkImportResponse\022\022" +
+      "\n\ntable_name\030\001 \002(\t\022Y\n\004rows\030\002 \003(\0132K.com.a" +
       "licloud.openservices.tablestore.core.pro" +
-      "tocol.TableConsumedCapacity\022\014\n\004rows\030\002 \001(" +
-      "\014\022V\n\007version\030\003 \001(\0162E.com.alicloud.opense" +
-      "rvices.tablestore.core.protocol.SQLPaylo" +
-      "adVersion\022R\n\004type\030\004 \001(\0162D.com.alicloud.o" +
-      "penservices.tablestore.core.protocol.SQL" +
-      "StatementType*5\n\016PrimaryKeyType\022\013\n\007INTEG" +
-      "ER\020\001\022\n\n\006STRING\020\002\022\n\n\006BINARY\020\003*c\n\021DefinedC" +
-      "olumnType\022\017\n\013DCT_INTEGER\020\001\022\016\n\nDCT_DOUBLE" +
-      "\020\002\022\017\n\013DCT_BOOLEAN\020\003\022\016\n\nDCT_STRING\020\004\022\014\n\010D",
-      "CT_BLOB\020\007*&\n\020PrimaryKeyOption\022\022\n\016AUTO_IN" +
-      "CREMENT\020\001*:\n\017IndexUpdateMode\022\023\n\017IUM_ASYN" +
-      "C_INDEX\020\000\022\022\n\016IUM_SYNC_INDEX\020\001*4\n\tIndexTy" +
-      "pe\022\023\n\017IT_GLOBAL_INDEX\020\000\022\022\n\016IT_LOCAL_INDE" +
-      "X\020\001*M\n\027RowExistenceExpectation\022\n\n\006IGNORE" +
-      "\020\000\022\020\n\014EXPECT_EXIST\020\001\022\024\n\020EXPECT_NOT_EXIST" +
-      "\020\002*/\n\nSSEKeyType\022\023\n\017SSE_KMS_SERVICE\020\001\022\014\n" +
-      "\010SSE_BYOK\020\002*9\n\nReturnType\022\013\n\007RT_NONE\020\000\022\t" +
-      "\n\005RT_PK\020\001\022\023\n\017RT_AFTER_MODIFY\020\002*0\n\rOperat" +
-      "ionType\022\007\n\003PUT\020\001\022\n\n\006UPDATE\020\002\022\n\n\006DELETE\020\003",
-      "*&\n\tDirection\022\013\n\007FORWARD\020\000\022\014\n\010BACKWARD\020\001" +
-      "*6\n\014StreamStatus\022\023\n\017STREAM_ENABLING\020\001\022\021\n" +
-      "\rSTREAM_ACTIVE\020\002*9\n\nActionType\022\013\n\007PUT_RO" +
-      "W\020\001\022\016\n\nUPDATE_ROW\020\002\022\016\n\nDELETE_ROW\020\003*@\n\rD" +
-      "ataBlockType\022\024\n\020DBT_PLAIN_BUFFER\020\000\022\031\n\025DB" +
-      "T_SIMPLE_ROW_MATRIX\020\001*?\n\021SQLPayloadVersi" +
-      "on\022\024\n\020SQL_PLAIN_BUFFER\020\001\022\024\n\020SQL_FLAT_BUF" +
-      "FERS\020\002*\215\001\n\020SQLStatementType\022\016\n\nSQL_SELEC" +
-      "T\020\001\022\024\n\020SQL_CREATE_TABLE\020\002\022\022\n\016SQL_SHOW_TA" +
-      "BLE\020\003\022\026\n\022SQL_DESCRIBE_TABLE\020\004\022\022\n\016SQL_DRO",
-      "P_TABLE\020\005\022\023\n\017SQL_ALTER_TABLE\020\006"
+      "tocol.RowInBulkImportResponse\"\312\001\n\027RowInB",
+      "ulkImportResponse\022\r\n\005is_ok\030\001 \002(\010\022H\n\005erro" +
+      "r\030\002 \001(\01329.com.alicloud.openservices.tabl" +
+      "estore.core.protocol.Error\022V\n\010consumed\030\003" +
+      " \001(\0132D.com.alicloud.openservices.tablest" +
+      "ore.core.protocol.ConsumedCapacity\"\235\001\n\024C" +
+      "omputeSplitsRequest\022\022\n\ntable_name\030\001 \001(\t\022" +
+      "q\n\033search_index_splits_options\030\002 \001(\0132L.c" +
+      "om.alicloud.openservices.tablestore.core" +
+      ".protocol.SearchIndexSplitsOptions\".\n\030Se" +
+      "archIndexSplitsOptions\022\022\n\nindex_name\030\001 \001",
+      "(\t\"@\n\025ComputeSplitsResponse\022\022\n\nsession_i" +
+      "d\030\001 \001(\014\022\023\n\013splits_size\030\002 \001(\005\"\215\001\n\017SQLQuer" +
+      "yRequest\022\r\n\005query\030\001 \002(\t\022V\n\007version\030\002 \001(\016" +
+      "2E.com.alicloud.openservices.tablestore." +
+      "core.protocol.SQLPayloadVersion\022\023\n\013sql_v" +
+      "ersion\030\003 \001(\003\"\350\001\n\025TableConsumedCapacity\022\022" +
+      "\n\ntable_name\030\001 \001(\t\022V\n\010consumed\030\002 \001(\0132D.c" +
+      "om.alicloud.openservices.tablestore.core" +
+      ".protocol.ConsumedCapacity\022c\n\023reserved_t" +
+      "hroughput\030\003 \001(\0132F.com.alicloud.openservi",
+      "ces.tablestore.core.protocol.ReservedThr" +
+      "oughput\"\251\002\n\020SQLQueryResponse\022[\n\010consumes" +
+      "\030\001 \003(\0132I.com.alicloud.openservices.table" +
+      "store.core.protocol.TableConsumedCapacit" +
+      "y\022\014\n\004rows\030\002 \001(\014\022V\n\007version\030\003 \001(\0162E.com.a" +
+      "licloud.openservices.tablestore.core.pro" +
+      "tocol.SQLPayloadVersion\022R\n\004type\030\004 \001(\0162D." +
+      "com.alicloud.openservices.tablestore.cor" +
+      "e.protocol.SQLStatementType*5\n\016PrimaryKe" +
+      "yType\022\013\n\007INTEGER\020\001\022\n\n\006STRING\020\002\022\n\n\006BINARY",
+      "\020\003*c\n\021DefinedColumnType\022\017\n\013DCT_INTEGER\020\001" +
+      "\022\016\n\nDCT_DOUBLE\020\002\022\017\n\013DCT_BOOLEAN\020\003\022\016\n\nDCT" +
+      "_STRING\020\004\022\014\n\010DCT_BLOB\020\007*&\n\020PrimaryKeyOpt" +
+      "ion\022\022\n\016AUTO_INCREMENT\020\001*:\n\017IndexUpdateMo" +
+      "de\022\023\n\017IUM_ASYNC_INDEX\020\000\022\022\n\016IUM_SYNC_INDE" +
+      "X\020\001*4\n\tIndexType\022\023\n\017IT_GLOBAL_INDEX\020\000\022\022\n" +
+      "\016IT_LOCAL_INDEX\020\001*=\n\016IndexSyncPhase\022\017\n\013I" +
+      "SP_INVALID\020\000\022\014\n\010ISP_FULL\020\001\022\014\n\010ISP_INCR\020\002" +
+      "*M\n\027RowExistenceExpectation\022\n\n\006IGNORE\020\000\022" +
+      "\020\n\014EXPECT_EXIST\020\001\022\024\n\020EXPECT_NOT_EXIST\020\002*",
+      "/\n\nSSEKeyType\022\023\n\017SSE_KMS_SERVICE\020\001\022\014\n\010SS" +
+      "E_BYOK\020\002*9\n\nReturnType\022\013\n\007RT_NONE\020\000\022\t\n\005R" +
+      "T_PK\020\001\022\023\n\017RT_AFTER_MODIFY\020\002*0\n\rOperation" +
+      "Type\022\007\n\003PUT\020\001\022\n\n\006UPDATE\020\002\022\n\n\006DELETE\020\003*&\n" +
+      "\tDirection\022\013\n\007FORWARD\020\000\022\014\n\010BACKWARD\020\001*6\n" +
+      "\014StreamStatus\022\023\n\017STREAM_ENABLING\020\001\022\021\n\rST" +
+      "REAM_ACTIVE\020\002*9\n\nActionType\022\013\n\007PUT_ROW\020\001" +
+      "\022\016\n\nUPDATE_ROW\020\002\022\016\n\nDELETE_ROW\020\003*@\n\rData" +
+      "BlockType\022\024\n\020DBT_PLAIN_BUFFER\020\000\022\031\n\025DBT_S" +
+      "IMPLE_ROW_MATRIX\020\001*?\n\021SQLPayloadVersion\022",
+      "\024\n\020SQL_PLAIN_BUFFER\020\001\022\024\n\020SQL_FLAT_BUFFER" +
+      "S\020\002*\215\001\n\020SQLStatementType\022\016\n\nSQL_SELECT\020\001" +
+      "\022\024\n\020SQL_CREATE_TABLE\020\002\022\022\n\016SQL_SHOW_TABLE" +
+      "\020\003\022\026\n\022SQL_DESCRIBE_TABLE\020\004\022\022\n\016SQL_DROP_T" +
+      "ABLE\020\005\022\023\n\017SQL_ALTER_TABLE\020\006"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
       new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -57046,7 +57188,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
           internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexMeta_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexMeta_descriptor,
-              new java.lang.String[] { "Name", "PrimaryKey", "DefinedColumn", "IndexUpdateMode", "IndexType", },
+              new java.lang.String[] { "Name", "PrimaryKey", "DefinedColumn", "IndexUpdateMode", "IndexType", "IndexSyncPhase", },
               com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexMeta.class,
               com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.IndexMeta.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_TableMeta_descriptor =
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/ResponseFactory.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/ResponseFactory.java
index 89a4b96..7349d2b 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/ResponseFactory.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/ResponseFactory.java
@@ -1,13 +1,11 @@
 package com.alicloud.openservices.tablestore.core.protocol;
 
 import java.io.IOException;
-import java.nio.ByteBuffer;
 import java.util.*;
 
 import com.alicloud.openservices.tablestore.ClientException;
 import com.alicloud.openservices.tablestore.core.ResponseContentWithMeta;
 import com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ComputeSplitPointsBySizeResponse.SplitLocation;
-import com.alicloud.openservices.tablestore.core.protocol.sql.flatbuffers.SQLResponseColumns;
 import com.alicloud.openservices.tablestore.model.*;
 import com.alicloud.openservices.tablestore.model.delivery.*;
 import com.alicloud.openservices.tablestore.model.search.CreateSearchIndexResponse;
@@ -31,13 +29,18 @@
 import com.alicloud.openservices.tablestore.model.tunnel.internal.ReadRecordsResponse;
 import com.alicloud.openservices.tablestore.model.tunnel.internal.ShutdownTunnelResponse;
 import com.google.protobuf.ByteString;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static com.alicloud.openservices.tablestore.core.protocol.SearchAggregationResultBuilder.buildAggregationResultsFromByteString;
 import static com.alicloud.openservices.tablestore.core.protocol.SearchGroupByResultBuilder.buildGroupByResultsFromByteString;
+import static com.alicloud.openservices.tablestore.core.protocol.SearchInnerHitsParser.toSearchHit;
 import static com.alicloud.openservices.tablestore.core.protocol.TunnelProtocolBuilder.MILLIS_TO_NANO;
 
 public class ResponseFactory {
 
+    private final static Logger LOGGER = LoggerFactory.getLogger(ResponseFactory.class);
+
     public static CreateTableResponse createCreateTableResponse(ResponseContentWithMeta response,
         OtsInternalApi.CreateTableResponse createTableResponse) {
         return new CreateTableResponse(response.getMeta());
@@ -732,6 +735,9 @@ public static DescribeSearchIndexResponse createDescribeSearchIndexResponse(Resp
         if (describeSearchIndexResponse.hasTimeToLive()) {
             result.setTimeToLive(describeSearchIndexResponse.getTimeToLive());
         }
+        if(describeSearchIndexResponse.hasIndexStatus()) {
+            result.setIndexStatus(SearchProtocolParser.toIndexStatus(describeSearchIndexResponse.getIndexStatus()));
+        }
         return result;
     }
 
@@ -777,6 +783,7 @@ public static SearchResponse createSearchResponse(ResponseContentWithMeta respon
         result.setAllSuccess(searchResponse.getIsAllSucceeded());
         result.setBodyBytes(searchResponse.getSerializedSize());
         List<Row> rows = new ArrayList<Row>();
+        List<SearchHit> searchHits = new ArrayList<SearchHit>();
         for (int i = 0; i < searchResponse.getRowsCount(); ++i) {
             com.google.protobuf.ByteString bytes = searchResponse.getRows(i);
             PlainBufferCodedInputStream coded = new PlainBufferCodedInputStream(
@@ -788,7 +795,17 @@ public static SearchResponse createSearchResponse(ResponseContentWithMeta respon
             Row row = PlainBufferConversion.toRow(plainBufferRows.get(0));
             rows.add(row);
         }
+
+        if(searchResponse.getRowsCount() != searchResponse.getSearchHitsCount() && searchResponse.getSearchHitsCount() != 0) {
+            LOGGER.error("the row count is not equal to search extra result item count in server response body, ignore the search extra result items.");
+        } else {
+            for (int i = 0; i < searchResponse.getSearchHitsCount(); i++) {
+                searchHits.add(toSearchHit(searchResponse.getSearchHits(i), rows.get(i)));
+            }
+        }
         result.setRows(rows);
+        result.setSearchHits(searchHits);
+
         if (searchResponse.hasNextToken()) {
             result.setNextToken(searchResponse.getNextToken().toByteArray());
         }
@@ -798,6 +815,12 @@ public static SearchResponse createSearchResponse(ResponseContentWithMeta respon
         if (searchResponse.hasGroupBys()) {
             result.setGroupByResults(buildGroupByResultsFromByteString(searchResponse.getGroupBys()));
         }
+        if (searchResponse.hasConsumed() && searchResponse.getConsumed().hasCapacityUnit()) {
+            result.setConsumed(new ConsumedCapacity(OTSProtocolParser.parseCapacityUnit(searchResponse.getConsumed().getCapacityUnit())));
+        }
+        if (searchResponse.hasReservedConsumed() && searchResponse.getReservedConsumed().hasCapacityUnit()) {
+            result.setReservedConsumed(new ConsumedCapacity(OTSProtocolParser.parseCapacityUnit(searchResponse.getReservedConsumed().getCapacityUnit())));
+        }
         return result;
     }
 
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/Search.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/Search.java
index abdf359..377d68b 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/Search.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/Search.java
@@ -302,6 +302,7 @@ public enum QueryType
     GEO_POLYGON_QUERY(13, 14),
     TERMS_QUERY(14, 15),
     EXISTS_QUERY(15, 16),
+    KNN_VECTOR_QUERY(16, 17),
     ;
     
     public static final int MATCH_QUERY_VALUE = 1;
@@ -320,6 +321,7 @@ public enum QueryType
     public static final int GEO_POLYGON_QUERY_VALUE = 14;
     public static final int TERMS_QUERY_VALUE = 15;
     public static final int EXISTS_QUERY_VALUE = 16;
+    public static final int KNN_VECTOR_QUERY_VALUE = 17;
     
     
     public final int getNumber() { return value; }
@@ -342,6 +344,7 @@ public static QueryType valueOf(int value) {
         case 14: return GEO_POLYGON_QUERY;
         case 15: return TERMS_QUERY;
         case 16: return EXISTS_QUERY;
+        case 17: return KNN_VECTOR_QUERY;
         default: return null;
       }
     }
@@ -372,7 +375,7 @@ public QueryType findValueByNumber(int number) {
     }
     
     private static final QueryType[] VALUES = {
-      MATCH_QUERY, MATCH_PHRASE_QUERY, TERM_QUERY, RANGE_QUERY, PREFIX_QUERY, BOOL_QUERY, CONST_SCORE_QUERY, FUNCTION_SCORE_QUERY, NESTED_QUERY, WILDCARD_QUERY, MATCH_ALL_QUERY, GEO_BOUNDING_BOX_QUERY, GEO_DISTANCE_QUERY, GEO_POLYGON_QUERY, TERMS_QUERY, EXISTS_QUERY, 
+      MATCH_QUERY, MATCH_PHRASE_QUERY, TERM_QUERY, RANGE_QUERY, PREFIX_QUERY, BOOL_QUERY, CONST_SCORE_QUERY, FUNCTION_SCORE_QUERY, NESTED_QUERY, WILDCARD_QUERY, MATCH_ALL_QUERY, GEO_BOUNDING_BOX_QUERY, GEO_DISTANCE_QUERY, GEO_POLYGON_QUERY, TERMS_QUERY, EXISTS_QUERY, KNN_VECTOR_QUERY, 
     };
     
     public static QueryType valueOf(
@@ -752,6 +755,144 @@ private GeoDistanceType(int index, int value) {
     // @@protoc_insertion_point(enum_scope:com.alicloud.openservices.tablestore.core.protocol.GeoDistanceType)
   }
   
+  public enum HighlightFragmentOrder
+      implements com.google.protobuf.ProtocolMessageEnum {
+    TEXT_SEQUENCE(0, 1),
+    SCORE(1, 2),
+    ;
+    
+    public static final int TEXT_SEQUENCE_VALUE = 1;
+    public static final int SCORE_VALUE = 2;
+    
+    
+    public final int getNumber() { return value; }
+    
+    public static HighlightFragmentOrder valueOf(int value) {
+      switch (value) {
+        case 1: return TEXT_SEQUENCE;
+        case 2: return SCORE;
+        default: return null;
+      }
+    }
+    
+    public static com.google.protobuf.Internal.EnumLiteMap<HighlightFragmentOrder>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static com.google.protobuf.Internal.EnumLiteMap<HighlightFragmentOrder>
+        internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<HighlightFragmentOrder>() {
+            public HighlightFragmentOrder findValueByNumber(int number) {
+              return HighlightFragmentOrder.valueOf(number);
+            }
+          };
+    
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      return getDescriptor().getValues().get(index);
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.getDescriptor().getEnumTypes().get(9);
+    }
+    
+    private static final HighlightFragmentOrder[] VALUES = {
+      TEXT_SEQUENCE, SCORE, 
+    };
+    
+    public static HighlightFragmentOrder valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      return VALUES[desc.getIndex()];
+    }
+    
+    private final int index;
+    private final int value;
+    
+    private HighlightFragmentOrder(int index, int value) {
+      this.index = index;
+      this.value = value;
+    }
+    
+    // @@protoc_insertion_point(enum_scope:com.alicloud.openservices.tablestore.core.protocol.HighlightFragmentOrder)
+  }
+  
+  public enum HighlightEncoder
+      implements com.google.protobuf.ProtocolMessageEnum {
+    PLAIN_MODE(0, 1),
+    HTML_MODE(1, 2),
+    ;
+    
+    public static final int PLAIN_MODE_VALUE = 1;
+    public static final int HTML_MODE_VALUE = 2;
+    
+    
+    public final int getNumber() { return value; }
+    
+    public static HighlightEncoder valueOf(int value) {
+      switch (value) {
+        case 1: return PLAIN_MODE;
+        case 2: return HTML_MODE;
+        default: return null;
+      }
+    }
+    
+    public static com.google.protobuf.Internal.EnumLiteMap<HighlightEncoder>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static com.google.protobuf.Internal.EnumLiteMap<HighlightEncoder>
+        internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<HighlightEncoder>() {
+            public HighlightEncoder findValueByNumber(int number) {
+              return HighlightEncoder.valueOf(number);
+            }
+          };
+    
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      return getDescriptor().getValues().get(index);
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.getDescriptor().getEnumTypes().get(10);
+    }
+    
+    private static final HighlightEncoder[] VALUES = {
+      PLAIN_MODE, HTML_MODE, 
+    };
+    
+    public static HighlightEncoder valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      return VALUES[desc.getIndex()];
+    }
+    
+    private final int index;
+    private final int value;
+    
+    private HighlightEncoder(int index, int value) {
+      this.index = index;
+      this.value = value;
+    }
+    
+    // @@protoc_insertion_point(enum_scope:com.alicloud.openservices.tablestore.core.protocol.HighlightEncoder)
+  }
+  
   public enum ColumnReturnType
       implements com.google.protobuf.ProtocolMessageEnum {
     RETURN_ALL(0, 1),
@@ -800,7 +941,7 @@ public ColumnReturnType findValueByNumber(int number) {
     }
     public static final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.getDescriptor().getEnumTypes().get(9);
+      return com.alicloud.openservices.tablestore.core.protocol.Search.getDescriptor().getEnumTypes().get(11);
     }
     
     private static final ColumnReturnType[] VALUES = {
@@ -875,7 +1016,7 @@ public IndexOptions findValueByNumber(int number) {
     }
     public static final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.getDescriptor().getEnumTypes().get(10);
+      return com.alicloud.openservices.tablestore.core.protocol.Search.getDescriptor().getEnumTypes().get(12);
     }
     
     private static final IndexOptions[] VALUES = {
@@ -912,6 +1053,7 @@ public enum FieldType
     NESTED(5, 6),
     GEO_POINT(6, 7),
     DATE(7, 8),
+    VECTOR(8, 9),
     ;
     
     public static final int LONG_VALUE = 1;
@@ -922,6 +1064,7 @@ public enum FieldType
     public static final int NESTED_VALUE = 6;
     public static final int GEO_POINT_VALUE = 7;
     public static final int DATE_VALUE = 8;
+    public static final int VECTOR_VALUE = 9;
     
     
     public final int getNumber() { return value; }
@@ -936,6 +1079,7 @@ public static FieldType valueOf(int value) {
         case 6: return NESTED;
         case 7: return GEO_POINT;
         case 8: return DATE;
+        case 9: return VECTOR;
         default: return null;
       }
     }
@@ -962,11 +1106,11 @@ public FieldType findValueByNumber(int number) {
     }
     public static final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.getDescriptor().getEnumTypes().get(11);
+      return com.alicloud.openservices.tablestore.core.protocol.Search.getDescriptor().getEnumTypes().get(13);
     }
     
     private static final FieldType[] VALUES = {
-      LONG, DOUBLE, BOOLEAN, KEYWORD, TEXT, NESTED, GEO_POINT, DATE, 
+      LONG, DOUBLE, BOOLEAN, KEYWORD, TEXT, NESTED, GEO_POINT, DATE, VECTOR, 
     };
     
     public static FieldType valueOf(
@@ -999,6 +1143,7 @@ public enum DateTimeUnit
     HOUR(5, 6),
     MINUTE(6, 7),
     SECOND(7, 8),
+    MILLISECOND(8, 9),
     ;
     
     public static final int YEAR_VALUE = 1;
@@ -1009,6 +1154,7 @@ public enum DateTimeUnit
     public static final int HOUR_VALUE = 6;
     public static final int MINUTE_VALUE = 7;
     public static final int SECOND_VALUE = 8;
+    public static final int MILLISECOND_VALUE = 9;
     
     
     public final int getNumber() { return value; }
@@ -1023,6 +1169,7 @@ public static DateTimeUnit valueOf(int value) {
         case 6: return HOUR;
         case 7: return MINUTE;
         case 8: return SECOND;
+        case 9: return MILLISECOND;
         default: return null;
       }
     }
@@ -1049,11 +1196,11 @@ public DateTimeUnit findValueByNumber(int number) {
     }
     public static final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.getDescriptor().getEnumTypes().get(12);
+      return com.alicloud.openservices.tablestore.core.protocol.Search.getDescriptor().getEnumTypes().get(14);
     }
     
     private static final DateTimeUnit[] VALUES = {
-      YEAR, QUARTER_YEAR, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, 
+      YEAR, QUARTER_YEAR, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, 
     };
     
     public static DateTimeUnit valueOf(
@@ -1076,6 +1223,210 @@ private DateTimeUnit(int index, int value) {
     // @@protoc_insertion_point(enum_scope:com.alicloud.openservices.tablestore.core.protocol.DateTimeUnit)
   }
   
+  public enum VectorDataType
+      implements com.google.protobuf.ProtocolMessageEnum {
+    VD_FLOAT_32(0, 2),
+    ;
+    
+    public static final int VD_FLOAT_32_VALUE = 2;
+    
+    
+    public final int getNumber() { return value; }
+    
+    public static VectorDataType valueOf(int value) {
+      switch (value) {
+        case 2: return VD_FLOAT_32;
+        default: return null;
+      }
+    }
+    
+    public static com.google.protobuf.Internal.EnumLiteMap<VectorDataType>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static com.google.protobuf.Internal.EnumLiteMap<VectorDataType>
+        internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<VectorDataType>() {
+            public VectorDataType findValueByNumber(int number) {
+              return VectorDataType.valueOf(number);
+            }
+          };
+    
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      return getDescriptor().getValues().get(index);
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.getDescriptor().getEnumTypes().get(15);
+    }
+    
+    private static final VectorDataType[] VALUES = {
+      VD_FLOAT_32, 
+    };
+    
+    public static VectorDataType valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      return VALUES[desc.getIndex()];
+    }
+    
+    private final int index;
+    private final int value;
+    
+    private VectorDataType(int index, int value) {
+      this.index = index;
+      this.value = value;
+    }
+    
+    // @@protoc_insertion_point(enum_scope:com.alicloud.openservices.tablestore.core.protocol.VectorDataType)
+  }
+  
+  public enum VectorMetricType
+      implements com.google.protobuf.ProtocolMessageEnum {
+    VM_EUCLIDEAN(0, 0),
+    VM_COSINE(1, 1),
+    VM_DOT_PRODUCT(2, 2),
+    ;
+    
+    public static final int VM_EUCLIDEAN_VALUE = 0;
+    public static final int VM_COSINE_VALUE = 1;
+    public static final int VM_DOT_PRODUCT_VALUE = 2;
+    
+    
+    public final int getNumber() { return value; }
+    
+    public static VectorMetricType valueOf(int value) {
+      switch (value) {
+        case 0: return VM_EUCLIDEAN;
+        case 1: return VM_COSINE;
+        case 2: return VM_DOT_PRODUCT;
+        default: return null;
+      }
+    }
+    
+    public static com.google.protobuf.Internal.EnumLiteMap<VectorMetricType>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static com.google.protobuf.Internal.EnumLiteMap<VectorMetricType>
+        internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<VectorMetricType>() {
+            public VectorMetricType findValueByNumber(int number) {
+              return VectorMetricType.valueOf(number);
+            }
+          };
+    
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      return getDescriptor().getValues().get(index);
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.getDescriptor().getEnumTypes().get(16);
+    }
+    
+    private static final VectorMetricType[] VALUES = {
+      VM_EUCLIDEAN, VM_COSINE, VM_DOT_PRODUCT, 
+    };
+    
+    public static VectorMetricType valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      return VALUES[desc.getIndex()];
+    }
+    
+    private final int index;
+    private final int value;
+    
+    private VectorMetricType(int index, int value) {
+      this.index = index;
+      this.value = value;
+    }
+    
+    // @@protoc_insertion_point(enum_scope:com.alicloud.openservices.tablestore.core.protocol.VectorMetricType)
+  }
+  
+  public enum VectorIndexType
+      implements com.google.protobuf.ProtocolMessageEnum {
+    VI_HNSW(0, 1),
+    ;
+    
+    public static final int VI_HNSW_VALUE = 1;
+    
+    
+    public final int getNumber() { return value; }
+    
+    public static VectorIndexType valueOf(int value) {
+      switch (value) {
+        case 1: return VI_HNSW;
+        default: return null;
+      }
+    }
+    
+    public static com.google.protobuf.Internal.EnumLiteMap<VectorIndexType>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static com.google.protobuf.Internal.EnumLiteMap<VectorIndexType>
+        internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<VectorIndexType>() {
+            public VectorIndexType findValueByNumber(int number) {
+              return VectorIndexType.valueOf(number);
+            }
+          };
+    
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      return getDescriptor().getValues().get(index);
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.getDescriptor().getEnumTypes().get(17);
+    }
+    
+    private static final VectorIndexType[] VALUES = {
+      VI_HNSW, 
+    };
+    
+    public static VectorIndexType valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      return VALUES[desc.getIndex()];
+    }
+    
+    private final int index;
+    private final int value;
+    
+    private VectorIndexType(int index, int value) {
+      this.index = index;
+      this.value = value;
+    }
+    
+    // @@protoc_insertion_point(enum_scope:com.alicloud.openservices.tablestore.core.protocol.VectorIndexType)
+  }
+  
   public enum SyncPhase
       implements com.google.protobuf.ProtocolMessageEnum {
     FULL(0, 1),
@@ -1118,7 +1469,7 @@ public SyncPhase findValueByNumber(int number) {
     }
     public static final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.getDescriptor().getEnumTypes().get(13);
+      return com.alicloud.openservices.tablestore.core.protocol.Search.getDescriptor().getEnumTypes().get(18);
     }
     
     private static final SyncPhase[] VALUES = {
@@ -1145,6 +1496,78 @@ private SyncPhase(int index, int value) {
     // @@protoc_insertion_point(enum_scope:com.alicloud.openservices.tablestore.core.protocol.SyncPhase)
   }
   
+  public enum IndexStatusEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    PENDING(0, 1),
+    FAILED(1, 2),
+    RUNNING(2, 3),
+    ;
+    
+    public static final int PENDING_VALUE = 1;
+    public static final int FAILED_VALUE = 2;
+    public static final int RUNNING_VALUE = 3;
+    
+    
+    public final int getNumber() { return value; }
+    
+    public static IndexStatusEnum valueOf(int value) {
+      switch (value) {
+        case 1: return PENDING;
+        case 2: return FAILED;
+        case 3: return RUNNING;
+        default: return null;
+      }
+    }
+    
+    public static com.google.protobuf.Internal.EnumLiteMap<IndexStatusEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static com.google.protobuf.Internal.EnumLiteMap<IndexStatusEnum>
+        internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<IndexStatusEnum>() {
+            public IndexStatusEnum findValueByNumber(int number) {
+              return IndexStatusEnum.valueOf(number);
+            }
+          };
+    
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      return getDescriptor().getValues().get(index);
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.getDescriptor().getEnumTypes().get(19);
+    }
+    
+    private static final IndexStatusEnum[] VALUES = {
+      PENDING, FAILED, RUNNING, 
+    };
+    
+    public static IndexStatusEnum valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      return VALUES[desc.getIndex()];
+    }
+    
+    private final int index;
+    private final int value;
+    
+    private IndexStatusEnum(int index, int value) {
+      this.index = index;
+      this.value = value;
+    }
+    
+    // @@protoc_insertion_point(enum_scope:com.alicloud.openservices.tablestore.core.protocol.IndexStatusEnum)
+  }
+  
   public interface AvgAggOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
@@ -26761,6 +27184,11 @@ public interface GroupByDateHistogramOrBuilder
     boolean hasSubGroupBys();
     com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys getSubGroupBys();
     com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuilder getSubGroupBysOrBuilder();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.DateTimeValue offset = 10;
+    boolean hasOffset();
+    com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue getOffset();
+    com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValueOrBuilder getOffsetOrBuilder();
   }
   public static final class GroupByDateHistogram extends
       com.google.protobuf.GeneratedMessage
@@ -26940,6 +27368,19 @@ public com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuild
       return subGroupBys_;
     }
     
+    // optional .com.alicloud.openservices.tablestore.core.protocol.DateTimeValue offset = 10;
+    public static final int OFFSET_FIELD_NUMBER = 10;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue offset_;
+    public boolean hasOffset() {
+      return ((bitField0_ & 0x00000200) == 0x00000200);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue getOffset() {
+      return offset_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValueOrBuilder getOffsetOrBuilder() {
+      return offset_;
+    }
+    
     private void initFields() {
       fieldName_ = "";
       interval_ = com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.getDefaultInstance();
@@ -26950,6 +27391,7 @@ private void initFields() {
       sort_ = com.alicloud.openservices.tablestore.core.protocol.Search.GroupBySort.getDefaultInstance();
       subAggs_ = com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.getDefaultInstance();
       subGroupBys_ = com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.getDefaultInstance();
+      offset_ = com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.getDefaultInstance();
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -26990,6 +27432,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (((bitField0_ & 0x00000100) == 0x00000100)) {
         output.writeMessage(9, subGroupBys_);
       }
+      if (((bitField0_ & 0x00000200) == 0x00000200)) {
+        output.writeMessage(10, offset_);
+      }
       getUnknownFields().writeTo(output);
     }
     
@@ -27035,6 +27480,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(9, subGroupBys_);
       }
+      if (((bitField0_ & 0x00000200) == 0x00000200)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(10, offset_);
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -27156,6 +27605,7 @@ private void maybeForceBuilderInitialization() {
           getSortFieldBuilder();
           getSubAggsFieldBuilder();
           getSubGroupBysFieldBuilder();
+          getOffsetFieldBuilder();
         }
       }
       private static Builder create() {
@@ -27202,6 +27652,12 @@ public Builder clear() {
           subGroupBysBuilder_.clear();
         }
         bitField0_ = (bitField0_ & ~0x00000100);
+        if (offsetBuilder_ == null) {
+          offset_ = com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.getDefaultInstance();
+        } else {
+          offsetBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000200);
         return this;
       }
       
@@ -27296,6 +27752,14 @@ public com.alicloud.openservices.tablestore.core.protocol.Search.GroupByDateHist
         } else {
           result.subGroupBys_ = subGroupBysBuilder_.build();
         }
+        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
+          to_bitField0_ |= 0x00000200;
+        }
+        if (offsetBuilder_ == null) {
+          result.offset_ = offset_;
+        } else {
+          result.offset_ = offsetBuilder_.build();
+        }
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -27339,6 +27803,9 @@ public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Sear
         if (other.hasSubGroupBys()) {
           mergeSubGroupBys(other.getSubGroupBys());
         }
+        if (other.hasOffset()) {
+          mergeOffset(other.getOffset());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -27435,6 +27902,15 @@ public Builder mergeFrom(
               setSubGroupBys(subBuilder.buildPartial());
               break;
             }
+            case 82: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.newBuilder();
+              if (hasOffset()) {
+                subBuilder.mergeFrom(getOffset());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setOffset(subBuilder.buildPartial());
+              break;
+            }
           }
         }
       }
@@ -28008,6 +28484,96 @@ public com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuild
         return subGroupBysBuilder_;
       }
       
+      // optional .com.alicloud.openservices.tablestore.core.protocol.DateTimeValue offset = 10;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue offset_ = com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue, com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValueOrBuilder> offsetBuilder_;
+      public boolean hasOffset() {
+        return ((bitField0_ & 0x00000200) == 0x00000200);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue getOffset() {
+        if (offsetBuilder_ == null) {
+          return offset_;
+        } else {
+          return offsetBuilder_.getMessage();
+        }
+      }
+      public Builder setOffset(com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue value) {
+        if (offsetBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          offset_ = value;
+          onChanged();
+        } else {
+          offsetBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000200;
+        return this;
+      }
+      public Builder setOffset(
+          com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.Builder builderForValue) {
+        if (offsetBuilder_ == null) {
+          offset_ = builderForValue.build();
+          onChanged();
+        } else {
+          offsetBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000200;
+        return this;
+      }
+      public Builder mergeOffset(com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue value) {
+        if (offsetBuilder_ == null) {
+          if (((bitField0_ & 0x00000200) == 0x00000200) &&
+              offset_ != com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.getDefaultInstance()) {
+            offset_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.newBuilder(offset_).mergeFrom(value).buildPartial();
+          } else {
+            offset_ = value;
+          }
+          onChanged();
+        } else {
+          offsetBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000200;
+        return this;
+      }
+      public Builder clearOffset() {
+        if (offsetBuilder_ == null) {
+          offset_ = com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.getDefaultInstance();
+          onChanged();
+        } else {
+          offsetBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000200);
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.Builder getOffsetBuilder() {
+        bitField0_ |= 0x00000200;
+        onChanged();
+        return getOffsetFieldBuilder().getBuilder();
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValueOrBuilder getOffsetOrBuilder() {
+        if (offsetBuilder_ != null) {
+          return offsetBuilder_.getMessageOrBuilder();
+        } else {
+          return offset_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue, com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValueOrBuilder> 
+          getOffsetFieldBuilder() {
+        if (offsetBuilder_ == null) {
+          offsetBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue, com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValueOrBuilder>(
+                  offset_,
+                  getParentForChildren(),
+                  isClean());
+          offset_ = null;
+        }
+        return offsetBuilder_;
+      }
+      
       // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.GroupByDateHistogram)
     }
     
@@ -28057,6 +28623,10 @@ public interface GroupByHistogramOrBuilder
     boolean hasSubGroupBys();
     com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys getSubGroupBys();
     com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuilder getSubGroupBysOrBuilder();
+    
+    // optional bytes offset = 9;
+    boolean hasOffset();
+    com.google.protobuf.ByteString getOffset();
   }
   public static final class GroupByHistogram extends
       com.google.protobuf.GeneratedMessage
@@ -28201,6 +28771,16 @@ public com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuild
       return subGroupBys_;
     }
     
+    // optional bytes offset = 9;
+    public static final int OFFSET_FIELD_NUMBER = 9;
+    private com.google.protobuf.ByteString offset_;
+    public boolean hasOffset() {
+      return ((bitField0_ & 0x00000100) == 0x00000100);
+    }
+    public com.google.protobuf.ByteString getOffset() {
+      return offset_;
+    }
+    
     private void initFields() {
       fieldName_ = "";
       interval_ = com.google.protobuf.ByteString.EMPTY;
@@ -28210,6 +28790,7 @@ private void initFields() {
       fieldRange_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldRange.getDefaultInstance();
       subAggs_ = com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.getDefaultInstance();
       subGroupBys_ = com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.getDefaultInstance();
+      offset_ = com.google.protobuf.ByteString.EMPTY;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -28247,6 +28828,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (((bitField0_ & 0x00000080) == 0x00000080)) {
         output.writeMessage(8, subGroupBys_);
       }
+      if (((bitField0_ & 0x00000100) == 0x00000100)) {
+        output.writeBytes(9, offset_);
+      }
       getUnknownFields().writeTo(output);
     }
     
@@ -28288,6 +28872,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(8, subGroupBys_);
       }
+      if (((bitField0_ & 0x00000100) == 0x00000100)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(9, offset_);
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -28448,6 +29036,8 @@ public Builder clear() {
           subGroupBysBuilder_.clear();
         }
         bitField0_ = (bitField0_ & ~0x00000080);
+        offset_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000100);
         return this;
       }
       
@@ -28534,6 +29124,10 @@ public com.alicloud.openservices.tablestore.core.protocol.Search.GroupByHistogra
         } else {
           result.subGroupBys_ = subGroupBysBuilder_.build();
         }
+        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
+          to_bitField0_ |= 0x00000100;
+        }
+        result.offset_ = offset_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -28574,6 +29168,9 @@ public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Sear
         if (other.hasSubGroupBys()) {
           mergeSubGroupBys(other.getSubGroupBys());
         }
+        if (other.hasOffset()) {
+          setOffset(other.getOffset());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -28661,6 +29258,11 @@ public Builder mergeFrom(
               setSubGroupBys(subBuilder.buildPartial());
               break;
             }
+            case 74: {
+              bitField0_ |= 0x00000100;
+              offset_ = input.readBytes();
+              break;
+            }
           }
         }
       }
@@ -29132,6 +29734,30 @@ public com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuild
         return subGroupBysBuilder_;
       }
       
+      // optional bytes offset = 9;
+      private com.google.protobuf.ByteString offset_ = com.google.protobuf.ByteString.EMPTY;
+      public boolean hasOffset() {
+        return ((bitField0_ & 0x00000100) == 0x00000100);
+      }
+      public com.google.protobuf.ByteString getOffset() {
+        return offset_;
+      }
+      public Builder setOffset(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000100;
+        offset_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearOffset() {
+        bitField0_ = (bitField0_ & ~0x00000100);
+        offset_ = getDefaultInstance().getOffset();
+        onChanged();
+        return this;
+      }
+      
       // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.GroupByHistogram)
     }
     
@@ -55612,6 +56238,11 @@ public interface NestedQueryOrBuilder
     // optional float weight = 4;
     boolean hasWeight();
     float getWeight();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.InnerHits inner_hits = 5;
+    boolean hasInnerHits();
+    com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits getInnerHits();
+    com.alicloud.openservices.tablestore.core.protocol.Search.InnerHitsOrBuilder getInnerHitsOrBuilder();
   }
   public static final class NestedQuery extends
       com.google.protobuf.GeneratedMessage
@@ -55707,11 +56338,25 @@ public float getWeight() {
       return weight_;
     }
     
+    // optional .com.alicloud.openservices.tablestore.core.protocol.InnerHits inner_hits = 5;
+    public static final int INNER_HITS_FIELD_NUMBER = 5;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits innerHits_;
+    public boolean hasInnerHits() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits getInnerHits() {
+      return innerHits_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.InnerHitsOrBuilder getInnerHitsOrBuilder() {
+      return innerHits_;
+    }
+    
     private void initFields() {
       path_ = "";
       query_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
       scoreMode_ = com.alicloud.openservices.tablestore.core.protocol.Search.ScoreMode.SCORE_MODE_NONE;
       weight_ = 0F;
+      innerHits_ = com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.getDefaultInstance();
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -55737,6 +56382,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (((bitField0_ & 0x00000008) == 0x00000008)) {
         output.writeFloat(4, weight_);
       }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeMessage(5, innerHits_);
+      }
       getUnknownFields().writeTo(output);
     }
     
@@ -55762,6 +56410,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeFloatSize(4, weight_);
       }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, innerHits_);
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -55879,6 +56531,7 @@ private Builder(BuilderParent parent) {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
           getQueryFieldBuilder();
+          getInnerHitsFieldBuilder();
         }
       }
       private static Builder create() {
@@ -55899,6 +56552,12 @@ public Builder clear() {
         bitField0_ = (bitField0_ & ~0x00000004);
         weight_ = 0F;
         bitField0_ = (bitField0_ & ~0x00000008);
+        if (innerHitsBuilder_ == null) {
+          innerHits_ = com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.getDefaultInstance();
+        } else {
+          innerHitsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000010);
         return this;
       }
       
@@ -55957,6 +56616,14 @@ public com.alicloud.openservices.tablestore.core.protocol.Search.NestedQuery bui
           to_bitField0_ |= 0x00000008;
         }
         result.weight_ = weight_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        if (innerHitsBuilder_ == null) {
+          result.innerHits_ = innerHits_;
+        } else {
+          result.innerHits_ = innerHitsBuilder_.build();
+        }
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -55985,6 +56652,9 @@ public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Sear
         if (other.hasWeight()) {
           setWeight(other.getWeight());
         }
+        if (other.hasInnerHits()) {
+          mergeInnerHits(other.getInnerHits());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -56046,6 +56716,15 @@ public Builder mergeFrom(
               weight_ = input.readFloat();
               break;
             }
+            case 42: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.newBuilder();
+              if (hasInnerHits()) {
+                subBuilder.mergeFrom(getInnerHits());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setInnerHits(subBuilder.buildPartial());
+              break;
+            }
           }
         }
       }
@@ -56223,6 +56902,96 @@ public Builder clearWeight() {
         return this;
       }
       
+      // optional .com.alicloud.openservices.tablestore.core.protocol.InnerHits inner_hits = 5;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits innerHits_ = com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits, com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.InnerHitsOrBuilder> innerHitsBuilder_;
+      public boolean hasInnerHits() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits getInnerHits() {
+        if (innerHitsBuilder_ == null) {
+          return innerHits_;
+        } else {
+          return innerHitsBuilder_.getMessage();
+        }
+      }
+      public Builder setInnerHits(com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits value) {
+        if (innerHitsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          innerHits_ = value;
+          onChanged();
+        } else {
+          innerHitsBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000010;
+        return this;
+      }
+      public Builder setInnerHits(
+          com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.Builder builderForValue) {
+        if (innerHitsBuilder_ == null) {
+          innerHits_ = builderForValue.build();
+          onChanged();
+        } else {
+          innerHitsBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000010;
+        return this;
+      }
+      public Builder mergeInnerHits(com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits value) {
+        if (innerHitsBuilder_ == null) {
+          if (((bitField0_ & 0x00000010) == 0x00000010) &&
+              innerHits_ != com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.getDefaultInstance()) {
+            innerHits_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.newBuilder(innerHits_).mergeFrom(value).buildPartial();
+          } else {
+            innerHits_ = value;
+          }
+          onChanged();
+        } else {
+          innerHitsBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000010;
+        return this;
+      }
+      public Builder clearInnerHits() {
+        if (innerHitsBuilder_ == null) {
+          innerHits_ = com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.getDefaultInstance();
+          onChanged();
+        } else {
+          innerHitsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000010);
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.Builder getInnerHitsBuilder() {
+        bitField0_ |= 0x00000010;
+        onChanged();
+        return getInnerHitsFieldBuilder().getBuilder();
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.InnerHitsOrBuilder getInnerHitsOrBuilder() {
+        if (innerHitsBuilder_ != null) {
+          return innerHitsBuilder_.getMessageOrBuilder();
+        } else {
+          return innerHits_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits, com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.InnerHitsOrBuilder> 
+          getInnerHitsFieldBuilder() {
+        if (innerHitsBuilder_ == null) {
+          innerHitsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits, com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.InnerHitsOrBuilder>(
+                  innerHits_,
+                  getParentForChildren(),
+                  isClean());
+          innerHits_ = null;
+        }
+        return innerHitsBuilder_;
+      }
+      
       // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.NestedQuery)
     }
     
@@ -56234,150 +57003,107 @@ public Builder clearWeight() {
     // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.NestedQuery)
   }
   
-  public interface GeoBoundingBoxQueryOrBuilder
+  public interface InnerHitsOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
-    // optional string field_name = 1;
-    boolean hasFieldName();
-    String getFieldName();
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Sort sort = 1;
+    boolean hasSort();
+    com.alicloud.openservices.tablestore.core.protocol.Search.Sort getSort();
+    com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder getSortOrBuilder();
     
-    // optional string top_left = 2;
-    boolean hasTopLeft();
-    String getTopLeft();
+    // optional int32 offset = 2;
+    boolean hasOffset();
+    int getOffset();
     
-    // optional string bottom_right = 3;
-    boolean hasBottomRight();
-    String getBottomRight();
+    // optional int32 limit = 3;
+    boolean hasLimit();
+    int getLimit();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Highlight highlight = 4;
+    boolean hasHighlight();
+    com.alicloud.openservices.tablestore.core.protocol.Search.Highlight getHighlight();
+    com.alicloud.openservices.tablestore.core.protocol.Search.HighlightOrBuilder getHighlightOrBuilder();
   }
-  public static final class GeoBoundingBoxQuery extends
+  public static final class InnerHits extends
       com.google.protobuf.GeneratedMessage
-      implements GeoBoundingBoxQueryOrBuilder {
-    // Use GeoBoundingBoxQuery.newBuilder() to construct.
-    private GeoBoundingBoxQuery(Builder builder) {
+      implements InnerHitsOrBuilder {
+    // Use InnerHits.newBuilder() to construct.
+    private InnerHits(Builder builder) {
       super(builder);
     }
-    private GeoBoundingBoxQuery(boolean noInit) {}
+    private InnerHits(boolean noInit) {}
     
-    private static final GeoBoundingBoxQuery defaultInstance;
-    public static GeoBoundingBoxQuery getDefaultInstance() {
+    private static final InnerHits defaultInstance;
+    public static InnerHits getDefaultInstance() {
       return defaultInstance;
     }
     
-    public GeoBoundingBoxQuery getDefaultInstanceForType() {
+    public InnerHits getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoBoundingBoxQuery_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_InnerHits_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoBoundingBoxQuery_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_InnerHits_fieldAccessorTable;
     }
     
     private int bitField0_;
-    // optional string field_name = 1;
-    public static final int FIELD_NAME_FIELD_NUMBER = 1;
-    private java.lang.Object fieldName_;
-    public boolean hasFieldName() {
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Sort sort = 1;
+    public static final int SORT_FIELD_NUMBER = 1;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.Sort sort_;
+    public boolean hasSort() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public String getFieldName() {
-      java.lang.Object ref = fieldName_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          fieldName_ = s;
-        }
-        return s;
-      }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.Sort getSort() {
+      return sort_;
     }
-    private com.google.protobuf.ByteString getFieldNameBytes() {
-      java.lang.Object ref = fieldName_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        fieldName_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder getSortOrBuilder() {
+      return sort_;
     }
     
-    // optional string top_left = 2;
-    public static final int TOP_LEFT_FIELD_NUMBER = 2;
-    private java.lang.Object topLeft_;
-    public boolean hasTopLeft() {
+    // optional int32 offset = 2;
+    public static final int OFFSET_FIELD_NUMBER = 2;
+    private int offset_;
+    public boolean hasOffset() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
-    public String getTopLeft() {
-      java.lang.Object ref = topLeft_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          topLeft_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getTopLeftBytes() {
-      java.lang.Object ref = topLeft_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        topLeft_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public int getOffset() {
+      return offset_;
     }
     
-    // optional string bottom_right = 3;
-    public static final int BOTTOM_RIGHT_FIELD_NUMBER = 3;
-    private java.lang.Object bottomRight_;
-    public boolean hasBottomRight() {
+    // optional int32 limit = 3;
+    public static final int LIMIT_FIELD_NUMBER = 3;
+    private int limit_;
+    public boolean hasLimit() {
       return ((bitField0_ & 0x00000004) == 0x00000004);
     }
-    public String getBottomRight() {
-      java.lang.Object ref = bottomRight_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          bottomRight_ = s;
-        }
-        return s;
-      }
+    public int getLimit() {
+      return limit_;
     }
-    private com.google.protobuf.ByteString getBottomRightBytes() {
-      java.lang.Object ref = bottomRight_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        bottomRight_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Highlight highlight = 4;
+    public static final int HIGHLIGHT_FIELD_NUMBER = 4;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.Highlight highlight_;
+    public boolean hasHighlight() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.Highlight getHighlight() {
+      return highlight_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightOrBuilder getHighlightOrBuilder() {
+      return highlight_;
     }
     
     private void initFields() {
-      fieldName_ = "";
-      topLeft_ = "";
-      bottomRight_ = "";
+      sort_ = com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance();
+      offset_ = 0;
+      limit_ = 0;
+      highlight_ = com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.getDefaultInstance();
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -56392,13 +57118,16 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, getFieldNameBytes());
+        output.writeMessage(1, sort_);
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBytes(2, getTopLeftBytes());
+        output.writeInt32(2, offset_);
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeBytes(3, getBottomRightBytes());
+        output.writeInt32(3, limit_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeMessage(4, highlight_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -56411,15 +57140,19 @@ public int getSerializedSize() {
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, getFieldNameBytes());
+          .computeMessageSize(1, sort_);
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(2, getTopLeftBytes());
+          .computeInt32Size(2, offset_);
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(3, getBottomRightBytes());
+          .computeInt32Size(3, limit_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, highlight_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -56433,41 +57166,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -56476,7 +57209,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBound
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -56487,12 +57220,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBound
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -56502,7 +57235,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBound
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -56515,18 +57248,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQueryOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.InnerHitsOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoBoundingBoxQuery_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_InnerHits_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoBoundingBoxQuery_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_InnerHits_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -56537,6 +57270,8 @@ private Builder(BuilderParent parent) {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getSortFieldBuilder();
+          getHighlightFieldBuilder();
         }
       }
       private static Builder create() {
@@ -56545,12 +57280,22 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        fieldName_ = "";
+        if (sortBuilder_ == null) {
+          sort_ = com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance();
+        } else {
+          sortBuilder_.clear();
+        }
         bitField0_ = (bitField0_ & ~0x00000001);
-        topLeft_ = "";
+        offset_ = 0;
         bitField0_ = (bitField0_ & ~0x00000002);
-        bottomRight_ = "";
+        limit_ = 0;
         bitField0_ = (bitField0_ & ~0x00000004);
+        if (highlightBuilder_ == null) {
+          highlight_ = com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.getDefaultInstance();
+        } else {
+          highlightBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000008);
         return this;
       }
       
@@ -56560,24 +57305,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -56585,46 +57330,61 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBox
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery result = new com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits result = new com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        result.fieldName_ = fieldName_;
+        if (sortBuilder_ == null) {
+          result.sort_ = sort_;
+        } else {
+          result.sort_ = sortBuilder_.build();
+        }
         if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
           to_bitField0_ |= 0x00000002;
         }
-        result.topLeft_ = topLeft_;
+        result.offset_ = offset_;
         if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
           to_bitField0_ |= 0x00000004;
         }
-        result.bottomRight_ = bottomRight_;
+        result.limit_ = limit_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        if (highlightBuilder_ == null) {
+          result.highlight_ = highlight_;
+        } else {
+          result.highlight_ = highlightBuilder_.build();
+        }
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery.getDefaultInstance()) return this;
-        if (other.hasFieldName()) {
-          setFieldName(other.getFieldName());
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.getDefaultInstance()) return this;
+        if (other.hasSort()) {
+          mergeSort(other.getSort());
         }
-        if (other.hasTopLeft()) {
-          setTopLeft(other.getTopLeft());
+        if (other.hasOffset()) {
+          setOffset(other.getOffset());
         }
-        if (other.hasBottomRight()) {
-          setBottomRight(other.getBottomRight());
+        if (other.hasLimit()) {
+          setLimit(other.getLimit());
+        }
+        if (other.hasHighlight()) {
+          mergeHighlight(other.getHighlight());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -56658,18 +57418,31 @@ public Builder mergeFrom(
               break;
             }
             case 10: {
-              bitField0_ |= 0x00000001;
-              fieldName_ = input.readBytes();
+              com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.Sort.newBuilder();
+              if (hasSort()) {
+                subBuilder.mergeFrom(getSort());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setSort(subBuilder.buildPartial());
               break;
             }
-            case 18: {
+            case 16: {
               bitField0_ |= 0x00000002;
-              topLeft_ = input.readBytes();
+              offset_ = input.readInt32();
               break;
             }
-            case 26: {
+            case 24: {
               bitField0_ |= 0x00000004;
-              bottomRight_ = input.readBytes();
+              limit_ = input.readInt32();
+              break;
+            }
+            case 34: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.newBuilder();
+              if (hasHighlight()) {
+                subBuilder.mergeFrom(getHighlight());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setHighlight(subBuilder.buildPartial());
               break;
             }
           }
@@ -56678,166 +57451,280 @@ public Builder mergeFrom(
       
       private int bitField0_;
       
-      // optional string field_name = 1;
-      private java.lang.Object fieldName_ = "";
-      public boolean hasFieldName() {
+      // optional .com.alicloud.openservices.tablestore.core.protocol.Sort sort = 1;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.Sort sort_ = com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Sort, com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder> sortBuilder_;
+      public boolean hasSort() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public String getFieldName() {
-        java.lang.Object ref = fieldName_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
-          fieldName_ = s;
-          return s;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Sort getSort() {
+        if (sortBuilder_ == null) {
+          return sort_;
         } else {
-          return (String) ref;
+          return sortBuilder_.getMessage();
         }
       }
-      public Builder setFieldName(String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000001;
-        fieldName_ = value;
-        onChanged();
+      public Builder setSort(com.alicloud.openservices.tablestore.core.protocol.Search.Sort value) {
+        if (sortBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sort_ = value;
+          onChanged();
+        } else {
+          sortBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000001;
         return this;
       }
-      public Builder clearFieldName() {
+      public Builder setSort(
+          com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder builderForValue) {
+        if (sortBuilder_ == null) {
+          sort_ = builderForValue.build();
+          onChanged();
+        } else {
+          sortBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000001;
+        return this;
+      }
+      public Builder mergeSort(com.alicloud.openservices.tablestore.core.protocol.Search.Sort value) {
+        if (sortBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) == 0x00000001) &&
+              sort_ != com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance()) {
+            sort_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.Sort.newBuilder(sort_).mergeFrom(value).buildPartial();
+          } else {
+            sort_ = value;
+          }
+          onChanged();
+        } else {
+          sortBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000001;
+        return this;
+      }
+      public Builder clearSort() {
+        if (sortBuilder_ == null) {
+          sort_ = com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance();
+          onChanged();
+        } else {
+          sortBuilder_.clear();
+        }
         bitField0_ = (bitField0_ & ~0x00000001);
-        fieldName_ = getDefaultInstance().getFieldName();
-        onChanged();
         return this;
       }
-      void setFieldName(com.google.protobuf.ByteString value) {
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder getSortBuilder() {
         bitField0_ |= 0x00000001;
-        fieldName_ = value;
         onChanged();
+        return getSortFieldBuilder().getBuilder();
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder getSortOrBuilder() {
+        if (sortBuilder_ != null) {
+          return sortBuilder_.getMessageOrBuilder();
+        } else {
+          return sort_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Sort, com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder> 
+          getSortFieldBuilder() {
+        if (sortBuilder_ == null) {
+          sortBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.Sort, com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder>(
+                  sort_,
+                  getParentForChildren(),
+                  isClean());
+          sort_ = null;
+        }
+        return sortBuilder_;
       }
       
-      // optional string top_left = 2;
-      private java.lang.Object topLeft_ = "";
-      public boolean hasTopLeft() {
+      // optional int32 offset = 2;
+      private int offset_ ;
+      public boolean hasOffset() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
-      public String getTopLeft() {
-        java.lang.Object ref = topLeft_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
-          topLeft_ = s;
-          return s;
-        } else {
-          return (String) ref;
-        }
+      public int getOffset() {
+        return offset_;
       }
-      public Builder setTopLeft(String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000002;
-        topLeft_ = value;
+      public Builder setOffset(int value) {
+        bitField0_ |= 0x00000002;
+        offset_ = value;
         onChanged();
         return this;
       }
-      public Builder clearTopLeft() {
+      public Builder clearOffset() {
         bitField0_ = (bitField0_ & ~0x00000002);
-        topLeft_ = getDefaultInstance().getTopLeft();
+        offset_ = 0;
         onChanged();
         return this;
       }
-      void setTopLeft(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000002;
-        topLeft_ = value;
-        onChanged();
-      }
       
-      // optional string bottom_right = 3;
-      private java.lang.Object bottomRight_ = "";
-      public boolean hasBottomRight() {
+      // optional int32 limit = 3;
+      private int limit_ ;
+      public boolean hasLimit() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
-      public String getBottomRight() {
-        java.lang.Object ref = bottomRight_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
-          bottomRight_ = s;
-          return s;
-        } else {
-          return (String) ref;
-        }
+      public int getLimit() {
+        return limit_;
       }
-      public Builder setBottomRight(String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000004;
-        bottomRight_ = value;
+      public Builder setLimit(int value) {
+        bitField0_ |= 0x00000004;
+        limit_ = value;
         onChanged();
         return this;
       }
-      public Builder clearBottomRight() {
+      public Builder clearLimit() {
         bitField0_ = (bitField0_ & ~0x00000004);
-        bottomRight_ = getDefaultInstance().getBottomRight();
+        limit_ = 0;
         onChanged();
         return this;
       }
-      void setBottomRight(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000004;
-        bottomRight_ = value;
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.Highlight highlight = 4;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.Highlight highlight_ = com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Highlight, com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightOrBuilder> highlightBuilder_;
+      public boolean hasHighlight() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Highlight getHighlight() {
+        if (highlightBuilder_ == null) {
+          return highlight_;
+        } else {
+          return highlightBuilder_.getMessage();
+        }
+      }
+      public Builder setHighlight(com.alicloud.openservices.tablestore.core.protocol.Search.Highlight value) {
+        if (highlightBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          highlight_ = value;
+          onChanged();
+        } else {
+          highlightBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder setHighlight(
+          com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.Builder builderForValue) {
+        if (highlightBuilder_ == null) {
+          highlight_ = builderForValue.build();
+          onChanged();
+        } else {
+          highlightBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder mergeHighlight(com.alicloud.openservices.tablestore.core.protocol.Search.Highlight value) {
+        if (highlightBuilder_ == null) {
+          if (((bitField0_ & 0x00000008) == 0x00000008) &&
+              highlight_ != com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.getDefaultInstance()) {
+            highlight_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.newBuilder(highlight_).mergeFrom(value).buildPartial();
+          } else {
+            highlight_ = value;
+          }
+          onChanged();
+        } else {
+          highlightBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder clearHighlight() {
+        if (highlightBuilder_ == null) {
+          highlight_ = com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.getDefaultInstance();
+          onChanged();
+        } else {
+          highlightBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000008);
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.Builder getHighlightBuilder() {
+        bitField0_ |= 0x00000008;
         onChanged();
+        return getHighlightFieldBuilder().getBuilder();
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightOrBuilder getHighlightOrBuilder() {
+        if (highlightBuilder_ != null) {
+          return highlightBuilder_.getMessageOrBuilder();
+        } else {
+          return highlight_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Highlight, com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightOrBuilder> 
+          getHighlightFieldBuilder() {
+        if (highlightBuilder_ == null) {
+          highlightBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.Highlight, com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightOrBuilder>(
+                  highlight_,
+                  getParentForChildren(),
+                  isClean());
+          highlight_ = null;
+        }
+        return highlightBuilder_;
       }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.GeoBoundingBoxQuery)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.InnerHits)
     }
     
     static {
-      defaultInstance = new GeoBoundingBoxQuery(true);
+      defaultInstance = new InnerHits(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.GeoBoundingBoxQuery)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.InnerHits)
   }
   
-  public interface GeoDistanceQueryOrBuilder
+  public interface GeoBoundingBoxQueryOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
     // optional string field_name = 1;
     boolean hasFieldName();
     String getFieldName();
     
-    // optional string center_point = 2;
-    boolean hasCenterPoint();
-    String getCenterPoint();
+    // optional string top_left = 2;
+    boolean hasTopLeft();
+    String getTopLeft();
     
-    // optional double distance = 3;
-    boolean hasDistance();
-    double getDistance();
+    // optional string bottom_right = 3;
+    boolean hasBottomRight();
+    String getBottomRight();
   }
-  public static final class GeoDistanceQuery extends
+  public static final class GeoBoundingBoxQuery extends
       com.google.protobuf.GeneratedMessage
-      implements GeoDistanceQueryOrBuilder {
-    // Use GeoDistanceQuery.newBuilder() to construct.
-    private GeoDistanceQuery(Builder builder) {
+      implements GeoBoundingBoxQueryOrBuilder {
+    // Use GeoBoundingBoxQuery.newBuilder() to construct.
+    private GeoBoundingBoxQuery(Builder builder) {
       super(builder);
     }
-    private GeoDistanceQuery(boolean noInit) {}
+    private GeoBoundingBoxQuery(boolean noInit) {}
     
-    private static final GeoDistanceQuery defaultInstance;
-    public static GeoDistanceQuery getDefaultInstance() {
+    private static final GeoBoundingBoxQuery defaultInstance;
+    public static GeoBoundingBoxQuery getDefaultInstance() {
       return defaultInstance;
     }
     
-    public GeoDistanceQuery getDefaultInstanceForType() {
+    public GeoBoundingBoxQuery getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceQuery_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoBoundingBoxQuery_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceQuery_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoBoundingBoxQuery_fieldAccessorTable;
     }
     
     private int bitField0_;
@@ -56873,14 +57760,14 @@ private com.google.protobuf.ByteString getFieldNameBytes() {
       }
     }
     
-    // optional string center_point = 2;
-    public static final int CENTER_POINT_FIELD_NUMBER = 2;
-    private java.lang.Object centerPoint_;
-    public boolean hasCenterPoint() {
+    // optional string top_left = 2;
+    public static final int TOP_LEFT_FIELD_NUMBER = 2;
+    private java.lang.Object topLeft_;
+    public boolean hasTopLeft() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
-    public String getCenterPoint() {
-      java.lang.Object ref = centerPoint_;
+    public String getTopLeft() {
+      java.lang.Object ref = topLeft_;
       if (ref instanceof String) {
         return (String) ref;
       } else {
@@ -56888,37 +57775,59 @@ public String getCenterPoint() {
             (com.google.protobuf.ByteString) ref;
         String s = bs.toStringUtf8();
         if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          centerPoint_ = s;
+          topLeft_ = s;
         }
         return s;
       }
     }
-    private com.google.protobuf.ByteString getCenterPointBytes() {
-      java.lang.Object ref = centerPoint_;
+    private com.google.protobuf.ByteString getTopLeftBytes() {
+      java.lang.Object ref = topLeft_;
       if (ref instanceof String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        centerPoint_ = b;
+        topLeft_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
     
-    // optional double distance = 3;
-    public static final int DISTANCE_FIELD_NUMBER = 3;
-    private double distance_;
-    public boolean hasDistance() {
+    // optional string bottom_right = 3;
+    public static final int BOTTOM_RIGHT_FIELD_NUMBER = 3;
+    private java.lang.Object bottomRight_;
+    public boolean hasBottomRight() {
       return ((bitField0_ & 0x00000004) == 0x00000004);
     }
-    public double getDistance() {
-      return distance_;
+    public String getBottomRight() {
+      java.lang.Object ref = bottomRight_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          bottomRight_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getBottomRightBytes() {
+      java.lang.Object ref = bottomRight_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        bottomRight_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
     
     private void initFields() {
       fieldName_ = "";
-      centerPoint_ = "";
-      distance_ = 0D;
+      topLeft_ = "";
+      bottomRight_ = "";
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -56936,10 +57845,10 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
         output.writeBytes(1, getFieldNameBytes());
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBytes(2, getCenterPointBytes());
+        output.writeBytes(2, getTopLeftBytes());
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeDouble(3, distance_);
+        output.writeBytes(3, getBottomRightBytes());
       }
       getUnknownFields().writeTo(output);
     }
@@ -56956,11 +57865,11 @@ public int getSerializedSize() {
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(2, getCenterPointBytes());
+          .computeBytesSize(2, getTopLeftBytes());
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeDoubleSize(3, distance_);
+          .computeBytesSize(3, getBottomRightBytes());
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -56974,41 +57883,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -57017,7 +57926,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDista
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -57028,12 +57937,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDista
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -57043,7 +57952,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDista
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -57056,18 +57965,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQueryOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQueryOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceQuery_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoBoundingBoxQuery_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceQuery_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoBoundingBoxQuery_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -57088,9 +57997,9 @@ public Builder clear() {
         super.clear();
         fieldName_ = "";
         bitField0_ = (bitField0_ & ~0x00000001);
-        centerPoint_ = "";
+        topLeft_ = "";
         bitField0_ = (bitField0_ & ~0x00000002);
-        distance_ = 0D;
+        bottomRight_ = "";
         bitField0_ = (bitField0_ & ~0x00000004);
         return this;
       }
@@ -57101,24 +58010,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -57126,8 +58035,8 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQue
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery result = new com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery result = new com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
@@ -57137,35 +58046,35 @@ public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuer
         if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
           to_bitField0_ |= 0x00000002;
         }
-        result.centerPoint_ = centerPoint_;
+        result.topLeft_ = topLeft_;
         if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
           to_bitField0_ |= 0x00000004;
         }
-        result.distance_ = distance_;
+        result.bottomRight_ = bottomRight_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery.getDefaultInstance()) return this;
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery.getDefaultInstance()) return this;
         if (other.hasFieldName()) {
           setFieldName(other.getFieldName());
         }
-        if (other.hasCenterPoint()) {
-          setCenterPoint(other.getCenterPoint());
+        if (other.hasTopLeft()) {
+          setTopLeft(other.getTopLeft());
         }
-        if (other.hasDistance()) {
-          setDistance(other.getDistance());
+        if (other.hasBottomRight()) {
+          setBottomRight(other.getBottomRight());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -57205,12 +58114,12 @@ public Builder mergeFrom(
             }
             case 18: {
               bitField0_ |= 0x00000002;
-              centerPoint_ = input.readBytes();
+              topLeft_ = input.readBytes();
               break;
             }
-            case 25: {
+            case 26: {
               bitField0_ |= 0x00000004;
-              distance_ = input.readDouble();
+              bottomRight_ = input.readBytes();
               break;
             }
           }
@@ -57255,112 +58164,130 @@ void setFieldName(com.google.protobuf.ByteString value) {
         onChanged();
       }
       
-      // optional string center_point = 2;
-      private java.lang.Object centerPoint_ = "";
-      public boolean hasCenterPoint() {
+      // optional string top_left = 2;
+      private java.lang.Object topLeft_ = "";
+      public boolean hasTopLeft() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
-      public String getCenterPoint() {
-        java.lang.Object ref = centerPoint_;
+      public String getTopLeft() {
+        java.lang.Object ref = topLeft_;
         if (!(ref instanceof String)) {
           String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
-          centerPoint_ = s;
+          topLeft_ = s;
           return s;
         } else {
           return (String) ref;
         }
       }
-      public Builder setCenterPoint(String value) {
+      public Builder setTopLeft(String value) {
         if (value == null) {
     throw new NullPointerException();
   }
   bitField0_ |= 0x00000002;
-        centerPoint_ = value;
+        topLeft_ = value;
         onChanged();
         return this;
       }
-      public Builder clearCenterPoint() {
+      public Builder clearTopLeft() {
         bitField0_ = (bitField0_ & ~0x00000002);
-        centerPoint_ = getDefaultInstance().getCenterPoint();
+        topLeft_ = getDefaultInstance().getTopLeft();
         onChanged();
         return this;
       }
-      void setCenterPoint(com.google.protobuf.ByteString value) {
+      void setTopLeft(com.google.protobuf.ByteString value) {
         bitField0_ |= 0x00000002;
-        centerPoint_ = value;
+        topLeft_ = value;
         onChanged();
       }
       
-      // optional double distance = 3;
-      private double distance_ ;
-      public boolean hasDistance() {
+      // optional string bottom_right = 3;
+      private java.lang.Object bottomRight_ = "";
+      public boolean hasBottomRight() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
-      public double getDistance() {
-        return distance_;
+      public String getBottomRight() {
+        java.lang.Object ref = bottomRight_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          bottomRight_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
       }
-      public Builder setDistance(double value) {
-        bitField0_ |= 0x00000004;
-        distance_ = value;
+      public Builder setBottomRight(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000004;
+        bottomRight_ = value;
         onChanged();
         return this;
       }
-      public Builder clearDistance() {
+      public Builder clearBottomRight() {
         bitField0_ = (bitField0_ & ~0x00000004);
-        distance_ = 0D;
+        bottomRight_ = getDefaultInstance().getBottomRight();
         onChanged();
         return this;
       }
+      void setBottomRight(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000004;
+        bottomRight_ = value;
+        onChanged();
+      }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.GeoDistanceQuery)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.GeoBoundingBoxQuery)
     }
     
     static {
-      defaultInstance = new GeoDistanceQuery(true);
+      defaultInstance = new GeoBoundingBoxQuery(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.GeoDistanceQuery)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.GeoBoundingBoxQuery)
   }
   
-  public interface GeoPolygonQueryOrBuilder
+  public interface GeoDistanceQueryOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
     // optional string field_name = 1;
     boolean hasFieldName();
     String getFieldName();
     
-    // repeated string points = 2;
-    java.util.List<String> getPointsList();
-    int getPointsCount();
-    String getPoints(int index);
+    // optional string center_point = 2;
+    boolean hasCenterPoint();
+    String getCenterPoint();
+    
+    // optional double distance = 3;
+    boolean hasDistance();
+    double getDistance();
   }
-  public static final class GeoPolygonQuery extends
+  public static final class GeoDistanceQuery extends
       com.google.protobuf.GeneratedMessage
-      implements GeoPolygonQueryOrBuilder {
-    // Use GeoPolygonQuery.newBuilder() to construct.
-    private GeoPolygonQuery(Builder builder) {
+      implements GeoDistanceQueryOrBuilder {
+    // Use GeoDistanceQuery.newBuilder() to construct.
+    private GeoDistanceQuery(Builder builder) {
       super(builder);
     }
-    private GeoPolygonQuery(boolean noInit) {}
+    private GeoDistanceQuery(boolean noInit) {}
     
-    private static final GeoPolygonQuery defaultInstance;
-    public static GeoPolygonQuery getDefaultInstance() {
+    private static final GeoDistanceQuery defaultInstance;
+    public static GeoDistanceQuery getDefaultInstance() {
       return defaultInstance;
     }
     
-    public GeoPolygonQuery getDefaultInstanceForType() {
+    public GeoDistanceQuery getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoPolygonQuery_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceQuery_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoPolygonQuery_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceQuery_fieldAccessorTable;
     }
     
     private int bitField0_;
@@ -57396,23 +58323,52 @@ private com.google.protobuf.ByteString getFieldNameBytes() {
       }
     }
     
-    // repeated string points = 2;
-    public static final int POINTS_FIELD_NUMBER = 2;
-    private com.google.protobuf.LazyStringList points_;
-    public java.util.List<String>
-        getPointsList() {
-      return points_;
+    // optional string center_point = 2;
+    public static final int CENTER_POINT_FIELD_NUMBER = 2;
+    private java.lang.Object centerPoint_;
+    public boolean hasCenterPoint() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
     }
-    public int getPointsCount() {
-      return points_.size();
+    public String getCenterPoint() {
+      java.lang.Object ref = centerPoint_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          centerPoint_ = s;
+        }
+        return s;
+      }
     }
-    public String getPoints(int index) {
-      return points_.get(index);
+    private com.google.protobuf.ByteString getCenterPointBytes() {
+      java.lang.Object ref = centerPoint_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        centerPoint_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional double distance = 3;
+    public static final int DISTANCE_FIELD_NUMBER = 3;
+    private double distance_;
+    public boolean hasDistance() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public double getDistance() {
+      return distance_;
     }
     
     private void initFields() {
       fieldName_ = "";
-      points_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      centerPoint_ = "";
+      distance_ = 0D;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -57429,8 +58385,11 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         output.writeBytes(1, getFieldNameBytes());
       }
-      for (int i = 0; i < points_.size(); i++) {
-        output.writeBytes(2, points_.getByteString(i));
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBytes(2, getCenterPointBytes());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeDouble(3, distance_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -57445,14 +58404,13 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeBytesSize(1, getFieldNameBytes());
       }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < points_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeBytesSizeNoTag(points_.getByteString(i));
-        }
-        size += dataSize;
-        size += 1 * getPointsList().size();
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(2, getCenterPointBytes());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(3, distance_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -57466,41 +58424,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -57509,7 +58467,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolyg
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -57520,12 +58478,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolyg
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -57535,7 +58493,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolyg
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -57548,18 +58506,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQueryOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQueryOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoPolygonQuery_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceQuery_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoPolygonQuery_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceQuery_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -57580,8 +58538,10 @@ public Builder clear() {
         super.clear();
         fieldName_ = "";
         bitField0_ = (bitField0_ & ~0x00000001);
-        points_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        centerPoint_ = "";
         bitField0_ = (bitField0_ & ~0x00000002);
+        distance_ = 0D;
+        bitField0_ = (bitField0_ & ~0x00000004);
         return this;
       }
       
@@ -57591,24 +58551,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -57616,48 +58576,46 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuer
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery result = new com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery result = new com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
         result.fieldName_ = fieldName_;
-        if (((bitField0_ & 0x00000002) == 0x00000002)) {
-          points_ = new com.google.protobuf.UnmodifiableLazyStringList(
-              points_);
-          bitField0_ = (bitField0_ & ~0x00000002);
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
         }
-        result.points_ = points_;
+        result.centerPoint_ = centerPoint_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.distance_ = distance_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery.getDefaultInstance()) return this;
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery.getDefaultInstance()) return this;
         if (other.hasFieldName()) {
           setFieldName(other.getFieldName());
         }
-        if (!other.points_.isEmpty()) {
-          if (points_.isEmpty()) {
-            points_ = other.points_;
-            bitField0_ = (bitField0_ & ~0x00000002);
-          } else {
-            ensurePointsIsMutable();
-            points_.addAll(other.points_);
-          }
-          onChanged();
+        if (other.hasCenterPoint()) {
+          setCenterPoint(other.getCenterPoint());
+        }
+        if (other.hasDistance()) {
+          setDistance(other.getDistance());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -57696,8 +58654,13 @@ public Builder mergeFrom(
               break;
             }
             case 18: {
-              ensurePointsIsMutable();
-              points_.add(input.readBytes());
+              bitField0_ |= 0x00000002;
+              centerPoint_ = input.readBytes();
+              break;
+            }
+            case 25: {
+              bitField0_ |= 0x00000004;
+              distance_ = input.readDouble();
               break;
             }
           }
@@ -57742,106 +58705,112 @@ void setFieldName(com.google.protobuf.ByteString value) {
         onChanged();
       }
       
-      // repeated string points = 2;
-      private com.google.protobuf.LazyStringList points_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      private void ensurePointsIsMutable() {
-        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
-          points_ = new com.google.protobuf.LazyStringArrayList(points_);
-          bitField0_ |= 0x00000002;
-         }
-      }
-      public java.util.List<String>
-          getPointsList() {
-        return java.util.Collections.unmodifiableList(points_);
-      }
-      public int getPointsCount() {
-        return points_.size();
+      // optional string center_point = 2;
+      private java.lang.Object centerPoint_ = "";
+      public boolean hasCenterPoint() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
       }
-      public String getPoints(int index) {
-        return points_.get(index);
+      public String getCenterPoint() {
+        java.lang.Object ref = centerPoint_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          centerPoint_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
       }
-      public Builder setPoints(
-          int index, String value) {
+      public Builder setCenterPoint(String value) {
         if (value == null) {
     throw new NullPointerException();
   }
-  ensurePointsIsMutable();
-        points_.set(index, value);
+  bitField0_ |= 0x00000002;
+        centerPoint_ = value;
         onChanged();
         return this;
       }
-      public Builder addPoints(String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensurePointsIsMutable();
-        points_.add(value);
+      public Builder clearCenterPoint() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        centerPoint_ = getDefaultInstance().getCenterPoint();
         onChanged();
         return this;
       }
-      public Builder addAllPoints(
-          java.lang.Iterable<String> values) {
-        ensurePointsIsMutable();
-        super.addAll(values, points_);
+      void setCenterPoint(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000002;
+        centerPoint_ = value;
         onChanged();
-        return this;
       }
-      public Builder clearPoints() {
-        points_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000002);
+      
+      // optional double distance = 3;
+      private double distance_ ;
+      public boolean hasDistance() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public double getDistance() {
+        return distance_;
+      }
+      public Builder setDistance(double value) {
+        bitField0_ |= 0x00000004;
+        distance_ = value;
         onChanged();
         return this;
       }
-      void addPoints(com.google.protobuf.ByteString value) {
-        ensurePointsIsMutable();
-        points_.add(value);
+      public Builder clearDistance() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        distance_ = 0D;
         onChanged();
+        return this;
       }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.GeoPolygonQuery)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.GeoDistanceQuery)
     }
     
     static {
-      defaultInstance = new GeoPolygonQuery(true);
+      defaultInstance = new GeoDistanceQuery(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.GeoPolygonQuery)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.GeoDistanceQuery)
   }
   
-  public interface ExistsQueryOrBuilder
+  public interface GeoPolygonQueryOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
     // optional string field_name = 1;
     boolean hasFieldName();
     String getFieldName();
+    
+    // repeated string points = 2;
+    java.util.List<String> getPointsList();
+    int getPointsCount();
+    String getPoints(int index);
   }
-  public static final class ExistsQuery extends
+  public static final class GeoPolygonQuery extends
       com.google.protobuf.GeneratedMessage
-      implements ExistsQueryOrBuilder {
-    // Use ExistsQuery.newBuilder() to construct.
-    private ExistsQuery(Builder builder) {
+      implements GeoPolygonQueryOrBuilder {
+    // Use GeoPolygonQuery.newBuilder() to construct.
+    private GeoPolygonQuery(Builder builder) {
       super(builder);
     }
-    private ExistsQuery(boolean noInit) {}
+    private GeoPolygonQuery(boolean noInit) {}
     
-    private static final ExistsQuery defaultInstance;
-    public static ExistsQuery getDefaultInstance() {
+    private static final GeoPolygonQuery defaultInstance;
+    public static GeoPolygonQuery getDefaultInstance() {
       return defaultInstance;
     }
     
-    public ExistsQuery getDefaultInstanceForType() {
+    public GeoPolygonQuery getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ExistsQuery_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoPolygonQuery_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ExistsQuery_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoPolygonQuery_fieldAccessorTable;
     }
     
     private int bitField0_;
@@ -57877,8 +58846,23 @@ private com.google.protobuf.ByteString getFieldNameBytes() {
       }
     }
     
+    // repeated string points = 2;
+    public static final int POINTS_FIELD_NUMBER = 2;
+    private com.google.protobuf.LazyStringList points_;
+    public java.util.List<String>
+        getPointsList() {
+      return points_;
+    }
+    public int getPointsCount() {
+      return points_.size();
+    }
+    public String getPoints(int index) {
+      return points_.get(index);
+    }
+    
     private void initFields() {
       fieldName_ = "";
+      points_ = com.google.protobuf.LazyStringArrayList.EMPTY;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -57895,6 +58879,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         output.writeBytes(1, getFieldNameBytes());
       }
+      for (int i = 0; i < points_.size(); i++) {
+        output.writeBytes(2, points_.getByteString(i));
+      }
       getUnknownFields().writeTo(output);
     }
     
@@ -57908,6 +58895,15 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeBytesSize(1, getFieldNameBytes());
       }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < points_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(points_.getByteString(i));
+        }
+        size += dataSize;
+        size += 1 * getPointsList().size();
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -57920,41 +58916,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -57963,7 +58959,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQu
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -57974,12 +58970,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQu
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -57989,7 +58985,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQu
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -58002,18 +58998,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQueryOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQueryOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ExistsQuery_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoPolygonQuery_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ExistsQuery_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoPolygonQuery_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -58034,6 +59030,8 @@ public Builder clear() {
         super.clear();
         fieldName_ = "";
         bitField0_ = (bitField0_ & ~0x00000001);
+        points_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
         return this;
       }
       
@@ -58043,24 +59041,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -58068,33 +59066,49 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery bu
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery result = new com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery result = new com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
         result.fieldName_ = fieldName_;
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          points_ = new com.google.protobuf.UnmodifiableLazyStringList(
+              points_);
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.points_ = points_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery.getDefaultInstance()) return this;
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery.getDefaultInstance()) return this;
         if (other.hasFieldName()) {
           setFieldName(other.getFieldName());
         }
+        if (!other.points_.isEmpty()) {
+          if (points_.isEmpty()) {
+            points_ = other.points_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensurePointsIsMutable();
+            points_.addAll(other.points_);
+          }
+          onChanged();
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -58131,6 +59145,11 @@ public Builder mergeFrom(
               fieldName_ = input.readBytes();
               break;
             }
+            case 18: {
+              ensurePointsIsMutable();
+              points_.add(input.readBytes());
+              break;
+            }
           }
         }
       }
@@ -58173,80 +59192,143 @@ void setFieldName(com.google.protobuf.ByteString value) {
         onChanged();
       }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.ExistsQuery)
+      // repeated string points = 2;
+      private com.google.protobuf.LazyStringList points_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensurePointsIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          points_ = new com.google.protobuf.LazyStringArrayList(points_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      public java.util.List<String>
+          getPointsList() {
+        return java.util.Collections.unmodifiableList(points_);
+      }
+      public int getPointsCount() {
+        return points_.size();
+      }
+      public String getPoints(int index) {
+        return points_.get(index);
+      }
+      public Builder setPoints(
+          int index, String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensurePointsIsMutable();
+        points_.set(index, value);
+        onChanged();
+        return this;
+      }
+      public Builder addPoints(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensurePointsIsMutable();
+        points_.add(value);
+        onChanged();
+        return this;
+      }
+      public Builder addAllPoints(
+          java.lang.Iterable<String> values) {
+        ensurePointsIsMutable();
+        super.addAll(values, points_);
+        onChanged();
+        return this;
+      }
+      public Builder clearPoints() {
+        points_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        onChanged();
+        return this;
+      }
+      void addPoints(com.google.protobuf.ByteString value) {
+        ensurePointsIsMutable();
+        points_.add(value);
+        onChanged();
+      }
+      
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.GeoPolygonQuery)
     }
     
     static {
-      defaultInstance = new ExistsQuery(true);
+      defaultInstance = new GeoPolygonQuery(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.ExistsQuery)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.GeoPolygonQuery)
   }
   
-  public interface QueryOrBuilder
+  public interface ExistsQueryOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.QueryType type = 1;
-    boolean hasType();
-    com.alicloud.openservices.tablestore.core.protocol.Search.QueryType getType();
-    
-    // optional bytes query = 2;
-    boolean hasQuery();
-    com.google.protobuf.ByteString getQuery();
+    // optional string field_name = 1;
+    boolean hasFieldName();
+    String getFieldName();
   }
-  public static final class Query extends
+  public static final class ExistsQuery extends
       com.google.protobuf.GeneratedMessage
-      implements QueryOrBuilder {
-    // Use Query.newBuilder() to construct.
-    private Query(Builder builder) {
+      implements ExistsQueryOrBuilder {
+    // Use ExistsQuery.newBuilder() to construct.
+    private ExistsQuery(Builder builder) {
       super(builder);
     }
-    private Query(boolean noInit) {}
+    private ExistsQuery(boolean noInit) {}
     
-    private static final Query defaultInstance;
-    public static Query getDefaultInstance() {
+    private static final ExistsQuery defaultInstance;
+    public static ExistsQuery getDefaultInstance() {
       return defaultInstance;
     }
     
-    public Query getDefaultInstanceForType() {
+    public ExistsQuery getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Query_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ExistsQuery_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Query_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ExistsQuery_fieldAccessorTable;
     }
     
     private int bitField0_;
-    // optional .com.alicloud.openservices.tablestore.core.protocol.QueryType type = 1;
-    public static final int TYPE_FIELD_NUMBER = 1;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.QueryType type_;
-    public boolean hasType() {
+    // optional string field_name = 1;
+    public static final int FIELD_NAME_FIELD_NUMBER = 1;
+    private java.lang.Object fieldName_;
+    public boolean hasFieldName() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.QueryType getType() {
-      return type_;
-    }
-    
-    // optional bytes query = 2;
-    public static final int QUERY_FIELD_NUMBER = 2;
-    private com.google.protobuf.ByteString query_;
-    public boolean hasQuery() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
+    public String getFieldName() {
+      java.lang.Object ref = fieldName_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          fieldName_ = s;
+        }
+        return s;
+      }
     }
-    public com.google.protobuf.ByteString getQuery() {
-      return query_;
+    private com.google.protobuf.ByteString getFieldNameBytes() {
+      java.lang.Object ref = fieldName_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        fieldName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
     
     private void initFields() {
-      type_ = com.alicloud.openservices.tablestore.core.protocol.Search.QueryType.MATCH_QUERY;
-      query_ = com.google.protobuf.ByteString.EMPTY;
+      fieldName_ = "";
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -58261,10 +59343,7 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeEnum(1, type_.getNumber());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBytes(2, query_);
+        output.writeBytes(1, getFieldNameBytes());
       }
       getUnknownFields().writeTo(output);
     }
@@ -58277,11 +59356,7 @@ public int getSerializedSize() {
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, type_.getNumber());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(2, query_);
+          .computeBytesSize(1, getFieldNameBytes());
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -58295,41 +59370,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -58338,7 +59413,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.Query pa
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -58349,12 +59424,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.Query pa
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -58364,7 +59439,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.Query pa
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.Query prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -58377,18 +59452,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQueryOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Query_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ExistsQuery_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Query_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ExistsQuery_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.Query.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -58407,10 +59482,8 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        type_ = com.alicloud.openservices.tablestore.core.protocol.Search.QueryType.MATCH_QUERY;
+        fieldName_ = "";
         bitField0_ = (bitField0_ & ~0x00000001);
-        query_ = com.google.protobuf.ByteString.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000002);
         return this;
       }
       
@@ -58420,24 +59493,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Query getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Query build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.Query result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.Query buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.Query result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -58445,39 +59518,32 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.Query buildPar
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Query buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.Query result = new com.alicloud.openservices.tablestore.core.protocol.Search.Query(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery result = new com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        result.type_ = type_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.query_ = query_;
+        result.fieldName_ = fieldName_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.Query) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.Query)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.Query other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance()) return this;
-        if (other.hasType()) {
-          setType(other.getType());
-        }
-        if (other.hasQuery()) {
-          setQuery(other.getQuery());
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery.getDefaultInstance()) return this;
+        if (other.hasFieldName()) {
+          setFieldName(other.getFieldName());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -58510,20 +59576,9 @@ public Builder mergeFrom(
               }
               break;
             }
-            case 8: {
-              int rawValue = input.readEnum();
-              com.alicloud.openservices.tablestore.core.protocol.Search.QueryType value = com.alicloud.openservices.tablestore.core.protocol.Search.QueryType.valueOf(rawValue);
-              if (value == null) {
-                unknownFields.mergeVarintField(1, rawValue);
-              } else {
-                bitField0_ |= 0x00000001;
-                type_ = value;
-              }
-              break;
-            }
-            case 18: {
-              bitField0_ |= 0x00000002;
-              query_ = input.readBytes();
+            case 10: {
+              bitField0_ |= 0x00000001;
+              fieldName_ = input.readBytes();
               break;
             }
           }
@@ -58532,98 +59587,104 @@ public Builder mergeFrom(
       
       private int bitField0_;
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.QueryType type = 1;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.QueryType type_ = com.alicloud.openservices.tablestore.core.protocol.Search.QueryType.MATCH_QUERY;
-      public boolean hasType() {
+      // optional string field_name = 1;
+      private java.lang.Object fieldName_ = "";
+      public boolean hasFieldName() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryType getType() {
-        return type_;
-      }
-      public Builder setType(com.alicloud.openservices.tablestore.core.protocol.Search.QueryType value) {
-        if (value == null) {
-          throw new NullPointerException();
+      public String getFieldName() {
+        java.lang.Object ref = fieldName_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          fieldName_ = s;
+          return s;
+        } else {
+          return (String) ref;
         }
-        bitField0_ |= 0x00000001;
-        type_ = value;
-        onChanged();
-        return this;
-      }
-      public Builder clearType() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        type_ = com.alicloud.openservices.tablestore.core.protocol.Search.QueryType.MATCH_QUERY;
-        onChanged();
-        return this;
-      }
-      
-      // optional bytes query = 2;
-      private com.google.protobuf.ByteString query_ = com.google.protobuf.ByteString.EMPTY;
-      public boolean hasQuery() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
       }
-      public com.google.protobuf.ByteString getQuery() {
-        return query_;
-      }
-      public Builder setQuery(com.google.protobuf.ByteString value) {
+      public Builder setFieldName(String value) {
         if (value == null) {
     throw new NullPointerException();
   }
-  bitField0_ |= 0x00000002;
-        query_ = value;
+  bitField0_ |= 0x00000001;
+        fieldName_ = value;
         onChanged();
         return this;
       }
-      public Builder clearQuery() {
-        bitField0_ = (bitField0_ & ~0x00000002);
-        query_ = getDefaultInstance().getQuery();
+      public Builder clearFieldName() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        fieldName_ = getDefaultInstance().getFieldName();
         onChanged();
         return this;
       }
+      void setFieldName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        fieldName_ = value;
+        onChanged();
+      }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.Query)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.ExistsQuery)
     }
     
     static {
-      defaultInstance = new Query(true);
+      defaultInstance = new ExistsQuery(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.Query)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.ExistsQuery)
   }
   
-  public interface CollapseOrBuilder
+  public interface KnnVectorQueryOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
     // optional string field_name = 1;
     boolean hasFieldName();
     String getFieldName();
+    
+    // optional int32 top_k = 2;
+    boolean hasTopK();
+    int getTopK();
+    
+    // repeated float float32_query_vector = 4;
+    java.util.List<java.lang.Float> getFloat32QueryVectorList();
+    int getFloat32QueryVectorCount();
+    float getFloat32QueryVector(int index);
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Query filter = 5;
+    boolean hasFilter();
+    com.alicloud.openservices.tablestore.core.protocol.Search.Query getFilter();
+    com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder getFilterOrBuilder();
+    
+    // optional float weight = 6;
+    boolean hasWeight();
+    float getWeight();
   }
-  public static final class Collapse extends
+  public static final class KnnVectorQuery extends
       com.google.protobuf.GeneratedMessage
-      implements CollapseOrBuilder {
-    // Use Collapse.newBuilder() to construct.
-    private Collapse(Builder builder) {
+      implements KnnVectorQueryOrBuilder {
+    // Use KnnVectorQuery.newBuilder() to construct.
+    private KnnVectorQuery(Builder builder) {
       super(builder);
     }
-    private Collapse(boolean noInit) {}
+    private KnnVectorQuery(boolean noInit) {}
     
-    private static final Collapse defaultInstance;
-    public static Collapse getDefaultInstance() {
+    private static final KnnVectorQuery defaultInstance;
+    public static KnnVectorQuery getDefaultInstance() {
       return defaultInstance;
     }
     
-    public Collapse getDefaultInstanceForType() {
+    public KnnVectorQuery getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Collapse_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_KnnVectorQuery_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Collapse_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_KnnVectorQuery_fieldAccessorTable;
     }
     
     private int bitField0_;
@@ -58659,8 +59720,59 @@ private com.google.protobuf.ByteString getFieldNameBytes() {
       }
     }
     
+    // optional int32 top_k = 2;
+    public static final int TOP_K_FIELD_NUMBER = 2;
+    private int topK_;
+    public boolean hasTopK() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public int getTopK() {
+      return topK_;
+    }
+    
+    // repeated float float32_query_vector = 4;
+    public static final int FLOAT32_QUERY_VECTOR_FIELD_NUMBER = 4;
+    private java.util.List<java.lang.Float> float32QueryVector_;
+    public java.util.List<java.lang.Float>
+        getFloat32QueryVectorList() {
+      return float32QueryVector_;
+    }
+    public int getFloat32QueryVectorCount() {
+      return float32QueryVector_.size();
+    }
+    public float getFloat32QueryVector(int index) {
+      return float32QueryVector_.get(index);
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Query filter = 5;
+    public static final int FILTER_FIELD_NUMBER = 5;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.Query filter_;
+    public boolean hasFilter() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.Query getFilter() {
+      return filter_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder getFilterOrBuilder() {
+      return filter_;
+    }
+    
+    // optional float weight = 6;
+    public static final int WEIGHT_FIELD_NUMBER = 6;
+    private float weight_;
+    public boolean hasWeight() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public float getWeight() {
+      return weight_;
+    }
+    
     private void initFields() {
       fieldName_ = "";
+      topK_ = 0;
+      float32QueryVector_ = java.util.Collections.emptyList();;
+      filter_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
+      weight_ = 0F;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -58677,6 +59789,18 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         output.writeBytes(1, getFieldNameBytes());
       }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeInt32(2, topK_);
+      }
+      for (int i = 0; i < float32QueryVector_.size(); i++) {
+        output.writeFloat(4, float32QueryVector_.get(i));
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeMessage(5, filter_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeFloat(6, weight_);
+      }
       getUnknownFields().writeTo(output);
     }
     
@@ -58690,6 +59814,24 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeBytesSize(1, getFieldNameBytes());
       }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(2, topK_);
+      }
+      {
+        int dataSize = 0;
+        dataSize = 4 * getFloat32QueryVectorList().size();
+        size += dataSize;
+        size += 1 * getFloat32QueryVectorList().size();
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, filter_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(6, weight_);
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -58702,41 +59844,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -58745,7 +59887,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -58756,12 +59898,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -58771,7 +59913,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.Collapse prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -58784,18 +59926,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.CollapseOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQueryOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Collapse_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_KnnVectorQuery_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Collapse_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_KnnVectorQuery_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -58806,6 +59948,7 @@ private Builder(BuilderParent parent) {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getFilterFieldBuilder();
         }
       }
       private static Builder create() {
@@ -58816,6 +59959,18 @@ public Builder clear() {
         super.clear();
         fieldName_ = "";
         bitField0_ = (bitField0_ & ~0x00000001);
+        topK_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        float32QueryVector_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        if (filterBuilder_ == null) {
+          filter_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
+        } else {
+          filterBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000008);
+        weight_ = 0F;
+        bitField0_ = (bitField0_ & ~0x00000010);
         return this;
       }
       
@@ -58825,24 +59980,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Collapse getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Collapse build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.Collapse result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.Collapse buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.Collapse result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -58850,33 +60005,73 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.Collapse build
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Collapse buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.Collapse result = new com.alicloud.openservices.tablestore.core.protocol.Search.Collapse(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery result = new com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
         result.fieldName_ = fieldName_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.topK_ = topK_;
+        if (((bitField0_ & 0x00000004) == 0x00000004)) {
+          float32QueryVector_ = java.util.Collections.unmodifiableList(float32QueryVector_);
+          bitField0_ = (bitField0_ & ~0x00000004);
+        }
+        result.float32QueryVector_ = float32QueryVector_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        if (filterBuilder_ == null) {
+          result.filter_ = filter_;
+        } else {
+          result.filter_ = filterBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.weight_ = weight_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.Collapse) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.Collapse)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.Collapse other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.getDefaultInstance()) return this;
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery.getDefaultInstance()) return this;
         if (other.hasFieldName()) {
           setFieldName(other.getFieldName());
         }
+        if (other.hasTopK()) {
+          setTopK(other.getTopK());
+        }
+        if (!other.float32QueryVector_.isEmpty()) {
+          if (float32QueryVector_.isEmpty()) {
+            float32QueryVector_ = other.float32QueryVector_;
+            bitField0_ = (bitField0_ & ~0x00000004);
+          } else {
+            ensureFloat32QueryVectorIsMutable();
+            float32QueryVector_.addAll(other.float32QueryVector_);
+          }
+          onChanged();
+        }
+        if (other.hasFilter()) {
+          mergeFilter(other.getFilter());
+        }
+        if (other.hasWeight()) {
+          setWeight(other.getWeight());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -58913,6 +60108,39 @@ public Builder mergeFrom(
               fieldName_ = input.readBytes();
               break;
             }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              topK_ = input.readInt32();
+              break;
+            }
+            case 37: {
+              ensureFloat32QueryVectorIsMutable();
+              float32QueryVector_.add(input.readFloat());
+              break;
+            }
+            case 34: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addFloat32QueryVector(input.readFloat());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 42: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.Query.newBuilder();
+              if (hasFilter()) {
+                subBuilder.mergeFrom(getFilter());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setFilter(subBuilder.buildPartial());
+              break;
+            }
+            case 53: {
+              bitField0_ |= 0x00000010;
+              weight_ = input.readFloat();
+              break;
+            }
           }
         }
       }
@@ -58955,106 +60183,257 @@ void setFieldName(com.google.protobuf.ByteString value) {
         onChanged();
       }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.Collapse)
-    }
-    
-    static {
-      defaultInstance = new Collapse(true);
-      defaultInstance.initFields();
-    }
-    
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.Collapse)
-  }
-  
-  public interface NestedFilterOrBuilder
-      extends com.google.protobuf.MessageOrBuilder {
-    
-    // optional string path = 1;
-    boolean hasPath();
-    String getPath();
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.Query filter = 2;
-    boolean hasFilter();
-    com.alicloud.openservices.tablestore.core.protocol.Search.Query getFilter();
-    com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder getFilterOrBuilder();
-  }
-  public static final class NestedFilter extends
-      com.google.protobuf.GeneratedMessage
-      implements NestedFilterOrBuilder {
-    // Use NestedFilter.newBuilder() to construct.
-    private NestedFilter(Builder builder) {
-      super(builder);
-    }
-    private NestedFilter(boolean noInit) {}
-    
-    private static final NestedFilter defaultInstance;
-    public static NestedFilter getDefaultInstance() {
-      return defaultInstance;
-    }
-    
-    public NestedFilter getDefaultInstanceForType() {
-      return defaultInstance;
-    }
-    
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_NestedFilter_descriptor;
-    }
+      // optional int32 top_k = 2;
+      private int topK_ ;
+      public boolean hasTopK() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public int getTopK() {
+        return topK_;
+      }
+      public Builder setTopK(int value) {
+        bitField0_ |= 0x00000002;
+        topK_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearTopK() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        topK_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // repeated float float32_query_vector = 4;
+      private java.util.List<java.lang.Float> float32QueryVector_ = java.util.Collections.emptyList();;
+      private void ensureFloat32QueryVectorIsMutable() {
+        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
+          float32QueryVector_ = new java.util.ArrayList<java.lang.Float>(float32QueryVector_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+      public java.util.List<java.lang.Float>
+          getFloat32QueryVectorList() {
+        return java.util.Collections.unmodifiableList(float32QueryVector_);
+      }
+      public int getFloat32QueryVectorCount() {
+        return float32QueryVector_.size();
+      }
+      public float getFloat32QueryVector(int index) {
+        return float32QueryVector_.get(index);
+      }
+      public Builder setFloat32QueryVector(
+          int index, float value) {
+        ensureFloat32QueryVectorIsMutable();
+        float32QueryVector_.set(index, value);
+        onChanged();
+        return this;
+      }
+      public Builder addFloat32QueryVector(float value) {
+        ensureFloat32QueryVectorIsMutable();
+        float32QueryVector_.add(value);
+        onChanged();
+        return this;
+      }
+      public Builder addAllFloat32QueryVector(
+          java.lang.Iterable<? extends java.lang.Float> values) {
+        ensureFloat32QueryVectorIsMutable();
+        super.addAll(values, float32QueryVector_);
+        onChanged();
+        return this;
+      }
+      public Builder clearFloat32QueryVector() {
+        float32QueryVector_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        onChanged();
+        return this;
+      }
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.Query filter = 5;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.Query filter_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Query, com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder> filterBuilder_;
+      public boolean hasFilter() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Query getFilter() {
+        if (filterBuilder_ == null) {
+          return filter_;
+        } else {
+          return filterBuilder_.getMessage();
+        }
+      }
+      public Builder setFilter(com.alicloud.openservices.tablestore.core.protocol.Search.Query value) {
+        if (filterBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          filter_ = value;
+          onChanged();
+        } else {
+          filterBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder setFilter(
+          com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder builderForValue) {
+        if (filterBuilder_ == null) {
+          filter_ = builderForValue.build();
+          onChanged();
+        } else {
+          filterBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder mergeFilter(com.alicloud.openservices.tablestore.core.protocol.Search.Query value) {
+        if (filterBuilder_ == null) {
+          if (((bitField0_ & 0x00000008) == 0x00000008) &&
+              filter_ != com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance()) {
+            filter_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.Query.newBuilder(filter_).mergeFrom(value).buildPartial();
+          } else {
+            filter_ = value;
+          }
+          onChanged();
+        } else {
+          filterBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder clearFilter() {
+        if (filterBuilder_ == null) {
+          filter_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
+          onChanged();
+        } else {
+          filterBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000008);
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder getFilterBuilder() {
+        bitField0_ |= 0x00000008;
+        onChanged();
+        return getFilterFieldBuilder().getBuilder();
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder getFilterOrBuilder() {
+        if (filterBuilder_ != null) {
+          return filterBuilder_.getMessageOrBuilder();
+        } else {
+          return filter_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Query, com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder> 
+          getFilterFieldBuilder() {
+        if (filterBuilder_ == null) {
+          filterBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.Query, com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder>(
+                  filter_,
+                  getParentForChildren(),
+                  isClean());
+          filter_ = null;
+        }
+        return filterBuilder_;
+      }
+      
+      // optional float weight = 6;
+      private float weight_ ;
+      public boolean hasWeight() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public float getWeight() {
+        return weight_;
+      }
+      public Builder setWeight(float value) {
+        bitField0_ |= 0x00000010;
+        weight_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearWeight() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        weight_ = 0F;
+        onChanged();
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.KnnVectorQuery)
+    }
+    
+    static {
+      defaultInstance = new KnnVectorQuery(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.KnnVectorQuery)
+  }
+  
+  public interface QueryOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.QueryType type = 1;
+    boolean hasType();
+    com.alicloud.openservices.tablestore.core.protocol.Search.QueryType getType();
+    
+    // optional bytes query = 2;
+    boolean hasQuery();
+    com.google.protobuf.ByteString getQuery();
+  }
+  public static final class Query extends
+      com.google.protobuf.GeneratedMessage
+      implements QueryOrBuilder {
+    // Use Query.newBuilder() to construct.
+    private Query(Builder builder) {
+      super(builder);
+    }
+    private Query(boolean noInit) {}
+    
+    private static final Query defaultInstance;
+    public static Query getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public Query getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Query_descriptor;
+    }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_NestedFilter_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Query_fieldAccessorTable;
     }
     
     private int bitField0_;
-    // optional string path = 1;
-    public static final int PATH_FIELD_NUMBER = 1;
-    private java.lang.Object path_;
-    public boolean hasPath() {
+    // optional .com.alicloud.openservices.tablestore.core.protocol.QueryType type = 1;
+    public static final int TYPE_FIELD_NUMBER = 1;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.QueryType type_;
+    public boolean hasType() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public String getPath() {
-      java.lang.Object ref = path_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          path_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getPathBytes() {
-      java.lang.Object ref = path_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        path_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.QueryType getType() {
+      return type_;
     }
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.Query filter = 2;
-    public static final int FILTER_FIELD_NUMBER = 2;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.Query filter_;
-    public boolean hasFilter() {
+    // optional bytes query = 2;
+    public static final int QUERY_FIELD_NUMBER = 2;
+    private com.google.protobuf.ByteString query_;
+    public boolean hasQuery() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.Query getFilter() {
-      return filter_;
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder getFilterOrBuilder() {
-      return filter_;
+    public com.google.protobuf.ByteString getQuery() {
+      return query_;
     }
     
     private void initFields() {
-      path_ = "";
-      filter_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
+      type_ = com.alicloud.openservices.tablestore.core.protocol.Search.QueryType.MATCH_QUERY;
+      query_ = com.google.protobuf.ByteString.EMPTY;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -59069,10 +60448,10 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, getPathBytes());
+        output.writeEnum(1, type_.getNumber());
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeMessage(2, filter_);
+        output.writeBytes(2, query_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -59085,11 +60464,11 @@ public int getSerializedSize() {
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, getPathBytes());
+          .computeEnumSize(1, type_.getNumber());
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, filter_);
+          .computeBytesSize(2, query_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -59103,41 +60482,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -59146,7 +60525,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFi
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -59157,12 +60536,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFi
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Query parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -59172,7 +60551,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFi
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.Query prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -59185,18 +60564,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_NestedFilter_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Query_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_NestedFilter_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Query_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.Query.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -59207,7 +60586,6 @@ private Builder(BuilderParent parent) {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getFilterFieldBuilder();
         }
       }
       private static Builder create() {
@@ -59216,13 +60594,9 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        path_ = "";
+        type_ = com.alicloud.openservices.tablestore.core.protocol.Search.QueryType.MATCH_QUERY;
         bitField0_ = (bitField0_ & ~0x00000001);
-        if (filterBuilder_ == null) {
-          filter_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
-        } else {
-          filterBuilder_.clear();
-        }
+        query_ = com.google.protobuf.ByteString.EMPTY;
         bitField0_ = (bitField0_ & ~0x00000002);
         return this;
       }
@@ -59233,24 +60607,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Query getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Query build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.Query result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.Query buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.Query result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -59258,43 +60632,39 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter b
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter result = new com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Query buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.Query result = new com.alicloud.openservices.tablestore.core.protocol.Search.Query(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        result.path_ = path_;
+        result.type_ = type_;
         if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
           to_bitField0_ |= 0x00000002;
         }
-        if (filterBuilder_ == null) {
-          result.filter_ = filter_;
-        } else {
-          result.filter_ = filterBuilder_.build();
-        }
+        result.query_ = query_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.Query) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.Query)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance()) return this;
-        if (other.hasPath()) {
-          setPath(other.getPath());
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.Query other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance()) return this;
+        if (other.hasType()) {
+          setType(other.getType());
         }
-        if (other.hasFilter()) {
-          mergeFilter(other.getFilter());
+        if (other.hasQuery()) {
+          setQuery(other.getQuery());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -59327,18 +60697,20 @@ public Builder mergeFrom(
               }
               break;
             }
-            case 10: {
-              bitField0_ |= 0x00000001;
-              path_ = input.readBytes();
+            case 8: {
+              int rawValue = input.readEnum();
+              com.alicloud.openservices.tablestore.core.protocol.Search.QueryType value = com.alicloud.openservices.tablestore.core.protocol.Search.QueryType.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(1, rawValue);
+              } else {
+                bitField0_ |= 0x00000001;
+                type_ = value;
+              }
               break;
             }
             case 18: {
-              com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.Query.newBuilder();
-              if (hasFilter()) {
-                subBuilder.mergeFrom(getFilter());
-              }
-              input.readMessage(subBuilder, extensionRegistry);
-              setFilter(subBuilder.buildPartial());
+              bitField0_ |= 0x00000002;
+              query_ = input.readBytes();
               break;
             }
           }
@@ -59347,191 +60719,135 @@ public Builder mergeFrom(
       
       private int bitField0_;
       
-      // optional string path = 1;
-      private java.lang.Object path_ = "";
-      public boolean hasPath() {
+      // optional .com.alicloud.openservices.tablestore.core.protocol.QueryType type = 1;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.QueryType type_ = com.alicloud.openservices.tablestore.core.protocol.Search.QueryType.MATCH_QUERY;
+      public boolean hasType() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public String getPath() {
-        java.lang.Object ref = path_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
-          path_ = s;
-          return s;
-        } else {
-          return (String) ref;
-        }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryType getType() {
+        return type_;
       }
-      public Builder setPath(String value) {
+      public Builder setType(com.alicloud.openservices.tablestore.core.protocol.Search.QueryType value) {
         if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000001;
-        path_ = value;
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000001;
+        type_ = value;
         onChanged();
         return this;
       }
-      public Builder clearPath() {
+      public Builder clearType() {
         bitField0_ = (bitField0_ & ~0x00000001);
-        path_ = getDefaultInstance().getPath();
+        type_ = com.alicloud.openservices.tablestore.core.protocol.Search.QueryType.MATCH_QUERY;
         onChanged();
         return this;
       }
-      void setPath(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000001;
-        path_ = value;
-        onChanged();
-      }
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.Query filter = 2;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.Query filter_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
-      private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.Query, com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder> filterBuilder_;
-      public boolean hasFilter() {
+      // optional bytes query = 2;
+      private com.google.protobuf.ByteString query_ = com.google.protobuf.ByteString.EMPTY;
+      public boolean hasQuery() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Query getFilter() {
-        if (filterBuilder_ == null) {
-          return filter_;
-        } else {
-          return filterBuilder_.getMessage();
-        }
-      }
-      public Builder setFilter(com.alicloud.openservices.tablestore.core.protocol.Search.Query value) {
-        if (filterBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          filter_ = value;
-          onChanged();
-        } else {
-          filterBuilder_.setMessage(value);
-        }
-        bitField0_ |= 0x00000002;
-        return this;
-      }
-      public Builder setFilter(
-          com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder builderForValue) {
-        if (filterBuilder_ == null) {
-          filter_ = builderForValue.build();
-          onChanged();
-        } else {
-          filterBuilder_.setMessage(builderForValue.build());
-        }
-        bitField0_ |= 0x00000002;
-        return this;
+      public com.google.protobuf.ByteString getQuery() {
+        return query_;
       }
-      public Builder mergeFilter(com.alicloud.openservices.tablestore.core.protocol.Search.Query value) {
-        if (filterBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) == 0x00000002) &&
-              filter_ != com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance()) {
-            filter_ =
-              com.alicloud.openservices.tablestore.core.protocol.Search.Query.newBuilder(filter_).mergeFrom(value).buildPartial();
-          } else {
-            filter_ = value;
-          }
-          onChanged();
-        } else {
-          filterBuilder_.mergeFrom(value);
-        }
-        bitField0_ |= 0x00000002;
+      public Builder setQuery(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000002;
+        query_ = value;
+        onChanged();
         return this;
       }
-      public Builder clearFilter() {
-        if (filterBuilder_ == null) {
-          filter_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
-          onChanged();
-        } else {
-          filterBuilder_.clear();
-        }
+      public Builder clearQuery() {
         bitField0_ = (bitField0_ & ~0x00000002);
-        return this;
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder getFilterBuilder() {
-        bitField0_ |= 0x00000002;
+        query_ = getDefaultInstance().getQuery();
         onChanged();
-        return getFilterFieldBuilder().getBuilder();
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder getFilterOrBuilder() {
-        if (filterBuilder_ != null) {
-          return filterBuilder_.getMessageOrBuilder();
-        } else {
-          return filter_;
-        }
-      }
-      private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.Query, com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder> 
-          getFilterFieldBuilder() {
-        if (filterBuilder_ == null) {
-          filterBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              com.alicloud.openservices.tablestore.core.protocol.Search.Query, com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder>(
-                  filter_,
-                  getParentForChildren(),
-                  isClean());
-          filter_ = null;
-        }
-        return filterBuilder_;
+        return this;
       }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.NestedFilter)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.Query)
     }
     
     static {
-      defaultInstance = new NestedFilter(true);
+      defaultInstance = new Query(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.NestedFilter)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.Query)
   }
   
-  public interface ScoreSortOrBuilder
+  public interface CollapseOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 1;
-    boolean hasOrder();
-    com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder();
+    // optional string field_name = 1;
+    boolean hasFieldName();
+    String getFieldName();
   }
-  public static final class ScoreSort extends
+  public static final class Collapse extends
       com.google.protobuf.GeneratedMessage
-      implements ScoreSortOrBuilder {
-    // Use ScoreSort.newBuilder() to construct.
-    private ScoreSort(Builder builder) {
+      implements CollapseOrBuilder {
+    // Use Collapse.newBuilder() to construct.
+    private Collapse(Builder builder) {
       super(builder);
     }
-    private ScoreSort(boolean noInit) {}
+    private Collapse(boolean noInit) {}
     
-    private static final ScoreSort defaultInstance;
-    public static ScoreSort getDefaultInstance() {
+    private static final Collapse defaultInstance;
+    public static Collapse getDefaultInstance() {
       return defaultInstance;
     }
     
-    public ScoreSort getDefaultInstanceForType() {
+    public Collapse getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ScoreSort_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Collapse_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ScoreSort_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Collapse_fieldAccessorTable;
     }
     
     private int bitField0_;
-    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 1;
-    public static final int ORDER_FIELD_NUMBER = 1;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder order_;
-    public boolean hasOrder() {
+    // optional string field_name = 1;
+    public static final int FIELD_NAME_FIELD_NUMBER = 1;
+    private java.lang.Object fieldName_;
+    public boolean hasFieldName() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder() {
-      return order_;
+    public String getFieldName() {
+      java.lang.Object ref = fieldName_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          fieldName_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getFieldNameBytes() {
+      java.lang.Object ref = fieldName_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        fieldName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
     
     private void initFields() {
-      order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
+      fieldName_ = "";
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -59546,7 +60862,7 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeEnum(1, order_.getNumber());
+        output.writeBytes(1, getFieldNameBytes());
       }
       getUnknownFields().writeTo(output);
     }
@@ -59559,7 +60875,7 @@ public int getSerializedSize() {
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, order_.getNumber());
+          .computeBytesSize(1, getFieldNameBytes());
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -59573,41 +60889,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -59616,7 +60932,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSor
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -59627,12 +60943,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSor
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Collapse parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -59642,7 +60958,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSor
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.Collapse prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -59655,18 +60971,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSortOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.CollapseOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ScoreSort_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Collapse_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ScoreSort_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Collapse_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -59685,7 +61001,7 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
+        fieldName_ = "";
         bitField0_ = (bitField0_ & ~0x00000001);
         return this;
       }
@@ -59696,24 +61012,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Collapse getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Collapse build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.Collapse result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.Collapse buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.Collapse result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -59721,32 +61037,32 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort buil
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort result = new com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Collapse buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.Collapse result = new com.alicloud.openservices.tablestore.core.protocol.Search.Collapse(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        result.order_ = order_;
+        result.fieldName_ = fieldName_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.Collapse) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.Collapse)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.getDefaultInstance()) return this;
-        if (other.hasOrder()) {
-          setOrder(other.getOrder());
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.Collapse other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.getDefaultInstance()) return this;
+        if (other.hasFieldName()) {
+          setFieldName(other.getFieldName());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -59779,15 +61095,9 @@ public Builder mergeFrom(
               }
               break;
             }
-            case 8: {
-              int rawValue = input.readEnum();
-              com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder value = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.valueOf(rawValue);
-              if (value == null) {
-                unknownFields.mergeVarintField(1, rawValue);
-              } else {
-                bitField0_ |= 0x00000001;
-                order_ = value;
-              }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              fieldName_ = input.readBytes();
               break;
             }
           }
@@ -59796,89 +61106,142 @@ public Builder mergeFrom(
       
       private int bitField0_;
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 1;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
-      public boolean hasOrder() {
+      // optional string field_name = 1;
+      private java.lang.Object fieldName_ = "";
+      public boolean hasFieldName() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder() {
-        return order_;
+      public String getFieldName() {
+        java.lang.Object ref = fieldName_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          fieldName_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
       }
-      public Builder setOrder(com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder value) {
+      public Builder setFieldName(String value) {
         if (value == null) {
-          throw new NullPointerException();
-        }
-        bitField0_ |= 0x00000001;
-        order_ = value;
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        fieldName_ = value;
         onChanged();
         return this;
       }
-      public Builder clearOrder() {
+      public Builder clearFieldName() {
         bitField0_ = (bitField0_ & ~0x00000001);
-        order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
+        fieldName_ = getDefaultInstance().getFieldName();
         onChanged();
         return this;
       }
+      void setFieldName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        fieldName_ = value;
+        onChanged();
+      }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.ScoreSort)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.Collapse)
     }
     
     static {
-      defaultInstance = new ScoreSort(true);
+      defaultInstance = new Collapse(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.ScoreSort)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.Collapse)
   }
   
-  public interface PrimaryKeySortOrBuilder
+  public interface NestedFilterOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 1;
-    boolean hasOrder();
-    com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder();
+    // optional string path = 1;
+    boolean hasPath();
+    String getPath();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Query filter = 2;
+    boolean hasFilter();
+    com.alicloud.openservices.tablestore.core.protocol.Search.Query getFilter();
+    com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder getFilterOrBuilder();
   }
-  public static final class PrimaryKeySort extends
+  public static final class NestedFilter extends
       com.google.protobuf.GeneratedMessage
-      implements PrimaryKeySortOrBuilder {
-    // Use PrimaryKeySort.newBuilder() to construct.
-    private PrimaryKeySort(Builder builder) {
+      implements NestedFilterOrBuilder {
+    // Use NestedFilter.newBuilder() to construct.
+    private NestedFilter(Builder builder) {
       super(builder);
     }
-    private PrimaryKeySort(boolean noInit) {}
+    private NestedFilter(boolean noInit) {}
     
-    private static final PrimaryKeySort defaultInstance;
-    public static PrimaryKeySort getDefaultInstance() {
+    private static final NestedFilter defaultInstance;
+    public static NestedFilter getDefaultInstance() {
       return defaultInstance;
     }
     
-    public PrimaryKeySort getDefaultInstanceForType() {
+    public NestedFilter getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_PrimaryKeySort_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_NestedFilter_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_PrimaryKeySort_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_NestedFilter_fieldAccessorTable;
     }
     
     private int bitField0_;
-    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 1;
-    public static final int ORDER_FIELD_NUMBER = 1;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder order_;
-    public boolean hasOrder() {
+    // optional string path = 1;
+    public static final int PATH_FIELD_NUMBER = 1;
+    private java.lang.Object path_;
+    public boolean hasPath() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder() {
-      return order_;
+    public String getPath() {
+      java.lang.Object ref = path_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          path_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getPathBytes() {
+      java.lang.Object ref = path_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        path_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Query filter = 2;
+    public static final int FILTER_FIELD_NUMBER = 2;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.Query filter_;
+    public boolean hasFilter() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.Query getFilter() {
+      return filter_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder getFilterOrBuilder() {
+      return filter_;
     }
     
     private void initFields() {
-      order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
+      path_ = "";
+      filter_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -59893,7 +61256,10 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeEnum(1, order_.getNumber());
+        output.writeBytes(1, getPathBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeMessage(2, filter_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -59906,7 +61272,11 @@ public int getSerializedSize() {
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, order_.getNumber());
+          .computeBytesSize(1, getPathBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, filter_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -59920,41 +61290,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -59963,7 +61333,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryK
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -59974,12 +61344,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryK
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -59989,7 +61359,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryK
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -60002,18 +61372,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySortOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_PrimaryKeySort_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_NestedFilter_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_PrimaryKeySort_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_NestedFilter_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -60024,6 +61394,7 @@ private Builder(BuilderParent parent) {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getFilterFieldBuilder();
         }
       }
       private static Builder create() {
@@ -60032,8 +61403,14 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
+        path_ = "";
         bitField0_ = (bitField0_ & ~0x00000001);
+        if (filterBuilder_ == null) {
+          filter_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
+        } else {
+          filterBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000002);
         return this;
       }
       
@@ -60043,24 +61420,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -60068,32 +61445,43 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort result = new com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter result = new com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        result.order_ = order_;
+        result.path_ = path_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        if (filterBuilder_ == null) {
+          result.filter_ = filter_;
+        } else {
+          result.filter_ = filterBuilder_.build();
+        }
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.getDefaultInstance()) return this;
-        if (other.hasOrder()) {
-          setOrder(other.getOrder());
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance()) return this;
+        if (other.hasPath()) {
+          setPath(other.getPath());
+        }
+        if (other.hasFilter()) {
+          mergeFilter(other.getFilter());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -60126,15 +61514,18 @@ public Builder mergeFrom(
               }
               break;
             }
-            case 8: {
-              int rawValue = input.readEnum();
-              com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder value = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.valueOf(rawValue);
-              if (value == null) {
-                unknownFields.mergeVarintField(1, rawValue);
-              } else {
-                bitField0_ |= 0x00000001;
-                order_ = value;
+            case 10: {
+              bitField0_ |= 0x00000001;
+              path_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.Query.newBuilder();
+              if (hasFilter()) {
+                subBuilder.mergeFrom(getFilter());
               }
+              input.readMessage(subBuilder, extensionRegistry);
+              setFilter(subBuilder.buildPartial());
               break;
             }
           }
@@ -60143,212 +61534,191 @@ public Builder mergeFrom(
       
       private int bitField0_;
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 1;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
-      public boolean hasOrder() {
+      // optional string path = 1;
+      private java.lang.Object path_ = "";
+      public boolean hasPath() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder() {
-        return order_;
+      public String getPath() {
+        java.lang.Object ref = path_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          path_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
       }
-      public Builder setOrder(com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder value) {
+      public Builder setPath(String value) {
         if (value == null) {
-          throw new NullPointerException();
-        }
-        bitField0_ |= 0x00000001;
-        order_ = value;
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        path_ = value;
         onChanged();
         return this;
       }
-      public Builder clearOrder() {
+      public Builder clearPath() {
         bitField0_ = (bitField0_ & ~0x00000001);
-        order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
+        path_ = getDefaultInstance().getPath();
         onChanged();
         return this;
       }
+      void setPath(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        path_ = value;
+        onChanged();
+      }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.PrimaryKeySort)
+      // optional .com.alicloud.openservices.tablestore.core.protocol.Query filter = 2;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.Query filter_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Query, com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder> filterBuilder_;
+      public boolean hasFilter() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Query getFilter() {
+        if (filterBuilder_ == null) {
+          return filter_;
+        } else {
+          return filterBuilder_.getMessage();
+        }
+      }
+      public Builder setFilter(com.alicloud.openservices.tablestore.core.protocol.Search.Query value) {
+        if (filterBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          filter_ = value;
+          onChanged();
+        } else {
+          filterBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000002;
+        return this;
+      }
+      public Builder setFilter(
+          com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder builderForValue) {
+        if (filterBuilder_ == null) {
+          filter_ = builderForValue.build();
+          onChanged();
+        } else {
+          filterBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000002;
+        return this;
+      }
+      public Builder mergeFilter(com.alicloud.openservices.tablestore.core.protocol.Search.Query value) {
+        if (filterBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) == 0x00000002) &&
+              filter_ != com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance()) {
+            filter_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.Query.newBuilder(filter_).mergeFrom(value).buildPartial();
+          } else {
+            filter_ = value;
+          }
+          onChanged();
+        } else {
+          filterBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000002;
+        return this;
+      }
+      public Builder clearFilter() {
+        if (filterBuilder_ == null) {
+          filter_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
+          onChanged();
+        } else {
+          filterBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000002);
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder getFilterBuilder() {
+        bitField0_ |= 0x00000002;
+        onChanged();
+        return getFilterFieldBuilder().getBuilder();
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder getFilterOrBuilder() {
+        if (filterBuilder_ != null) {
+          return filterBuilder_.getMessageOrBuilder();
+        } else {
+          return filter_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Query, com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder> 
+          getFilterFieldBuilder() {
+        if (filterBuilder_ == null) {
+          filterBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.Query, com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder>(
+                  filter_,
+                  getParentForChildren(),
+                  isClean());
+          filter_ = null;
+        }
+        return filterBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.NestedFilter)
     }
     
     static {
-      defaultInstance = new PrimaryKeySort(true);
+      defaultInstance = new NestedFilter(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.PrimaryKeySort)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.NestedFilter)
   }
   
-  public interface FieldSortOrBuilder
+  public interface ScoreSortOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
-    // optional string field_name = 1;
-    boolean hasFieldName();
-    String getFieldName();
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 2;
+    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 1;
     boolean hasOrder();
     com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder();
+  }
+  public static final class ScoreSort extends
+      com.google.protobuf.GeneratedMessage
+      implements ScoreSortOrBuilder {
+    // Use ScoreSort.newBuilder() to construct.
+    private ScoreSort(Builder builder) {
+      super(builder);
+    }
+    private ScoreSort(boolean noInit) {}
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.SortMode mode = 3;
-    boolean hasMode();
-    com.alicloud.openservices.tablestore.core.protocol.Search.SortMode getMode();
+    private static final ScoreSort defaultInstance;
+    public static ScoreSort getDefaultInstance() {
+      return defaultInstance;
+    }
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.NestedFilter nested_filter = 4;
-    boolean hasNestedFilter();
-    com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter getNestedFilter();
-    com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrBuilder getNestedFilterOrBuilder();
-    
-    // optional bytes missing_value = 5;
-    boolean hasMissingValue();
-    com.google.protobuf.ByteString getMissingValue();
-    
-    // optional string missing_field = 6;
-    boolean hasMissingField();
-    String getMissingField();
-  }
-  public static final class FieldSort extends
-      com.google.protobuf.GeneratedMessage
-      implements FieldSortOrBuilder {
-    // Use FieldSort.newBuilder() to construct.
-    private FieldSort(Builder builder) {
-      super(builder);
-    }
-    private FieldSort(boolean noInit) {}
-    
-    private static final FieldSort defaultInstance;
-    public static FieldSort getDefaultInstance() {
-      return defaultInstance;
-    }
-    
-    public FieldSort getDefaultInstanceForType() {
+    public ScoreSort getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSort_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ScoreSort_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSort_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ScoreSort_fieldAccessorTable;
     }
     
     private int bitField0_;
-    // optional string field_name = 1;
-    public static final int FIELD_NAME_FIELD_NUMBER = 1;
-    private java.lang.Object fieldName_;
-    public boolean hasFieldName() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    public String getFieldName() {
-      java.lang.Object ref = fieldName_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          fieldName_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getFieldNameBytes() {
-      java.lang.Object ref = fieldName_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        fieldName_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 2;
-    public static final int ORDER_FIELD_NUMBER = 2;
+    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 1;
+    public static final int ORDER_FIELD_NUMBER = 1;
     private com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder order_;
     public boolean hasOrder() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
+      return ((bitField0_ & 0x00000001) == 0x00000001);
     }
     public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder() {
       return order_;
     }
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.SortMode mode = 3;
-    public static final int MODE_FIELD_NUMBER = 3;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.SortMode mode_;
-    public boolean hasMode() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.SortMode getMode() {
-      return mode_;
-    }
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.NestedFilter nested_filter = 4;
-    public static final int NESTED_FILTER_FIELD_NUMBER = 4;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter nestedFilter_;
-    public boolean hasNestedFilter() {
-      return ((bitField0_ & 0x00000008) == 0x00000008);
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter getNestedFilter() {
-      return nestedFilter_;
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrBuilder getNestedFilterOrBuilder() {
-      return nestedFilter_;
-    }
-    
-    // optional bytes missing_value = 5;
-    public static final int MISSING_VALUE_FIELD_NUMBER = 5;
-    private com.google.protobuf.ByteString missingValue_;
-    public boolean hasMissingValue() {
-      return ((bitField0_ & 0x00000010) == 0x00000010);
-    }
-    public com.google.protobuf.ByteString getMissingValue() {
-      return missingValue_;
-    }
-    
-    // optional string missing_field = 6;
-    public static final int MISSING_FIELD_FIELD_NUMBER = 6;
-    private java.lang.Object missingField_;
-    public boolean hasMissingField() {
-      return ((bitField0_ & 0x00000020) == 0x00000020);
-    }
-    public String getMissingField() {
-      java.lang.Object ref = missingField_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          missingField_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getMissingFieldBytes() {
-      java.lang.Object ref = missingField_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        missingField_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
     private void initFields() {
-      fieldName_ = "";
       order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
-      mode_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortMode.SORT_MODE_MIN;
-      nestedFilter_ = com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance();
-      missingValue_ = com.google.protobuf.ByteString.EMPTY;
-      missingField_ = "";
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -60363,22 +61733,7 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, getFieldNameBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeEnum(2, order_.getNumber());
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeEnum(3, mode_.getNumber());
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeMessage(4, nestedFilter_);
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        output.writeBytes(5, missingValue_);
-      }
-      if (((bitField0_ & 0x00000020) == 0x00000020)) {
-        output.writeBytes(6, getMissingFieldBytes());
+        output.writeEnum(1, order_.getNumber());
       }
       getUnknownFields().writeTo(output);
     }
@@ -60391,27 +61746,7 @@ public int getSerializedSize() {
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, getFieldNameBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(2, order_.getNumber());
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(3, mode_.getNumber());
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, nestedFilter_);
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(5, missingValue_);
-      }
-      if (((bitField0_ & 0x00000020) == 0x00000020)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(6, getMissingFieldBytes());
+          .computeEnumSize(1, order_.getNumber());
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -60425,41 +61760,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -60468,7 +61803,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSor
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -60479,12 +61814,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSor
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -60494,7 +61829,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSor
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -60507,18 +61842,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.FieldSortOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSortOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSort_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ScoreSort_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSort_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ScoreSort_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -60529,7 +61864,6 @@ private Builder(BuilderParent parent) {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getNestedFilterFieldBuilder();
         }
       }
       private static Builder create() {
@@ -60538,22 +61872,8 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        fieldName_ = "";
-        bitField0_ = (bitField0_ & ~0x00000001);
         order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        mode_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortMode.SORT_MODE_MIN;
-        bitField0_ = (bitField0_ & ~0x00000004);
-        if (nestedFilterBuilder_ == null) {
-          nestedFilter_ = com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance();
-        } else {
-          nestedFilterBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000008);
-        missingValue_ = com.google.protobuf.ByteString.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000010);
-        missingField_ = "";
-        bitField0_ = (bitField0_ & ~0x00000020);
+        bitField0_ = (bitField0_ & ~0x00000001);
         return this;
       }
       
@@ -60563,24 +61883,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -60588,72 +61908,33 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort buil
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort result = new com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort result = new com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        result.fieldName_ = fieldName_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
         result.order_ = order_;
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
-          to_bitField0_ |= 0x00000004;
-        }
-        result.mode_ = mode_;
-        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
-          to_bitField0_ |= 0x00000008;
-        }
-        if (nestedFilterBuilder_ == null) {
-          result.nestedFilter_ = nestedFilter_;
-        } else {
-          result.nestedFilter_ = nestedFilterBuilder_.build();
-        }
-        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
-          to_bitField0_ |= 0x00000010;
-        }
-        result.missingValue_ = missingValue_;
-        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
-          to_bitField0_ |= 0x00000020;
-        }
-        result.missingField_ = missingField_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.getDefaultInstance()) return this;
-        if (other.hasFieldName()) {
-          setFieldName(other.getFieldName());
-        }
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.getDefaultInstance()) return this;
         if (other.hasOrder()) {
           setOrder(other.getOrder());
         }
-        if (other.hasMode()) {
-          setMode(other.getMode());
-        }
-        if (other.hasNestedFilter()) {
-          mergeNestedFilter(other.getNestedFilter());
-        }
-        if (other.hasMissingValue()) {
-          setMissingValue(other.getMissingValue());
-        }
-        if (other.hasMissingField()) {
-          setMissingField(other.getMissingField());
-        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -60685,98 +61966,27 @@ public Builder mergeFrom(
               }
               break;
             }
-            case 10: {
-              bitField0_ |= 0x00000001;
-              fieldName_ = input.readBytes();
-              break;
-            }
-            case 16: {
+            case 8: {
               int rawValue = input.readEnum();
               com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder value = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.valueOf(rawValue);
               if (value == null) {
-                unknownFields.mergeVarintField(2, rawValue);
+                unknownFields.mergeVarintField(1, rawValue);
               } else {
-                bitField0_ |= 0x00000002;
+                bitField0_ |= 0x00000001;
                 order_ = value;
               }
               break;
             }
-            case 24: {
-              int rawValue = input.readEnum();
-              com.alicloud.openservices.tablestore.core.protocol.Search.SortMode value = com.alicloud.openservices.tablestore.core.protocol.Search.SortMode.valueOf(rawValue);
-              if (value == null) {
-                unknownFields.mergeVarintField(3, rawValue);
-              } else {
-                bitField0_ |= 0x00000004;
-                mode_ = value;
-              }
-              break;
-            }
-            case 34: {
-              com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.newBuilder();
-              if (hasNestedFilter()) {
-                subBuilder.mergeFrom(getNestedFilter());
-              }
-              input.readMessage(subBuilder, extensionRegistry);
-              setNestedFilter(subBuilder.buildPartial());
-              break;
-            }
-            case 42: {
-              bitField0_ |= 0x00000010;
-              missingValue_ = input.readBytes();
-              break;
-            }
-            case 50: {
-              bitField0_ |= 0x00000020;
-              missingField_ = input.readBytes();
-              break;
-            }
           }
         }
       }
       
       private int bitField0_;
       
-      // optional string field_name = 1;
-      private java.lang.Object fieldName_ = "";
-      public boolean hasFieldName() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
-      }
-      public String getFieldName() {
-        java.lang.Object ref = fieldName_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
-          fieldName_ = s;
-          return s;
-        } else {
-          return (String) ref;
-        }
-      }
-      public Builder setFieldName(String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000001;
-        fieldName_ = value;
-        onChanged();
-        return this;
-      }
-      public Builder clearFieldName() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        fieldName_ = getDefaultInstance().getFieldName();
-        onChanged();
-        return this;
-      }
-      void setFieldName(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000001;
-        fieldName_ = value;
-        onChanged();
-      }
-      
-      // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 2;
+      // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 1;
       private com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
       public boolean hasOrder() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
+        return ((bitField0_ & 0x00000001) == 0x00000001);
       }
       public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder() {
         return order_;
@@ -60785,258 +61995,430 @@ public Builder setOrder(com.alicloud.openservices.tablestore.core.protocol.Searc
         if (value == null) {
           throw new NullPointerException();
         }
-        bitField0_ |= 0x00000002;
+        bitField0_ |= 0x00000001;
         order_ = value;
         onChanged();
         return this;
       }
       public Builder clearOrder() {
-        bitField0_ = (bitField0_ & ~0x00000002);
+        bitField0_ = (bitField0_ & ~0x00000001);
         order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
         onChanged();
         return this;
       }
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.SortMode mode = 3;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.SortMode mode_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortMode.SORT_MODE_MIN;
-      public boolean hasMode() {
-        return ((bitField0_ & 0x00000004) == 0x00000004);
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SortMode getMode() {
-        return mode_;
-      }
-      public Builder setMode(com.alicloud.openservices.tablestore.core.protocol.Search.SortMode value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        bitField0_ |= 0x00000004;
-        mode_ = value;
-        onChanged();
-        return this;
-      }
-      public Builder clearMode() {
-        bitField0_ = (bitField0_ & ~0x00000004);
-        mode_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortMode.SORT_MODE_MIN;
-        onChanged();
-        return this;
-      }
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.ScoreSort)
+    }
+    
+    static {
+      defaultInstance = new ScoreSort(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.ScoreSort)
+  }
+  
+  public interface PrimaryKeySortOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 1;
+    boolean hasOrder();
+    com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder();
+  }
+  public static final class PrimaryKeySort extends
+      com.google.protobuf.GeneratedMessage
+      implements PrimaryKeySortOrBuilder {
+    // Use PrimaryKeySort.newBuilder() to construct.
+    private PrimaryKeySort(Builder builder) {
+      super(builder);
+    }
+    private PrimaryKeySort(boolean noInit) {}
+    
+    private static final PrimaryKeySort defaultInstance;
+    public static PrimaryKeySort getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public PrimaryKeySort getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_PrimaryKeySort_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_PrimaryKeySort_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 1;
+    public static final int ORDER_FIELD_NUMBER = 1;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder order_;
+    public boolean hasOrder() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder() {
+      return order_;
+    }
+    
+    private void initFields() {
+      order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.NestedFilter nested_filter = 4;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter nestedFilter_ = com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance();
-      private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter, com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrBuilder> nestedFilterBuilder_;
-      public boolean hasNestedFilter() {
-        return ((bitField0_ & 0x00000008) == 0x00000008);
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter getNestedFilter() {
-        if (nestedFilterBuilder_ == null) {
-          return nestedFilter_;
-        } else {
-          return nestedFilterBuilder_.getMessage();
-        }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeEnum(1, order_.getNumber());
       }
-      public Builder setNestedFilter(com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter value) {
-        if (nestedFilterBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          nestedFilter_ = value;
-          onChanged();
-        } else {
-          nestedFilterBuilder_.setMessage(value);
-        }
-        bitField0_ |= 0x00000008;
-        return this;
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(1, order_.getNumber());
       }
-      public Builder setNestedFilter(
-          com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.Builder builderForValue) {
-        if (nestedFilterBuilder_ == null) {
-          nestedFilter_ = builderForValue.build();
-          onChanged();
-        } else {
-          nestedFilterBuilder_.setMessage(builderForValue.build());
-        }
-        bitField0_ |= 0x00000008;
-        return this;
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
       }
-      public Builder mergeNestedFilter(com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter value) {
-        if (nestedFilterBuilder_ == null) {
-          if (((bitField0_ & 0x00000008) == 0x00000008) &&
-              nestedFilter_ != com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance()) {
-            nestedFilter_ =
-              com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.newBuilder(nestedFilter_).mergeFrom(value).buildPartial();
-          } else {
-            nestedFilter_ = value;
-          }
-          onChanged();
-        } else {
-          nestedFilterBuilder_.mergeFrom(value);
-        }
-        bitField0_ |= 0x00000008;
-        return this;
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
       }
-      public Builder clearNestedFilter() {
-        if (nestedFilterBuilder_ == null) {
-          nestedFilter_ = com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance();
-          onChanged();
-        } else {
-          nestedFilterBuilder_.clear();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySortOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_PrimaryKeySort_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_PrimaryKeySort_fieldAccessorTable;
+      }
+      
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
         }
-        bitField0_ = (bitField0_ & ~0x00000008);
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
+        bitField0_ = (bitField0_ & ~0x00000001);
         return this;
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.Builder getNestedFilterBuilder() {
-        bitField0_ |= 0x00000008;
-        onChanged();
-        return getNestedFilterFieldBuilder().getBuilder();
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrBuilder getNestedFilterOrBuilder() {
-        if (nestedFilterBuilder_ != null) {
-          return nestedFilterBuilder_.getMessageOrBuilder();
-        } else {
-          return nestedFilter_;
-        }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.getDescriptor();
       }
-      private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter, com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrBuilder> 
-          getNestedFilterFieldBuilder() {
-        if (nestedFilterBuilder_ == null) {
-          nestedFilterBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter, com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrBuilder>(
-                  nestedFilter_,
-                  getParentForChildren(),
-                  isClean());
-          nestedFilter_ = null;
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.getDefaultInstance();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
-        return nestedFilterBuilder_;
+        return result;
       }
       
-      // optional bytes missing_value = 5;
-      private com.google.protobuf.ByteString missingValue_ = com.google.protobuf.ByteString.EMPTY;
-      public boolean hasMissingValue() {
-        return ((bitField0_ & 0x00000010) == 0x00000010);
+      private com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
       }
-      public com.google.protobuf.ByteString getMissingValue() {
-        return missingValue_;
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort result = new com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.order_ = order_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
       }
-      public Builder setMissingValue(com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000010;
-        missingValue_ = value;
-        onChanged();
-        return this;
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
       }
-      public Builder clearMissingValue() {
-        bitField0_ = (bitField0_ & ~0x00000010);
-        missingValue_ = getDefaultInstance().getMissingValue();
-        onChanged();
+      
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.getDefaultInstance()) return this;
+        if (other.hasOrder()) {
+          setOrder(other.getOrder());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
       
-      // optional string missing_field = 6;
-      private java.lang.Object missingField_ = "";
-      public boolean hasMissingField() {
-        return ((bitField0_ & 0x00000020) == 0x00000020);
+      public final boolean isInitialized() {
+        return true;
       }
-      public String getMissingField() {
-        java.lang.Object ref = missingField_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
-          missingField_ = s;
-          return s;
-        } else {
-          return (String) ref;
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              int rawValue = input.readEnum();
+              com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder value = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(1, rawValue);
+              } else {
+                bitField0_ |= 0x00000001;
+                order_ = value;
+              }
+              break;
+            }
+          }
         }
       }
-      public Builder setMissingField(String value) {
+      
+      private int bitField0_;
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 1;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
+      public boolean hasOrder() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder() {
+        return order_;
+      }
+      public Builder setOrder(com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder value) {
         if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000020;
-        missingField_ = value;
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000001;
+        order_ = value;
         onChanged();
         return this;
       }
-      public Builder clearMissingField() {
-        bitField0_ = (bitField0_ & ~0x00000020);
-        missingField_ = getDefaultInstance().getMissingField();
+      public Builder clearOrder() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
         onChanged();
         return this;
       }
-      void setMissingField(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000020;
-        missingField_ = value;
-        onChanged();
-      }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.FieldSort)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.PrimaryKeySort)
     }
     
     static {
-      defaultInstance = new FieldSort(true);
+      defaultInstance = new PrimaryKeySort(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.FieldSort)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.PrimaryKeySort)
   }
   
-  public interface GeoDistanceSortOrBuilder
+  public interface FieldSortOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
     // optional string field_name = 1;
     boolean hasFieldName();
     String getFieldName();
     
-    // repeated string points = 2;
-    java.util.List<String> getPointsList();
-    int getPointsCount();
-    String getPoints(int index);
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 3;
+    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 2;
     boolean hasOrder();
     com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder();
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.SortMode mode = 4;
+    // optional .com.alicloud.openservices.tablestore.core.protocol.SortMode mode = 3;
     boolean hasMode();
     com.alicloud.openservices.tablestore.core.protocol.Search.SortMode getMode();
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.GeoDistanceType distance_type = 5;
-    boolean hasDistanceType();
-    com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType getDistanceType();
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.NestedFilter nested_filter = 6;
+    // optional .com.alicloud.openservices.tablestore.core.protocol.NestedFilter nested_filter = 4;
     boolean hasNestedFilter();
     com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter getNestedFilter();
     com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrBuilder getNestedFilterOrBuilder();
+    
+    // optional bytes missing_value = 5;
+    boolean hasMissingValue();
+    com.google.protobuf.ByteString getMissingValue();
+    
+    // optional string missing_field = 6;
+    boolean hasMissingField();
+    String getMissingField();
   }
-  public static final class GeoDistanceSort extends
+  public static final class FieldSort extends
       com.google.protobuf.GeneratedMessage
-      implements GeoDistanceSortOrBuilder {
-    // Use GeoDistanceSort.newBuilder() to construct.
-    private GeoDistanceSort(Builder builder) {
+      implements FieldSortOrBuilder {
+    // Use FieldSort.newBuilder() to construct.
+    private FieldSort(Builder builder) {
       super(builder);
     }
-    private GeoDistanceSort(boolean noInit) {}
+    private FieldSort(boolean noInit) {}
     
-    private static final GeoDistanceSort defaultInstance;
-    public static GeoDistanceSort getDefaultInstance() {
+    private static final FieldSort defaultInstance;
+    public static FieldSort getDefaultInstance() {
       return defaultInstance;
     }
     
-    public GeoDistanceSort getDefaultInstanceForType() {
+    public FieldSort getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceSort_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSort_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceSort_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSort_fieldAccessorTable;
     }
     
     private int bitField0_;
@@ -61072,22 +62454,8 @@ private com.google.protobuf.ByteString getFieldNameBytes() {
       }
     }
     
-    // repeated string points = 2;
-    public static final int POINTS_FIELD_NUMBER = 2;
-    private com.google.protobuf.LazyStringList points_;
-    public java.util.List<String>
-        getPointsList() {
-      return points_;
-    }
-    public int getPointsCount() {
-      return points_.size();
-    }
-    public String getPoints(int index) {
-      return points_.get(index);
-    }
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 3;
-    public static final int ORDER_FIELD_NUMBER = 3;
+    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 2;
+    public static final int ORDER_FIELD_NUMBER = 2;
     private com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder order_;
     public boolean hasOrder() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
@@ -61096,8 +62464,8 @@ public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOr
       return order_;
     }
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.SortMode mode = 4;
-    public static final int MODE_FIELD_NUMBER = 4;
+    // optional .com.alicloud.openservices.tablestore.core.protocol.SortMode mode = 3;
+    public static final int MODE_FIELD_NUMBER = 3;
     private com.alicloud.openservices.tablestore.core.protocol.Search.SortMode mode_;
     public boolean hasMode() {
       return ((bitField0_ & 0x00000004) == 0x00000004);
@@ -61106,21 +62474,11 @@ public com.alicloud.openservices.tablestore.core.protocol.Search.SortMode getMod
       return mode_;
     }
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.GeoDistanceType distance_type = 5;
-    public static final int DISTANCE_TYPE_FIELD_NUMBER = 5;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType distanceType_;
-    public boolean hasDistanceType() {
-      return ((bitField0_ & 0x00000008) == 0x00000008);
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType getDistanceType() {
-      return distanceType_;
-    }
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.NestedFilter nested_filter = 6;
-    public static final int NESTED_FILTER_FIELD_NUMBER = 6;
+    // optional .com.alicloud.openservices.tablestore.core.protocol.NestedFilter nested_filter = 4;
+    public static final int NESTED_FILTER_FIELD_NUMBER = 4;
     private com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter nestedFilter_;
     public boolean hasNestedFilter() {
-      return ((bitField0_ & 0x00000010) == 0x00000010);
+      return ((bitField0_ & 0x00000008) == 0x00000008);
     }
     public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter getNestedFilter() {
       return nestedFilter_;
@@ -61129,13 +62487,55 @@ public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrB
       return nestedFilter_;
     }
     
+    // optional bytes missing_value = 5;
+    public static final int MISSING_VALUE_FIELD_NUMBER = 5;
+    private com.google.protobuf.ByteString missingValue_;
+    public boolean hasMissingValue() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    public com.google.protobuf.ByteString getMissingValue() {
+      return missingValue_;
+    }
+    
+    // optional string missing_field = 6;
+    public static final int MISSING_FIELD_FIELD_NUMBER = 6;
+    private java.lang.Object missingField_;
+    public boolean hasMissingField() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
+    }
+    public String getMissingField() {
+      java.lang.Object ref = missingField_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          missingField_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getMissingFieldBytes() {
+      java.lang.Object ref = missingField_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        missingField_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
     private void initFields() {
       fieldName_ = "";
-      points_ = com.google.protobuf.LazyStringArrayList.EMPTY;
       order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
       mode_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortMode.SORT_MODE_MIN;
-      distanceType_ = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType.GEO_DISTANCE_ARC;
       nestedFilter_ = com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance();
+      missingValue_ = com.google.protobuf.ByteString.EMPTY;
+      missingField_ = "";
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -61152,20 +62552,20 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         output.writeBytes(1, getFieldNameBytes());
       }
-      for (int i = 0; i < points_.size(); i++) {
-        output.writeBytes(2, points_.getByteString(i));
-      }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeEnum(3, order_.getNumber());
+        output.writeEnum(2, order_.getNumber());
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeEnum(4, mode_.getNumber());
+        output.writeEnum(3, mode_.getNumber());
       }
       if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeEnum(5, distanceType_.getNumber());
+        output.writeMessage(4, nestedFilter_);
       }
       if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        output.writeMessage(6, nestedFilter_);
+        output.writeBytes(5, missingValue_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeBytes(6, getMissingFieldBytes());
       }
       getUnknownFields().writeTo(output);
     }
@@ -61180,30 +62580,25 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeBytesSize(1, getFieldNameBytes());
       }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < points_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeBytesSizeNoTag(points_.getByteString(i));
-        }
-        size += dataSize;
-        size += 1 * getPointsList().size();
-      }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(3, order_.getNumber());
+          .computeEnumSize(2, order_.getNumber());
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(4, mode_.getNumber());
+          .computeEnumSize(3, mode_.getNumber());
       }
       if (((bitField0_ & 0x00000008) == 0x00000008)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(5, distanceType_.getNumber());
+          .computeMessageSize(4, nestedFilter_);
       }
       if (((bitField0_ & 0x00000010) == 0x00000010)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, nestedFilter_);
+          .computeBytesSize(5, missingValue_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(6, getMissingFieldBytes());
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -61217,41 +62612,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -61260,7 +62655,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDista
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -61271,12 +62666,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDista
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -61286,7 +62681,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDista
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -61299,18 +62694,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSortOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.FieldSortOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceSort_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSort_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceSort_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSort_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -61332,19 +62727,19 @@ public Builder clear() {
         super.clear();
         fieldName_ = "";
         bitField0_ = (bitField0_ & ~0x00000001);
-        points_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000002);
         order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
-        bitField0_ = (bitField0_ & ~0x00000004);
+        bitField0_ = (bitField0_ & ~0x00000002);
         mode_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortMode.SORT_MODE_MIN;
-        bitField0_ = (bitField0_ & ~0x00000008);
-        distanceType_ = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType.GEO_DISTANCE_ARC;
-        bitField0_ = (bitField0_ & ~0x00000010);
+        bitField0_ = (bitField0_ & ~0x00000004);
         if (nestedFilterBuilder_ == null) {
           nestedFilter_ = com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance();
         } else {
           nestedFilterBuilder_.clear();
         }
+        bitField0_ = (bitField0_ & ~0x00000008);
+        missingValue_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        missingField_ = "";
         bitField0_ = (bitField0_ & ~0x00000020);
         return this;
       }
@@ -61355,24 +62750,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -61380,81 +62775,72 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSor
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort result = new com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort result = new com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
         result.fieldName_ = fieldName_;
-        if (((bitField0_ & 0x00000002) == 0x00000002)) {
-          points_ = new com.google.protobuf.UnmodifiableLazyStringList(
-              points_);
-          bitField0_ = (bitField0_ & ~0x00000002);
-        }
-        result.points_ = points_;
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
           to_bitField0_ |= 0x00000002;
         }
         result.order_ = order_;
-        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
           to_bitField0_ |= 0x00000004;
         }
         result.mode_ = mode_;
-        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
           to_bitField0_ |= 0x00000008;
         }
-        result.distanceType_ = distanceType_;
-        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
-          to_bitField0_ |= 0x00000010;
-        }
         if (nestedFilterBuilder_ == null) {
           result.nestedFilter_ = nestedFilter_;
         } else {
           result.nestedFilter_ = nestedFilterBuilder_.build();
         }
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.missingValue_ = missingValue_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        result.missingField_ = missingField_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.getDefaultInstance()) return this;
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.getDefaultInstance()) return this;
         if (other.hasFieldName()) {
           setFieldName(other.getFieldName());
         }
-        if (!other.points_.isEmpty()) {
-          if (points_.isEmpty()) {
-            points_ = other.points_;
-            bitField0_ = (bitField0_ & ~0x00000002);
-          } else {
-            ensurePointsIsMutable();
-            points_.addAll(other.points_);
-          }
-          onChanged();
-        }
         if (other.hasOrder()) {
           setOrder(other.getOrder());
         }
         if (other.hasMode()) {
           setMode(other.getMode());
         }
-        if (other.hasDistanceType()) {
-          setDistanceType(other.getDistanceType());
-        }
         if (other.hasNestedFilter()) {
           mergeNestedFilter(other.getNestedFilter());
         }
+        if (other.hasMissingValue()) {
+          setMissingValue(other.getMissingValue());
+        }
+        if (other.hasMissingField()) {
+          setMissingField(other.getMissingField());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -61491,45 +62877,29 @@ public Builder mergeFrom(
               fieldName_ = input.readBytes();
               break;
             }
-            case 18: {
-              ensurePointsIsMutable();
-              points_.add(input.readBytes());
-              break;
-            }
-            case 24: {
+            case 16: {
               int rawValue = input.readEnum();
               com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder value = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.valueOf(rawValue);
               if (value == null) {
-                unknownFields.mergeVarintField(3, rawValue);
+                unknownFields.mergeVarintField(2, rawValue);
               } else {
-                bitField0_ |= 0x00000004;
+                bitField0_ |= 0x00000002;
                 order_ = value;
               }
               break;
             }
-            case 32: {
+            case 24: {
               int rawValue = input.readEnum();
               com.alicloud.openservices.tablestore.core.protocol.Search.SortMode value = com.alicloud.openservices.tablestore.core.protocol.Search.SortMode.valueOf(rawValue);
               if (value == null) {
-                unknownFields.mergeVarintField(4, rawValue);
+                unknownFields.mergeVarintField(3, rawValue);
               } else {
-                bitField0_ |= 0x00000008;
+                bitField0_ |= 0x00000004;
                 mode_ = value;
               }
               break;
             }
-            case 40: {
-              int rawValue = input.readEnum();
-              com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType value = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType.valueOf(rawValue);
-              if (value == null) {
-                unknownFields.mergeVarintField(5, rawValue);
-              } else {
-                bitField0_ |= 0x00000010;
-                distanceType_ = value;
-              }
-              break;
-            }
-            case 50: {
+            case 34: {
               com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.newBuilder();
               if (hasNestedFilter()) {
                 subBuilder.mergeFrom(getNestedFilter());
@@ -61538,6 +62908,16 @@ public Builder mergeFrom(
               setNestedFilter(subBuilder.buildPartial());
               break;
             }
+            case 42: {
+              bitField0_ |= 0x00000010;
+              missingValue_ = input.readBytes();
+              break;
+            }
+            case 50: {
+              bitField0_ |= 0x00000020;
+              missingField_ = input.readBytes();
+              break;
+            }
           }
         }
       }
@@ -61580,66 +62960,10 @@ void setFieldName(com.google.protobuf.ByteString value) {
         onChanged();
       }
       
-      // repeated string points = 2;
-      private com.google.protobuf.LazyStringList points_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      private void ensurePointsIsMutable() {
-        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
-          points_ = new com.google.protobuf.LazyStringArrayList(points_);
-          bitField0_ |= 0x00000002;
-         }
-      }
-      public java.util.List<String>
-          getPointsList() {
-        return java.util.Collections.unmodifiableList(points_);
-      }
-      public int getPointsCount() {
-        return points_.size();
-      }
-      public String getPoints(int index) {
-        return points_.get(index);
-      }
-      public Builder setPoints(
-          int index, String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensurePointsIsMutable();
-        points_.set(index, value);
-        onChanged();
-        return this;
-      }
-      public Builder addPoints(String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensurePointsIsMutable();
-        points_.add(value);
-        onChanged();
-        return this;
-      }
-      public Builder addAllPoints(
-          java.lang.Iterable<String> values) {
-        ensurePointsIsMutable();
-        super.addAll(values, points_);
-        onChanged();
-        return this;
-      }
-      public Builder clearPoints() {
-        points_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        onChanged();
-        return this;
-      }
-      void addPoints(com.google.protobuf.ByteString value) {
-        ensurePointsIsMutable();
-        points_.add(value);
-        onChanged();
-      }
-      
-      // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 3;
+      // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 2;
       private com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
       public boolean hasOrder() {
-        return ((bitField0_ & 0x00000004) == 0x00000004);
+        return ((bitField0_ & 0x00000002) == 0x00000002);
       }
       public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder() {
         return order_;
@@ -61648,22 +62972,22 @@ public Builder setOrder(com.alicloud.openservices.tablestore.core.protocol.Searc
         if (value == null) {
           throw new NullPointerException();
         }
-        bitField0_ |= 0x00000004;
+        bitField0_ |= 0x00000002;
         order_ = value;
         onChanged();
         return this;
       }
       public Builder clearOrder() {
-        bitField0_ = (bitField0_ & ~0x00000004);
+        bitField0_ = (bitField0_ & ~0x00000002);
         order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
         onChanged();
         return this;
       }
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.SortMode mode = 4;
+      // optional .com.alicloud.openservices.tablestore.core.protocol.SortMode mode = 3;
       private com.alicloud.openservices.tablestore.core.protocol.Search.SortMode mode_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortMode.SORT_MODE_MIN;
       public boolean hasMode() {
-        return ((bitField0_ & 0x00000008) == 0x00000008);
+        return ((bitField0_ & 0x00000004) == 0x00000004);
       }
       public com.alicloud.openservices.tablestore.core.protocol.Search.SortMode getMode() {
         return mode_;
@@ -61672,48 +62996,24 @@ public Builder setMode(com.alicloud.openservices.tablestore.core.protocol.Search
         if (value == null) {
           throw new NullPointerException();
         }
-        bitField0_ |= 0x00000008;
+        bitField0_ |= 0x00000004;
         mode_ = value;
         onChanged();
         return this;
       }
       public Builder clearMode() {
-        bitField0_ = (bitField0_ & ~0x00000008);
+        bitField0_ = (bitField0_ & ~0x00000004);
         mode_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortMode.SORT_MODE_MIN;
         onChanged();
         return this;
       }
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.GeoDistanceType distance_type = 5;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType distanceType_ = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType.GEO_DISTANCE_ARC;
-      public boolean hasDistanceType() {
-        return ((bitField0_ & 0x00000010) == 0x00000010);
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType getDistanceType() {
-        return distanceType_;
-      }
-      public Builder setDistanceType(com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        bitField0_ |= 0x00000010;
-        distanceType_ = value;
-        onChanged();
-        return this;
-      }
-      public Builder clearDistanceType() {
-        bitField0_ = (bitField0_ & ~0x00000010);
-        distanceType_ = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType.GEO_DISTANCE_ARC;
-        onChanged();
-        return this;
-      }
-      
-      // optional .com.alicloud.openservices.tablestore.core.protocol.NestedFilter nested_filter = 6;
+      // optional .com.alicloud.openservices.tablestore.core.protocol.NestedFilter nested_filter = 4;
       private com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter nestedFilter_ = com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
           com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter, com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrBuilder> nestedFilterBuilder_;
       public boolean hasNestedFilter() {
-        return ((bitField0_ & 0x00000020) == 0x00000020);
+        return ((bitField0_ & 0x00000008) == 0x00000008);
       }
       public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter getNestedFilter() {
         if (nestedFilterBuilder_ == null) {
@@ -61732,7 +63032,7 @@ public Builder setNestedFilter(com.alicloud.openservices.tablestore.core.protoco
         } else {
           nestedFilterBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000020;
+        bitField0_ |= 0x00000008;
         return this;
       }
       public Builder setNestedFilter(
@@ -61743,12 +63043,12 @@ public Builder setNestedFilter(
         } else {
           nestedFilterBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000020;
+        bitField0_ |= 0x00000008;
         return this;
       }
       public Builder mergeNestedFilter(com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter value) {
         if (nestedFilterBuilder_ == null) {
-          if (((bitField0_ & 0x00000020) == 0x00000020) &&
+          if (((bitField0_ & 0x00000008) == 0x00000008) &&
               nestedFilter_ != com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance()) {
             nestedFilter_ =
               com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.newBuilder(nestedFilter_).mergeFrom(value).buildPartial();
@@ -61759,7 +63059,7 @@ public Builder mergeNestedFilter(com.alicloud.openservices.tablestore.core.proto
         } else {
           nestedFilterBuilder_.mergeFrom(value);
         }
-        bitField0_ |= 0x00000020;
+        bitField0_ |= 0x00000008;
         return this;
       }
       public Builder clearNestedFilter() {
@@ -61769,11 +63069,11 @@ public Builder clearNestedFilter() {
         } else {
           nestedFilterBuilder_.clear();
         }
-        bitField0_ = (bitField0_ & ~0x00000020);
+        bitField0_ = (bitField0_ & ~0x00000008);
         return this;
       }
       public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.Builder getNestedFilterBuilder() {
-        bitField0_ |= 0x00000020;
+        bitField0_ |= 0x00000008;
         onChanged();
         return getNestedFilterFieldBuilder().getBuilder();
       }
@@ -61798,126 +63098,125 @@ public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrB
         return nestedFilterBuilder_;
       }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.GeoDistanceSort)
+      // optional bytes missing_value = 5;
+      private com.google.protobuf.ByteString missingValue_ = com.google.protobuf.ByteString.EMPTY;
+      public boolean hasMissingValue() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public com.google.protobuf.ByteString getMissingValue() {
+        return missingValue_;
+      }
+      public Builder setMissingValue(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000010;
+        missingValue_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearMissingValue() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        missingValue_ = getDefaultInstance().getMissingValue();
+        onChanged();
+        return this;
+      }
+      
+      // optional string missing_field = 6;
+      private java.lang.Object missingField_ = "";
+      public boolean hasMissingField() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public String getMissingField() {
+        java.lang.Object ref = missingField_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          missingField_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setMissingField(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000020;
+        missingField_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearMissingField() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        missingField_ = getDefaultInstance().getMissingField();
+        onChanged();
+        return this;
+      }
+      void setMissingField(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000020;
+        missingField_ = value;
+        onChanged();
+      }
+      
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.FieldSort)
     }
     
     static {
-      defaultInstance = new GeoDistanceSort(true);
+      defaultInstance = new FieldSort(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.GeoDistanceSort)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.FieldSort)
   }
   
-  public interface SorterOrBuilder
+  public interface DocSortOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.FieldSort field_sort = 1;
-    boolean hasFieldSort();
-    com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort getFieldSort();
-    com.alicloud.openservices.tablestore.core.protocol.Search.FieldSortOrBuilder getFieldSortOrBuilder();
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.GeoDistanceSort geo_distance_sort = 2;
-    boolean hasGeoDistanceSort();
-    com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort getGeoDistanceSort();
-    com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSortOrBuilder getGeoDistanceSortOrBuilder();
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.ScoreSort score_sort = 3;
-    boolean hasScoreSort();
-    com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort getScoreSort();
-    com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSortOrBuilder getScoreSortOrBuilder();
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.PrimaryKeySort pk_sort = 4;
-    boolean hasPkSort();
-    com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort getPkSort();
-    com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySortOrBuilder getPkSortOrBuilder();
+    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 1;
+    boolean hasOrder();
+    com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder();
   }
-  public static final class Sorter extends
+  public static final class DocSort extends
       com.google.protobuf.GeneratedMessage
-      implements SorterOrBuilder {
-    // Use Sorter.newBuilder() to construct.
-    private Sorter(Builder builder) {
+      implements DocSortOrBuilder {
+    // Use DocSort.newBuilder() to construct.
+    private DocSort(Builder builder) {
       super(builder);
     }
-    private Sorter(boolean noInit) {}
+    private DocSort(boolean noInit) {}
     
-    private static final Sorter defaultInstance;
-    public static Sorter getDefaultInstance() {
+    private static final DocSort defaultInstance;
+    public static DocSort getDefaultInstance() {
       return defaultInstance;
     }
     
-    public Sorter getDefaultInstanceForType() {
+    public DocSort getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Sorter_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_DocSort_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Sorter_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_DocSort_fieldAccessorTable;
     }
     
     private int bitField0_;
-    // optional .com.alicloud.openservices.tablestore.core.protocol.FieldSort field_sort = 1;
-    public static final int FIELD_SORT_FIELD_NUMBER = 1;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort fieldSort_;
-    public boolean hasFieldSort() {
+    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 1;
+    public static final int ORDER_FIELD_NUMBER = 1;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder order_;
+    public boolean hasOrder() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort getFieldSort() {
-      return fieldSort_;
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSortOrBuilder getFieldSortOrBuilder() {
-      return fieldSort_;
-    }
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.GeoDistanceSort geo_distance_sort = 2;
-    public static final int GEO_DISTANCE_SORT_FIELD_NUMBER = 2;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort geoDistanceSort_;
-    public boolean hasGeoDistanceSort() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort getGeoDistanceSort() {
-      return geoDistanceSort_;
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSortOrBuilder getGeoDistanceSortOrBuilder() {
-      return geoDistanceSort_;
-    }
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.ScoreSort score_sort = 3;
-    public static final int SCORE_SORT_FIELD_NUMBER = 3;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort scoreSort_;
-    public boolean hasScoreSort() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort getScoreSort() {
-      return scoreSort_;
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSortOrBuilder getScoreSortOrBuilder() {
-      return scoreSort_;
-    }
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.PrimaryKeySort pk_sort = 4;
-    public static final int PK_SORT_FIELD_NUMBER = 4;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort pkSort_;
-    public boolean hasPkSort() {
-      return ((bitField0_ & 0x00000008) == 0x00000008);
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort getPkSort() {
-      return pkSort_;
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySortOrBuilder getPkSortOrBuilder() {
-      return pkSort_;
+    public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder() {
+      return order_;
     }
     
     private void initFields() {
-      fieldSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.getDefaultInstance();
-      geoDistanceSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.getDefaultInstance();
-      scoreSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.getDefaultInstance();
-      pkSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.getDefaultInstance();
+      order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -61932,16 +63231,7 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeMessage(1, fieldSort_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeMessage(2, geoDistanceSort_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeMessage(3, scoreSort_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeMessage(4, pkSort_);
+        output.writeEnum(1, order_.getNumber());
       }
       getUnknownFields().writeTo(output);
     }
@@ -61954,19 +63244,7 @@ public int getSerializedSize() {
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, fieldSort_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, geoDistanceSort_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, scoreSort_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, pkSort_);
+          .computeEnumSize(1, order_.getNumber());
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -61980,41 +63258,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DocSort parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DocSort parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DocSort parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DocSort parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DocSort parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DocSort parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DocSort parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -62023,7 +63301,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter p
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DocSort parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -62034,12 +63312,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter p
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DocSort parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DocSort parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -62049,7 +63327,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter p
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.Sorter prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.DocSort prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -62062,18 +63340,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.DocSortOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Sorter_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_DocSort_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Sorter_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_DocSort_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -62084,10 +63362,6 @@ private Builder(BuilderParent parent) {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getFieldSortFieldBuilder();
-          getGeoDistanceSortFieldBuilder();
-          getScoreSortFieldBuilder();
-          getPkSortFieldBuilder();
         }
       }
       private static Builder create() {
@@ -62096,30 +63370,8 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        if (fieldSortBuilder_ == null) {
-          fieldSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.getDefaultInstance();
-        } else {
-          fieldSortBuilder_.clear();
-        }
+        order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
         bitField0_ = (bitField0_ & ~0x00000001);
-        if (geoDistanceSortBuilder_ == null) {
-          geoDistanceSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.getDefaultInstance();
-        } else {
-          geoDistanceSortBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000002);
-        if (scoreSortBuilder_ == null) {
-          scoreSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.getDefaultInstance();
-        } else {
-          scoreSortBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000004);
-        if (pkSortBuilder_ == null) {
-          pkSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.getDefaultInstance();
-        } else {
-          pkSortBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000008);
         return this;
       }
       
@@ -62129,24 +63381,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Sorter getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.DocSort getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Sorter build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.Sorter result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.DocSort build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.DocSort result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.Sorter buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.DocSort buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.Sorter result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.DocSort result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -62154,69 +63406,32 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.Sorter buildPa
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Sorter buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.Sorter result = new com.alicloud.openservices.tablestore.core.protocol.Search.Sorter(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.DocSort buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.DocSort result = new com.alicloud.openservices.tablestore.core.protocol.Search.DocSort(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        if (fieldSortBuilder_ == null) {
-          result.fieldSort_ = fieldSort_;
-        } else {
-          result.fieldSort_ = fieldSortBuilder_.build();
-        }
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        if (geoDistanceSortBuilder_ == null) {
-          result.geoDistanceSort_ = geoDistanceSort_;
-        } else {
-          result.geoDistanceSort_ = geoDistanceSortBuilder_.build();
-        }
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
-          to_bitField0_ |= 0x00000004;
-        }
-        if (scoreSortBuilder_ == null) {
-          result.scoreSort_ = scoreSort_;
-        } else {
-          result.scoreSort_ = scoreSortBuilder_.build();
-        }
-        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
-          to_bitField0_ |= 0x00000008;
-        }
-        if (pkSortBuilder_ == null) {
-          result.pkSort_ = pkSort_;
-        } else {
-          result.pkSort_ = pkSortBuilder_.build();
-        }
+        result.order_ = order_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.Sorter) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.Sorter)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.DocSort) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.DocSort)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.Sorter other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.getDefaultInstance()) return this;
-        if (other.hasFieldSort()) {
-          mergeFieldSort(other.getFieldSort());
-        }
-        if (other.hasGeoDistanceSort()) {
-          mergeGeoDistanceSort(other.getGeoDistanceSort());
-        }
-        if (other.hasScoreSort()) {
-          mergeScoreSort(other.getScoreSort());
-        }
-        if (other.hasPkSort()) {
-          mergePkSort(other.getPkSort());
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.DocSort other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.getDefaultInstance()) return this;
+        if (other.hasOrder()) {
+          setOrder(other.getOrder());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -62249,40 +63464,15 @@ public Builder mergeFrom(
               }
               break;
             }
-            case 10: {
-              com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.newBuilder();
-              if (hasFieldSort()) {
-                subBuilder.mergeFrom(getFieldSort());
-              }
-              input.readMessage(subBuilder, extensionRegistry);
-              setFieldSort(subBuilder.buildPartial());
-              break;
-            }
-            case 18: {
-              com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.newBuilder();
-              if (hasGeoDistanceSort()) {
-                subBuilder.mergeFrom(getGeoDistanceSort());
-              }
-              input.readMessage(subBuilder, extensionRegistry);
-              setGeoDistanceSort(subBuilder.buildPartial());
-              break;
-            }
-            case 26: {
-              com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.newBuilder();
-              if (hasScoreSort()) {
-                subBuilder.mergeFrom(getScoreSort());
-              }
-              input.readMessage(subBuilder, extensionRegistry);
-              setScoreSort(subBuilder.buildPartial());
-              break;
-            }
-            case 34: {
-              com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.newBuilder();
-              if (hasPkSort()) {
-                subBuilder.mergeFrom(getPkSort());
+            case 8: {
+              int rawValue = input.readEnum();
+              com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder value = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(1, rawValue);
+              } else {
+                bitField0_ |= 0x00000001;
+                order_ = value;
               }
-              input.readMessage(subBuilder, extensionRegistry);
-              setPkSort(subBuilder.buildPartial());
               break;
             }
           }
@@ -62291,441 +63481,195 @@ public Builder mergeFrom(
       
       private int bitField0_;
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.FieldSort field_sort = 1;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort fieldSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.getDefaultInstance();
-      private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSortOrBuilder> fieldSortBuilder_;
-      public boolean hasFieldSort() {
+      // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 1;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
+      public boolean hasOrder() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort getFieldSort() {
-        if (fieldSortBuilder_ == null) {
-          return fieldSort_;
-        } else {
-          return fieldSortBuilder_.getMessage();
-        }
-      }
-      public Builder setFieldSort(com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort value) {
-        if (fieldSortBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          fieldSort_ = value;
-          onChanged();
-        } else {
-          fieldSortBuilder_.setMessage(value);
-        }
-        bitField0_ |= 0x00000001;
-        return this;
-      }
-      public Builder setFieldSort(
-          com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.Builder builderForValue) {
-        if (fieldSortBuilder_ == null) {
-          fieldSort_ = builderForValue.build();
-          onChanged();
-        } else {
-          fieldSortBuilder_.setMessage(builderForValue.build());
-        }
-        bitField0_ |= 0x00000001;
-        return this;
-      }
-      public Builder mergeFieldSort(com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort value) {
-        if (fieldSortBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) == 0x00000001) &&
-              fieldSort_ != com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.getDefaultInstance()) {
-            fieldSort_ =
-              com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.newBuilder(fieldSort_).mergeFrom(value).buildPartial();
-          } else {
-            fieldSort_ = value;
-          }
-          onChanged();
-        } else {
-          fieldSortBuilder_.mergeFrom(value);
-        }
-        bitField0_ |= 0x00000001;
-        return this;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder() {
+        return order_;
       }
-      public Builder clearFieldSort() {
-        if (fieldSortBuilder_ == null) {
-          fieldSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.getDefaultInstance();
-          onChanged();
-        } else {
-          fieldSortBuilder_.clear();
+      public Builder setOrder(com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
-        bitField0_ = (bitField0_ & ~0x00000001);
-        return this;
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.Builder getFieldSortBuilder() {
         bitField0_ |= 0x00000001;
+        order_ = value;
         onChanged();
-        return getFieldSortFieldBuilder().getBuilder();
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSortOrBuilder getFieldSortOrBuilder() {
-        if (fieldSortBuilder_ != null) {
-          return fieldSortBuilder_.getMessageOrBuilder();
-        } else {
-          return fieldSort_;
-        }
-      }
-      private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSortOrBuilder> 
-          getFieldSortFieldBuilder() {
-        if (fieldSortBuilder_ == null) {
-          fieldSortBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSortOrBuilder>(
-                  fieldSort_,
-                  getParentForChildren(),
-                  isClean());
-          fieldSort_ = null;
-        }
-        return fieldSortBuilder_;
-      }
-      
-      // optional .com.alicloud.openservices.tablestore.core.protocol.GeoDistanceSort geo_distance_sort = 2;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort geoDistanceSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.getDefaultInstance();
-      private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort, com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSortOrBuilder> geoDistanceSortBuilder_;
-      public boolean hasGeoDistanceSort() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort getGeoDistanceSort() {
-        if (geoDistanceSortBuilder_ == null) {
-          return geoDistanceSort_;
-        } else {
-          return geoDistanceSortBuilder_.getMessage();
-        }
-      }
-      public Builder setGeoDistanceSort(com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort value) {
-        if (geoDistanceSortBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          geoDistanceSort_ = value;
-          onChanged();
-        } else {
-          geoDistanceSortBuilder_.setMessage(value);
-        }
-        bitField0_ |= 0x00000002;
-        return this;
-      }
-      public Builder setGeoDistanceSort(
-          com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.Builder builderForValue) {
-        if (geoDistanceSortBuilder_ == null) {
-          geoDistanceSort_ = builderForValue.build();
-          onChanged();
-        } else {
-          geoDistanceSortBuilder_.setMessage(builderForValue.build());
-        }
-        bitField0_ |= 0x00000002;
-        return this;
-      }
-      public Builder mergeGeoDistanceSort(com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort value) {
-        if (geoDistanceSortBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) == 0x00000002) &&
-              geoDistanceSort_ != com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.getDefaultInstance()) {
-            geoDistanceSort_ =
-              com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.newBuilder(geoDistanceSort_).mergeFrom(value).buildPartial();
-          } else {
-            geoDistanceSort_ = value;
-          }
-          onChanged();
-        } else {
-          geoDistanceSortBuilder_.mergeFrom(value);
-        }
-        bitField0_ |= 0x00000002;
-        return this;
-      }
-      public Builder clearGeoDistanceSort() {
-        if (geoDistanceSortBuilder_ == null) {
-          geoDistanceSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.getDefaultInstance();
-          onChanged();
-        } else {
-          geoDistanceSortBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000002);
-        return this;
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.Builder getGeoDistanceSortBuilder() {
-        bitField0_ |= 0x00000002;
-        onChanged();
-        return getGeoDistanceSortFieldBuilder().getBuilder();
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSortOrBuilder getGeoDistanceSortOrBuilder() {
-        if (geoDistanceSortBuilder_ != null) {
-          return geoDistanceSortBuilder_.getMessageOrBuilder();
-        } else {
-          return geoDistanceSort_;
-        }
-      }
-      private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort, com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSortOrBuilder> 
-          getGeoDistanceSortFieldBuilder() {
-        if (geoDistanceSortBuilder_ == null) {
-          geoDistanceSortBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort, com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSortOrBuilder>(
-                  geoDistanceSort_,
-                  getParentForChildren(),
-                  isClean());
-          geoDistanceSort_ = null;
-        }
-        return geoDistanceSortBuilder_;
-      }
-      
-      // optional .com.alicloud.openservices.tablestore.core.protocol.ScoreSort score_sort = 3;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort scoreSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.getDefaultInstance();
-      private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort, com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSortOrBuilder> scoreSortBuilder_;
-      public boolean hasScoreSort() {
-        return ((bitField0_ & 0x00000004) == 0x00000004);
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort getScoreSort() {
-        if (scoreSortBuilder_ == null) {
-          return scoreSort_;
-        } else {
-          return scoreSortBuilder_.getMessage();
-        }
-      }
-      public Builder setScoreSort(com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort value) {
-        if (scoreSortBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          scoreSort_ = value;
-          onChanged();
-        } else {
-          scoreSortBuilder_.setMessage(value);
-        }
-        bitField0_ |= 0x00000004;
-        return this;
-      }
-      public Builder setScoreSort(
-          com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.Builder builderForValue) {
-        if (scoreSortBuilder_ == null) {
-          scoreSort_ = builderForValue.build();
-          onChanged();
-        } else {
-          scoreSortBuilder_.setMessage(builderForValue.build());
-        }
-        bitField0_ |= 0x00000004;
-        return this;
-      }
-      public Builder mergeScoreSort(com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort value) {
-        if (scoreSortBuilder_ == null) {
-          if (((bitField0_ & 0x00000004) == 0x00000004) &&
-              scoreSort_ != com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.getDefaultInstance()) {
-            scoreSort_ =
-              com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.newBuilder(scoreSort_).mergeFrom(value).buildPartial();
-          } else {
-            scoreSort_ = value;
-          }
-          onChanged();
-        } else {
-          scoreSortBuilder_.mergeFrom(value);
-        }
-        bitField0_ |= 0x00000004;
-        return this;
-      }
-      public Builder clearScoreSort() {
-        if (scoreSortBuilder_ == null) {
-          scoreSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.getDefaultInstance();
-          onChanged();
-        } else {
-          scoreSortBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000004);
         return this;
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.Builder getScoreSortBuilder() {
-        bitField0_ |= 0x00000004;
+      public Builder clearOrder() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
         onChanged();
-        return getScoreSortFieldBuilder().getBuilder();
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSortOrBuilder getScoreSortOrBuilder() {
-        if (scoreSortBuilder_ != null) {
-          return scoreSortBuilder_.getMessageOrBuilder();
-        } else {
-          return scoreSort_;
-        }
-      }
-      private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort, com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSortOrBuilder> 
-          getScoreSortFieldBuilder() {
-        if (scoreSortBuilder_ == null) {
-          scoreSortBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort, com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSortOrBuilder>(
-                  scoreSort_,
-                  getParentForChildren(),
-                  isClean());
-          scoreSort_ = null;
-        }
-        return scoreSortBuilder_;
-      }
-      
-      // optional .com.alicloud.openservices.tablestore.core.protocol.PrimaryKeySort pk_sort = 4;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort pkSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.getDefaultInstance();
-      private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort, com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySortOrBuilder> pkSortBuilder_;
-      public boolean hasPkSort() {
-        return ((bitField0_ & 0x00000008) == 0x00000008);
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort getPkSort() {
-        if (pkSortBuilder_ == null) {
-          return pkSort_;
-        } else {
-          return pkSortBuilder_.getMessage();
-        }
-      }
-      public Builder setPkSort(com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort value) {
-        if (pkSortBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          pkSort_ = value;
-          onChanged();
-        } else {
-          pkSortBuilder_.setMessage(value);
-        }
-        bitField0_ |= 0x00000008;
-        return this;
-      }
-      public Builder setPkSort(
-          com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.Builder builderForValue) {
-        if (pkSortBuilder_ == null) {
-          pkSort_ = builderForValue.build();
-          onChanged();
-        } else {
-          pkSortBuilder_.setMessage(builderForValue.build());
-        }
-        bitField0_ |= 0x00000008;
-        return this;
-      }
-      public Builder mergePkSort(com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort value) {
-        if (pkSortBuilder_ == null) {
-          if (((bitField0_ & 0x00000008) == 0x00000008) &&
-              pkSort_ != com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.getDefaultInstance()) {
-            pkSort_ =
-              com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.newBuilder(pkSort_).mergeFrom(value).buildPartial();
-          } else {
-            pkSort_ = value;
-          }
-          onChanged();
-        } else {
-          pkSortBuilder_.mergeFrom(value);
-        }
-        bitField0_ |= 0x00000008;
-        return this;
-      }
-      public Builder clearPkSort() {
-        if (pkSortBuilder_ == null) {
-          pkSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.getDefaultInstance();
-          onChanged();
-        } else {
-          pkSortBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000008);
         return this;
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.Builder getPkSortBuilder() {
-        bitField0_ |= 0x00000008;
-        onChanged();
-        return getPkSortFieldBuilder().getBuilder();
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySortOrBuilder getPkSortOrBuilder() {
-        if (pkSortBuilder_ != null) {
-          return pkSortBuilder_.getMessageOrBuilder();
-        } else {
-          return pkSort_;
-        }
-      }
-      private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort, com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySortOrBuilder> 
-          getPkSortFieldBuilder() {
-        if (pkSortBuilder_ == null) {
-          pkSortBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort, com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySortOrBuilder>(
-                  pkSort_,
-                  getParentForChildren(),
-                  isClean());
-          pkSort_ = null;
-        }
-        return pkSortBuilder_;
-      }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.Sorter)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.DocSort)
     }
     
     static {
-      defaultInstance = new Sorter(true);
+      defaultInstance = new DocSort(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.Sorter)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.DocSort)
   }
   
-  public interface SortOrBuilder
+  public interface GeoDistanceSortOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
-    // repeated .com.alicloud.openservices.tablestore.core.protocol.Sorter sorter = 1;
-    java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.Sorter> 
-        getSorterList();
-    com.alicloud.openservices.tablestore.core.protocol.Search.Sorter getSorter(int index);
-    int getSorterCount();
-    java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder> 
-        getSorterOrBuilderList();
-    com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder getSorterOrBuilder(
-        int index);
+    // optional string field_name = 1;
+    boolean hasFieldName();
+    String getFieldName();
+    
+    // repeated string points = 2;
+    java.util.List<String> getPointsList();
+    int getPointsCount();
+    String getPoints(int index);
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 3;
+    boolean hasOrder();
+    com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.SortMode mode = 4;
+    boolean hasMode();
+    com.alicloud.openservices.tablestore.core.protocol.Search.SortMode getMode();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.GeoDistanceType distance_type = 5;
+    boolean hasDistanceType();
+    com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType getDistanceType();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.NestedFilter nested_filter = 6;
+    boolean hasNestedFilter();
+    com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter getNestedFilter();
+    com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrBuilder getNestedFilterOrBuilder();
   }
-  public static final class Sort extends
+  public static final class GeoDistanceSort extends
       com.google.protobuf.GeneratedMessage
-      implements SortOrBuilder {
-    // Use Sort.newBuilder() to construct.
-    private Sort(Builder builder) {
+      implements GeoDistanceSortOrBuilder {
+    // Use GeoDistanceSort.newBuilder() to construct.
+    private GeoDistanceSort(Builder builder) {
       super(builder);
     }
-    private Sort(boolean noInit) {}
+    private GeoDistanceSort(boolean noInit) {}
     
-    private static final Sort defaultInstance;
-    public static Sort getDefaultInstance() {
+    private static final GeoDistanceSort defaultInstance;
+    public static GeoDistanceSort getDefaultInstance() {
       return defaultInstance;
     }
     
-    public Sort getDefaultInstanceForType() {
+    public GeoDistanceSort getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Sort_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceSort_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Sort_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceSort_fieldAccessorTable;
     }
     
-    // repeated .com.alicloud.openservices.tablestore.core.protocol.Sorter sorter = 1;
-    public static final int SORTER_FIELD_NUMBER = 1;
-    private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.Sorter> sorter_;
-    public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.Sorter> getSorterList() {
-      return sorter_;
-    }
-    public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder> 
-        getSorterOrBuilderList() {
-      return sorter_;
-    }
-    public int getSorterCount() {
-      return sorter_.size();
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.Sorter getSorter(int index) {
-      return sorter_.get(index);
+    private int bitField0_;
+    // optional string field_name = 1;
+    public static final int FIELD_NAME_FIELD_NUMBER = 1;
+    private java.lang.Object fieldName_;
+    public boolean hasFieldName() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder getSorterOrBuilder(
-        int index) {
-      return sorter_.get(index);
+    public String getFieldName() {
+      java.lang.Object ref = fieldName_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          fieldName_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getFieldNameBytes() {
+      java.lang.Object ref = fieldName_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        fieldName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // repeated string points = 2;
+    public static final int POINTS_FIELD_NUMBER = 2;
+    private com.google.protobuf.LazyStringList points_;
+    public java.util.List<String>
+        getPointsList() {
+      return points_;
+    }
+    public int getPointsCount() {
+      return points_.size();
+    }
+    public String getPoints(int index) {
+      return points_.get(index);
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 3;
+    public static final int ORDER_FIELD_NUMBER = 3;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder order_;
+    public boolean hasOrder() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder() {
+      return order_;
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.SortMode mode = 4;
+    public static final int MODE_FIELD_NUMBER = 4;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.SortMode mode_;
+    public boolean hasMode() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.SortMode getMode() {
+      return mode_;
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.GeoDistanceType distance_type = 5;
+    public static final int DISTANCE_TYPE_FIELD_NUMBER = 5;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType distanceType_;
+    public boolean hasDistanceType() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType getDistanceType() {
+      return distanceType_;
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.NestedFilter nested_filter = 6;
+    public static final int NESTED_FILTER_FIELD_NUMBER = 6;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter nestedFilter_;
+    public boolean hasNestedFilter() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter getNestedFilter() {
+      return nestedFilter_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrBuilder getNestedFilterOrBuilder() {
+      return nestedFilter_;
     }
     
     private void initFields() {
-      sorter_ = java.util.Collections.emptyList();
+      fieldName_ = "";
+      points_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
+      mode_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortMode.SORT_MODE_MIN;
+      distanceType_ = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType.GEO_DISTANCE_ARC;
+      nestedFilter_ = com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance();
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -62739,8 +63683,23 @@ public final boolean isInitialized() {
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
-      for (int i = 0; i < sorter_.size(); i++) {
-        output.writeMessage(1, sorter_.get(i));
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getFieldNameBytes());
+      }
+      for (int i = 0; i < points_.size(); i++) {
+        output.writeBytes(2, points_.getByteString(i));
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeEnum(3, order_.getNumber());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeEnum(4, mode_.getNumber());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeEnum(5, distanceType_.getNumber());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeMessage(6, nestedFilter_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -62751,9 +63710,34 @@ public int getSerializedSize() {
       if (size != -1) return size;
     
       size = 0;
-      for (int i = 0; i < sorter_.size(); i++) {
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, sorter_.get(i));
+          .computeBytesSize(1, getFieldNameBytes());
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < points_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(points_.getByteString(i));
+        }
+        size += dataSize;
+        size += 1 * getPointsList().size();
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(3, order_.getNumber());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(4, mode_.getNumber());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(5, distanceType_.getNumber());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, nestedFilter_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -62767,41 +63751,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -62810,7 +63794,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort par
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -62821,12 +63805,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort par
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -62836,7 +63820,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort par
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.Sort prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -62849,18 +63833,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSortOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Sort_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceSort_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Sort_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceSort_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.Sort.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -62871,7 +63855,7 @@ private Builder(BuilderParent parent) {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getSorterFieldBuilder();
+          getNestedFilterFieldBuilder();
         }
       }
       private static Builder create() {
@@ -62880,12 +63864,22 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        if (sorterBuilder_ == null) {
-          sorter_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        fieldName_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        points_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        mode_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortMode.SORT_MODE_MIN;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        distanceType_ = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType.GEO_DISTANCE_ARC;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        if (nestedFilterBuilder_ == null) {
+          nestedFilter_ = com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance();
         } else {
-          sorterBuilder_.clear();
+          nestedFilterBuilder_.clear();
         }
+        bitField0_ = (bitField0_ & ~0x00000020);
         return this;
       }
       
@@ -62895,24 +63889,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Sort getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Sort build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.Sort result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.Sort buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.Sort result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -62920,58 +63914,80 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.Sort buildPars
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Sort buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.Sort result = new com.alicloud.openservices.tablestore.core.protocol.Search.Sort(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort result = new com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort(this);
         int from_bitField0_ = bitField0_;
-        if (sorterBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) == 0x00000001)) {
-            sorter_ = java.util.Collections.unmodifiableList(sorter_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.sorter_ = sorter_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.fieldName_ = fieldName_;
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          points_ = new com.google.protobuf.UnmodifiableLazyStringList(
+              points_);
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.points_ = points_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.order_ = order_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.mode_ = mode_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.distanceType_ = distanceType_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        if (nestedFilterBuilder_ == null) {
+          result.nestedFilter_ = nestedFilter_;
         } else {
-          result.sorter_ = sorterBuilder_.build();
+          result.nestedFilter_ = nestedFilterBuilder_.build();
         }
+        result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.Sort) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.Sort)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.Sort other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance()) return this;
-        if (sorterBuilder_ == null) {
-          if (!other.sorter_.isEmpty()) {
-            if (sorter_.isEmpty()) {
-              sorter_ = other.sorter_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureSorterIsMutable();
-              sorter_.addAll(other.sorter_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.sorter_.isEmpty()) {
-            if (sorterBuilder_.isEmpty()) {
-              sorterBuilder_.dispose();
-              sorterBuilder_ = null;
-              sorter_ = other.sorter_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              sorterBuilder_ = 
-                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
-                   getSorterFieldBuilder() : null;
-            } else {
-              sorterBuilder_.addAllMessages(other.sorter_);
-            }
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.getDefaultInstance()) return this;
+        if (other.hasFieldName()) {
+          setFieldName(other.getFieldName());
+        }
+        if (!other.points_.isEmpty()) {
+          if (points_.isEmpty()) {
+            points_ = other.points_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensurePointsIsMutable();
+            points_.addAll(other.points_);
           }
+          onChanged();
+        }
+        if (other.hasOrder()) {
+          setOrder(other.getOrder());
+        }
+        if (other.hasMode()) {
+          setMode(other.getMode());
+        }
+        if (other.hasDistanceType()) {
+          setDistanceType(other.getDistanceType());
+        }
+        if (other.hasNestedFilter()) {
+          mergeNestedFilter(other.getNestedFilter());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -63005,9 +64021,55 @@ public Builder mergeFrom(
               break;
             }
             case 10: {
-              com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.newBuilder();
+              bitField0_ |= 0x00000001;
+              fieldName_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              ensurePointsIsMutable();
+              points_.add(input.readBytes());
+              break;
+            }
+            case 24: {
+              int rawValue = input.readEnum();
+              com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder value = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(3, rawValue);
+              } else {
+                bitField0_ |= 0x00000004;
+                order_ = value;
+              }
+              break;
+            }
+            case 32: {
+              int rawValue = input.readEnum();
+              com.alicloud.openservices.tablestore.core.protocol.Search.SortMode value = com.alicloud.openservices.tablestore.core.protocol.Search.SortMode.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(4, rawValue);
+              } else {
+                bitField0_ |= 0x00000008;
+                mode_ = value;
+              }
+              break;
+            }
+            case 40: {
+              int rawValue = input.readEnum();
+              com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType value = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(5, rawValue);
+              } else {
+                bitField0_ |= 0x00000010;
+                distanceType_ = value;
+              }
+              break;
+            }
+            case 50: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.newBuilder();
+              if (hasNestedFilter()) {
+                subBuilder.mergeFrom(getNestedFilter());
+              }
               input.readMessage(subBuilder, extensionRegistry);
-              addSorter(subBuilder.buildPartial());
+              setNestedFilter(subBuilder.buildPartial());
               break;
             }
           }
@@ -63016,391 +64078,399 @@ public Builder mergeFrom(
       
       private int bitField0_;
       
-      // repeated .com.alicloud.openservices.tablestore.core.protocol.Sorter sorter = 1;
-      private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.Sorter> sorter_ =
-        java.util.Collections.emptyList();
-      private void ensureSorterIsMutable() {
-        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
-          sorter_ = new java.util.ArrayList<com.alicloud.openservices.tablestore.core.protocol.Search.Sorter>(sorter_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-      
-      private com.google.protobuf.RepeatedFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.Sorter, com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder> sorterBuilder_;
-      
-      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.Sorter> getSorterList() {
-        if (sorterBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sorter_);
-        } else {
-          return sorterBuilder_.getMessageList();
-        }
-      }
-      public int getSorterCount() {
-        if (sorterBuilder_ == null) {
-          return sorter_.size();
-        } else {
-          return sorterBuilder_.getCount();
-        }
+      // optional string field_name = 1;
+      private java.lang.Object fieldName_ = "";
+      public boolean hasFieldName() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Sorter getSorter(int index) {
-        if (sorterBuilder_ == null) {
-          return sorter_.get(index);
+      public String getFieldName() {
+        java.lang.Object ref = fieldName_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          fieldName_ = s;
+          return s;
         } else {
-          return sorterBuilder_.getMessage(index);
+          return (String) ref;
         }
       }
-      public Builder setSorter(
-          int index, com.alicloud.openservices.tablestore.core.protocol.Search.Sorter value) {
-        if (sorterBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSorterIsMutable();
-          sorter_.set(index, value);
-          onChanged();
-        } else {
-          sorterBuilder_.setMessage(index, value);
-        }
+      public Builder setFieldName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        fieldName_ = value;
+        onChanged();
         return this;
       }
-      public Builder setSorter(
-          int index, com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder builderForValue) {
-        if (sorterBuilder_ == null) {
-          ensureSorterIsMutable();
-          sorter_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          sorterBuilder_.setMessage(index, builderForValue.build());
-        }
+      public Builder clearFieldName() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        fieldName_ = getDefaultInstance().getFieldName();
+        onChanged();
         return this;
       }
-      public Builder addSorter(com.alicloud.openservices.tablestore.core.protocol.Search.Sorter value) {
-        if (sorterBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSorterIsMutable();
-          sorter_.add(value);
-          onChanged();
-        } else {
-          sorterBuilder_.addMessage(value);
-        }
-        return this;
+      void setFieldName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        fieldName_ = value;
+        onChanged();
       }
-      public Builder addSorter(
-          int index, com.alicloud.openservices.tablestore.core.protocol.Search.Sorter value) {
-        if (sorterBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSorterIsMutable();
-          sorter_.add(index, value);
-          onChanged();
-        } else {
-          sorterBuilder_.addMessage(index, value);
-        }
-        return this;
+      
+      // repeated string points = 2;
+      private com.google.protobuf.LazyStringList points_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensurePointsIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          points_ = new com.google.protobuf.LazyStringArrayList(points_);
+          bitField0_ |= 0x00000002;
+         }
       }
-      public Builder addSorter(
-          com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder builderForValue) {
-        if (sorterBuilder_ == null) {
-          ensureSorterIsMutable();
-          sorter_.add(builderForValue.build());
-          onChanged();
-        } else {
-          sorterBuilder_.addMessage(builderForValue.build());
-        }
+      public java.util.List<String>
+          getPointsList() {
+        return java.util.Collections.unmodifiableList(points_);
+      }
+      public int getPointsCount() {
+        return points_.size();
+      }
+      public String getPoints(int index) {
+        return points_.get(index);
+      }
+      public Builder setPoints(
+          int index, String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensurePointsIsMutable();
+        points_.set(index, value);
+        onChanged();
         return this;
       }
-      public Builder addSorter(
-          int index, com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder builderForValue) {
-        if (sorterBuilder_ == null) {
-          ensureSorterIsMutable();
-          sorter_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          sorterBuilder_.addMessage(index, builderForValue.build());
-        }
+      public Builder addPoints(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensurePointsIsMutable();
+        points_.add(value);
+        onChanged();
         return this;
       }
-      public Builder addAllSorter(
-          java.lang.Iterable<? extends com.alicloud.openservices.tablestore.core.protocol.Search.Sorter> values) {
-        if (sorterBuilder_ == null) {
-          ensureSorterIsMutable();
-          super.addAll(values, sorter_);
-          onChanged();
-        } else {
-          sorterBuilder_.addAllMessages(values);
-        }
+      public Builder addAllPoints(
+          java.lang.Iterable<String> values) {
+        ensurePointsIsMutable();
+        super.addAll(values, points_);
+        onChanged();
         return this;
       }
-      public Builder clearSorter() {
-        if (sorterBuilder_ == null) {
-          sorter_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          sorterBuilder_.clear();
-        }
+      public Builder clearPoints() {
+        points_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        onChanged();
         return this;
       }
-      public Builder removeSorter(int index) {
-        if (sorterBuilder_ == null) {
-          ensureSorterIsMutable();
-          sorter_.remove(index);
+      void addPoints(com.google.protobuf.ByteString value) {
+        ensurePointsIsMutable();
+        points_.add(value);
+        onChanged();
+      }
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.SortOrder order = 3;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
+      public boolean hasOrder() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder getOrder() {
+        return order_;
+      }
+      public Builder setOrder(com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000004;
+        order_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearOrder() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        order_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortOrder.SORT_ORDER_ASC;
+        onChanged();
+        return this;
+      }
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.SortMode mode = 4;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.SortMode mode_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortMode.SORT_MODE_MIN;
+      public boolean hasMode() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SortMode getMode() {
+        return mode_;
+      }
+      public Builder setMode(com.alicloud.openservices.tablestore.core.protocol.Search.SortMode value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000008;
+        mode_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearMode() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        mode_ = com.alicloud.openservices.tablestore.core.protocol.Search.SortMode.SORT_MODE_MIN;
+        onChanged();
+        return this;
+      }
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.GeoDistanceType distance_type = 5;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType distanceType_ = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType.GEO_DISTANCE_ARC;
+      public boolean hasDistanceType() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType getDistanceType() {
+        return distanceType_;
+      }
+      public Builder setDistanceType(com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000010;
+        distanceType_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearDistanceType() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        distanceType_ = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceType.GEO_DISTANCE_ARC;
+        onChanged();
+        return this;
+      }
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.NestedFilter nested_filter = 6;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter nestedFilter_ = com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter, com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrBuilder> nestedFilterBuilder_;
+      public boolean hasNestedFilter() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter getNestedFilter() {
+        if (nestedFilterBuilder_ == null) {
+          return nestedFilter_;
+        } else {
+          return nestedFilterBuilder_.getMessage();
+        }
+      }
+      public Builder setNestedFilter(com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter value) {
+        if (nestedFilterBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          nestedFilter_ = value;
           onChanged();
         } else {
-          sorterBuilder_.remove(index);
+          nestedFilterBuilder_.setMessage(value);
         }
+        bitField0_ |= 0x00000020;
         return this;
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder getSorterBuilder(
-          int index) {
-        return getSorterFieldBuilder().getBuilder(index);
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder getSorterOrBuilder(
-          int index) {
-        if (sorterBuilder_ == null) {
-          return sorter_.get(index);  } else {
-          return sorterBuilder_.getMessageOrBuilder(index);
+      public Builder setNestedFilter(
+          com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.Builder builderForValue) {
+        if (nestedFilterBuilder_ == null) {
+          nestedFilter_ = builderForValue.build();
+          onChanged();
+        } else {
+          nestedFilterBuilder_.setMessage(builderForValue.build());
         }
+        bitField0_ |= 0x00000020;
+        return this;
       }
-      public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder> 
-           getSorterOrBuilderList() {
-        if (sorterBuilder_ != null) {
-          return sorterBuilder_.getMessageOrBuilderList();
+      public Builder mergeNestedFilter(com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter value) {
+        if (nestedFilterBuilder_ == null) {
+          if (((bitField0_ & 0x00000020) == 0x00000020) &&
+              nestedFilter_ != com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance()) {
+            nestedFilter_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.newBuilder(nestedFilter_).mergeFrom(value).buildPartial();
+          } else {
+            nestedFilter_ = value;
+          }
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(sorter_);
+          nestedFilterBuilder_.mergeFrom(value);
         }
+        bitField0_ |= 0x00000020;
+        return this;
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder addSorterBuilder() {
-        return getSorterFieldBuilder().addBuilder(
-            com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.getDefaultInstance());
+      public Builder clearNestedFilter() {
+        if (nestedFilterBuilder_ == null) {
+          nestedFilter_ = com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.getDefaultInstance();
+          onChanged();
+        } else {
+          nestedFilterBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000020);
+        return this;
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder addSorterBuilder(
-          int index) {
-        return getSorterFieldBuilder().addBuilder(
-            index, com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.getDefaultInstance());
+      public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.Builder getNestedFilterBuilder() {
+        bitField0_ |= 0x00000020;
+        onChanged();
+        return getNestedFilterFieldBuilder().getBuilder();
       }
-      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder> 
-           getSorterBuilderList() {
-        return getSorterFieldBuilder().getBuilderList();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrBuilder getNestedFilterOrBuilder() {
+        if (nestedFilterBuilder_ != null) {
+          return nestedFilterBuilder_.getMessageOrBuilder();
+        } else {
+          return nestedFilter_;
+        }
       }
-      private com.google.protobuf.RepeatedFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.Sorter, com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder> 
-          getSorterFieldBuilder() {
-        if (sorterBuilder_ == null) {
-          sorterBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
-              com.alicloud.openservices.tablestore.core.protocol.Search.Sorter, com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder>(
-                  sorter_,
-                  ((bitField0_ & 0x00000001) == 0x00000001),
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter, com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrBuilder> 
+          getNestedFilterFieldBuilder() {
+        if (nestedFilterBuilder_ == null) {
+          nestedFilterBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter, com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilterOrBuilder>(
+                  nestedFilter_,
                   getParentForChildren(),
                   isClean());
-          sorter_ = null;
+          nestedFilter_ = null;
         }
-        return sorterBuilder_;
+        return nestedFilterBuilder_;
       }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.Sort)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.GeoDistanceSort)
     }
     
     static {
-      defaultInstance = new Sort(true);
+      defaultInstance = new GeoDistanceSort(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.Sort)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.GeoDistanceSort)
   }
   
-  public interface SearchQueryOrBuilder
+  public interface SorterOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
-    // optional int32 offset = 1;
-    boolean hasOffset();
-    int getOffset();
-    
-    // optional int32 limit = 2;
-    boolean hasLimit();
-    int getLimit();
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.Query query = 4;
-    boolean hasQuery();
-    com.alicloud.openservices.tablestore.core.protocol.Search.Query getQuery();
-    com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder getQueryOrBuilder();
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.Collapse collapse = 5;
-    boolean hasCollapse();
-    com.alicloud.openservices.tablestore.core.protocol.Search.Collapse getCollapse();
-    com.alicloud.openservices.tablestore.core.protocol.Search.CollapseOrBuilder getCollapseOrBuilder();
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.Sort sort = 6;
-    boolean hasSort();
-    com.alicloud.openservices.tablestore.core.protocol.Search.Sort getSort();
-    com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder getSortOrBuilder();
+    // optional .com.alicloud.openservices.tablestore.core.protocol.FieldSort field_sort = 1;
+    boolean hasFieldSort();
+    com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort getFieldSort();
+    com.alicloud.openservices.tablestore.core.protocol.Search.FieldSortOrBuilder getFieldSortOrBuilder();
     
-    // optional bool getTotalCount = 8;
-    boolean hasGetTotalCount();
-    boolean getGetTotalCount();
+    // optional .com.alicloud.openservices.tablestore.core.protocol.GeoDistanceSort geo_distance_sort = 2;
+    boolean hasGeoDistanceSort();
+    com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort getGeoDistanceSort();
+    com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSortOrBuilder getGeoDistanceSortOrBuilder();
     
-    // optional bytes token = 9;
-    boolean hasToken();
-    com.google.protobuf.ByteString getToken();
+    // optional .com.alicloud.openservices.tablestore.core.protocol.ScoreSort score_sort = 3;
+    boolean hasScoreSort();
+    com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort getScoreSort();
+    com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSortOrBuilder getScoreSortOrBuilder();
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.Aggregations aggs = 10;
-    boolean hasAggs();
-    com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations getAggs();
-    com.alicloud.openservices.tablestore.core.protocol.Search.AggregationsOrBuilder getAggsOrBuilder();
+    // optional .com.alicloud.openservices.tablestore.core.protocol.PrimaryKeySort pk_sort = 4;
+    boolean hasPkSort();
+    com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort getPkSort();
+    com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySortOrBuilder getPkSortOrBuilder();
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.GroupBys group_bys = 11;
-    boolean hasGroupBys();
-    com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys getGroupBys();
-    com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuilder getGroupBysOrBuilder();
+    // optional .com.alicloud.openservices.tablestore.core.protocol.DocSort doc_sort = 5;
+    boolean hasDocSort();
+    com.alicloud.openservices.tablestore.core.protocol.Search.DocSort getDocSort();
+    com.alicloud.openservices.tablestore.core.protocol.Search.DocSortOrBuilder getDocSortOrBuilder();
   }
-  public static final class SearchQuery extends
+  public static final class Sorter extends
       com.google.protobuf.GeneratedMessage
-      implements SearchQueryOrBuilder {
-    // Use SearchQuery.newBuilder() to construct.
-    private SearchQuery(Builder builder) {
+      implements SorterOrBuilder {
+    // Use Sorter.newBuilder() to construct.
+    private Sorter(Builder builder) {
       super(builder);
     }
-    private SearchQuery(boolean noInit) {}
+    private Sorter(boolean noInit) {}
     
-    private static final SearchQuery defaultInstance;
-    public static SearchQuery getDefaultInstance() {
+    private static final Sorter defaultInstance;
+    public static Sorter getDefaultInstance() {
       return defaultInstance;
     }
     
-    public SearchQuery getDefaultInstanceForType() {
+    public Sorter getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchQuery_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Sorter_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchQuery_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Sorter_fieldAccessorTable;
     }
     
     private int bitField0_;
-    // optional int32 offset = 1;
-    public static final int OFFSET_FIELD_NUMBER = 1;
-    private int offset_;
-    public boolean hasOffset() {
+    // optional .com.alicloud.openservices.tablestore.core.protocol.FieldSort field_sort = 1;
+    public static final int FIELD_SORT_FIELD_NUMBER = 1;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort fieldSort_;
+    public boolean hasFieldSort() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public int getOffset() {
-      return offset_;
+    public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort getFieldSort() {
+      return fieldSort_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSortOrBuilder getFieldSortOrBuilder() {
+      return fieldSort_;
     }
     
-    // optional int32 limit = 2;
-    public static final int LIMIT_FIELD_NUMBER = 2;
-    private int limit_;
-    public boolean hasLimit() {
+    // optional .com.alicloud.openservices.tablestore.core.protocol.GeoDistanceSort geo_distance_sort = 2;
+    public static final int GEO_DISTANCE_SORT_FIELD_NUMBER = 2;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort geoDistanceSort_;
+    public boolean hasGeoDistanceSort() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
-    public int getLimit() {
-      return limit_;
+    public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort getGeoDistanceSort() {
+      return geoDistanceSort_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSortOrBuilder getGeoDistanceSortOrBuilder() {
+      return geoDistanceSort_;
     }
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.Query query = 4;
-    public static final int QUERY_FIELD_NUMBER = 4;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.Query query_;
-    public boolean hasQuery() {
+    // optional .com.alicloud.openservices.tablestore.core.protocol.ScoreSort score_sort = 3;
+    public static final int SCORE_SORT_FIELD_NUMBER = 3;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort scoreSort_;
+    public boolean hasScoreSort() {
       return ((bitField0_ & 0x00000004) == 0x00000004);
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.Query getQuery() {
-      return query_;
+    public com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort getScoreSort() {
+      return scoreSort_;
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder getQueryOrBuilder() {
-      return query_;
+    public com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSortOrBuilder getScoreSortOrBuilder() {
+      return scoreSort_;
     }
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.Collapse collapse = 5;
-    public static final int COLLAPSE_FIELD_NUMBER = 5;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.Collapse collapse_;
-    public boolean hasCollapse() {
+    // optional .com.alicloud.openservices.tablestore.core.protocol.PrimaryKeySort pk_sort = 4;
+    public static final int PK_SORT_FIELD_NUMBER = 4;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort pkSort_;
+    public boolean hasPkSort() {
       return ((bitField0_ & 0x00000008) == 0x00000008);
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.Collapse getCollapse() {
-      return collapse_;
+    public com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort getPkSort() {
+      return pkSort_;
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.CollapseOrBuilder getCollapseOrBuilder() {
-      return collapse_;
+    public com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySortOrBuilder getPkSortOrBuilder() {
+      return pkSort_;
     }
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.Sort sort = 6;
-    public static final int SORT_FIELD_NUMBER = 6;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.Sort sort_;
-    public boolean hasSort() {
+    // optional .com.alicloud.openservices.tablestore.core.protocol.DocSort doc_sort = 5;
+    public static final int DOC_SORT_FIELD_NUMBER = 5;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.DocSort docSort_;
+    public boolean hasDocSort() {
       return ((bitField0_ & 0x00000010) == 0x00000010);
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.Sort getSort() {
-      return sort_;
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder getSortOrBuilder() {
-      return sort_;
-    }
-    
-    // optional bool getTotalCount = 8;
-    public static final int GETTOTALCOUNT_FIELD_NUMBER = 8;
-    private boolean getTotalCount_;
-    public boolean hasGetTotalCount() {
-      return ((bitField0_ & 0x00000020) == 0x00000020);
-    }
-    public boolean getGetTotalCount() {
-      return getTotalCount_;
-    }
-    
-    // optional bytes token = 9;
-    public static final int TOKEN_FIELD_NUMBER = 9;
-    private com.google.protobuf.ByteString token_;
-    public boolean hasToken() {
-      return ((bitField0_ & 0x00000040) == 0x00000040);
-    }
-    public com.google.protobuf.ByteString getToken() {
-      return token_;
-    }
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.Aggregations aggs = 10;
-    public static final int AGGS_FIELD_NUMBER = 10;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations aggs_;
-    public boolean hasAggs() {
-      return ((bitField0_ & 0x00000080) == 0x00000080);
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations getAggs() {
-      return aggs_;
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.AggregationsOrBuilder getAggsOrBuilder() {
-      return aggs_;
-    }
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.GroupBys group_bys = 11;
-    public static final int GROUP_BYS_FIELD_NUMBER = 11;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys groupBys_;
-    public boolean hasGroupBys() {
-      return ((bitField0_ & 0x00000100) == 0x00000100);
+    public com.alicloud.openservices.tablestore.core.protocol.Search.DocSort getDocSort() {
+      return docSort_;
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys getGroupBys() {
-      return groupBys_;
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuilder getGroupBysOrBuilder() {
-      return groupBys_;
+    public com.alicloud.openservices.tablestore.core.protocol.Search.DocSortOrBuilder getDocSortOrBuilder() {
+      return docSort_;
     }
     
     private void initFields() {
-      offset_ = 0;
-      limit_ = 0;
-      query_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
-      collapse_ = com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.getDefaultInstance();
-      sort_ = com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance();
-      getTotalCount_ = false;
-      token_ = com.google.protobuf.ByteString.EMPTY;
-      aggs_ = com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.getDefaultInstance();
-      groupBys_ = com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.getDefaultInstance();
+      fieldSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.getDefaultInstance();
+      geoDistanceSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.getDefaultInstance();
+      scoreSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.getDefaultInstance();
+      pkSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.getDefaultInstance();
+      docSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.getDefaultInstance();
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -63415,31 +64485,19 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeInt32(1, offset_);
+        output.writeMessage(1, fieldSort_);
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeInt32(2, limit_);
+        output.writeMessage(2, geoDistanceSort_);
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeMessage(4, query_);
+        output.writeMessage(3, scoreSort_);
       }
       if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeMessage(5, collapse_);
+        output.writeMessage(4, pkSort_);
       }
       if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        output.writeMessage(6, sort_);
-      }
-      if (((bitField0_ & 0x00000020) == 0x00000020)) {
-        output.writeBool(8, getTotalCount_);
-      }
-      if (((bitField0_ & 0x00000040) == 0x00000040)) {
-        output.writeBytes(9, token_);
-      }
-      if (((bitField0_ & 0x00000080) == 0x00000080)) {
-        output.writeMessage(10, aggs_);
-      }
-      if (((bitField0_ & 0x00000100) == 0x00000100)) {
-        output.writeMessage(11, groupBys_);
+        output.writeMessage(5, docSort_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -63452,39 +64510,23 @@ public int getSerializedSize() {
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(1, offset_);
+          .computeMessageSize(1, fieldSort_);
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(2, limit_);
+          .computeMessageSize(2, geoDistanceSort_);
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, query_);
+          .computeMessageSize(3, scoreSort_);
       }
       if (((bitField0_ & 0x00000008) == 0x00000008)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, collapse_);
+          .computeMessageSize(4, pkSort_);
       }
       if (((bitField0_ & 0x00000010) == 0x00000010)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, sort_);
-      }
-      if (((bitField0_ & 0x00000020) == 0x00000020)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(8, getTotalCount_);
-      }
-      if (((bitField0_ & 0x00000040) == 0x00000040)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(9, token_);
-      }
-      if (((bitField0_ & 0x00000080) == 0x00000080)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(10, aggs_);
-      }
-      if (((bitField0_ & 0x00000100) == 0x00000100)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(11, groupBys_);
+          .computeMessageSize(5, docSort_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -63498,41 +64540,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -63541,7 +64583,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQu
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -63552,12 +64594,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQu
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sorter parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -63567,7 +64609,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQu
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.Sorter prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -63580,18 +64622,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.SearchQueryOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchQuery_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Sorter_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchQuery_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Sorter_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -63602,11 +64644,11 @@ private Builder(BuilderParent parent) {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getQueryFieldBuilder();
-          getCollapseFieldBuilder();
-          getSortFieldBuilder();
-          getAggsFieldBuilder();
-          getGroupBysFieldBuilder();
+          getFieldSortFieldBuilder();
+          getGeoDistanceSortFieldBuilder();
+          getScoreSortFieldBuilder();
+          getPkSortFieldBuilder();
+          getDocSortFieldBuilder();
         }
       }
       private static Builder create() {
@@ -63615,44 +64657,36 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        offset_ = 0;
+        if (fieldSortBuilder_ == null) {
+          fieldSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.getDefaultInstance();
+        } else {
+          fieldSortBuilder_.clear();
+        }
         bitField0_ = (bitField0_ & ~0x00000001);
-        limit_ = 0;
+        if (geoDistanceSortBuilder_ == null) {
+          geoDistanceSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.getDefaultInstance();
+        } else {
+          geoDistanceSortBuilder_.clear();
+        }
         bitField0_ = (bitField0_ & ~0x00000002);
-        if (queryBuilder_ == null) {
-          query_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
+        if (scoreSortBuilder_ == null) {
+          scoreSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.getDefaultInstance();
         } else {
-          queryBuilder_.clear();
+          scoreSortBuilder_.clear();
         }
         bitField0_ = (bitField0_ & ~0x00000004);
-        if (collapseBuilder_ == null) {
-          collapse_ = com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.getDefaultInstance();
+        if (pkSortBuilder_ == null) {
+          pkSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.getDefaultInstance();
         } else {
-          collapseBuilder_.clear();
+          pkSortBuilder_.clear();
         }
         bitField0_ = (bitField0_ & ~0x00000008);
-        if (sortBuilder_ == null) {
-          sort_ = com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance();
+        if (docSortBuilder_ == null) {
+          docSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.getDefaultInstance();
         } else {
-          sortBuilder_.clear();
+          docSortBuilder_.clear();
         }
         bitField0_ = (bitField0_ & ~0x00000010);
-        getTotalCount_ = false;
-        bitField0_ = (bitField0_ & ~0x00000020);
-        token_ = com.google.protobuf.ByteString.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000040);
-        if (aggsBuilder_ == null) {
-          aggs_ = com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.getDefaultInstance();
-        } else {
-          aggsBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000080);
-        if (groupBysBuilder_ == null) {
-          groupBys_ = com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.getDefaultInstance();
-        } else {
-          groupBysBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000100);
         return this;
       }
       
@@ -63662,24 +64696,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Sorter getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Sorter build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.Sorter result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.Sorter buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.Sorter result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -63687,65 +64721,49 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery bu
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery result = new com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Sorter buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.Sorter result = new com.alicloud.openservices.tablestore.core.protocol.Search.Sorter(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        result.offset_ = offset_;
+        if (fieldSortBuilder_ == null) {
+          result.fieldSort_ = fieldSort_;
+        } else {
+          result.fieldSort_ = fieldSortBuilder_.build();
+        }
         if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
           to_bitField0_ |= 0x00000002;
         }
-        result.limit_ = limit_;
+        if (geoDistanceSortBuilder_ == null) {
+          result.geoDistanceSort_ = geoDistanceSort_;
+        } else {
+          result.geoDistanceSort_ = geoDistanceSortBuilder_.build();
+        }
         if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
           to_bitField0_ |= 0x00000004;
         }
-        if (queryBuilder_ == null) {
-          result.query_ = query_;
+        if (scoreSortBuilder_ == null) {
+          result.scoreSort_ = scoreSort_;
         } else {
-          result.query_ = queryBuilder_.build();
+          result.scoreSort_ = scoreSortBuilder_.build();
         }
         if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
           to_bitField0_ |= 0x00000008;
         }
-        if (collapseBuilder_ == null) {
-          result.collapse_ = collapse_;
+        if (pkSortBuilder_ == null) {
+          result.pkSort_ = pkSort_;
         } else {
-          result.collapse_ = collapseBuilder_.build();
+          result.pkSort_ = pkSortBuilder_.build();
         }
         if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
           to_bitField0_ |= 0x00000010;
         }
-        if (sortBuilder_ == null) {
-          result.sort_ = sort_;
-        } else {
-          result.sort_ = sortBuilder_.build();
-        }
-        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
-          to_bitField0_ |= 0x00000020;
-        }
-        result.getTotalCount_ = getTotalCount_;
-        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
-          to_bitField0_ |= 0x00000040;
-        }
-        result.token_ = token_;
-        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
-          to_bitField0_ |= 0x00000080;
-        }
-        if (aggsBuilder_ == null) {
-          result.aggs_ = aggs_;
-        } else {
-          result.aggs_ = aggsBuilder_.build();
-        }
-        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
-          to_bitField0_ |= 0x00000100;
-        }
-        if (groupBysBuilder_ == null) {
-          result.groupBys_ = groupBys_;
+        if (docSortBuilder_ == null) {
+          result.docSort_ = docSort_;
         } else {
-          result.groupBys_ = groupBysBuilder_.build();
+          result.docSort_ = docSortBuilder_.build();
         }
         result.bitField0_ = to_bitField0_;
         onBuilt();
@@ -63753,42 +64771,30 @@ public com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery bui
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.Sorter) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.Sorter)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery.getDefaultInstance()) return this;
-        if (other.hasOffset()) {
-          setOffset(other.getOffset());
-        }
-        if (other.hasLimit()) {
-          setLimit(other.getLimit());
-        }
-        if (other.hasQuery()) {
-          mergeQuery(other.getQuery());
-        }
-        if (other.hasCollapse()) {
-          mergeCollapse(other.getCollapse());
-        }
-        if (other.hasSort()) {
-          mergeSort(other.getSort());
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.Sorter other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.getDefaultInstance()) return this;
+        if (other.hasFieldSort()) {
+          mergeFieldSort(other.getFieldSort());
         }
-        if (other.hasGetTotalCount()) {
-          setGetTotalCount(other.getGetTotalCount());
+        if (other.hasGeoDistanceSort()) {
+          mergeGeoDistanceSort(other.getGeoDistanceSort());
         }
-        if (other.hasToken()) {
-          setToken(other.getToken());
+        if (other.hasScoreSort()) {
+          mergeScoreSort(other.getScoreSort());
         }
-        if (other.hasAggs()) {
-          mergeAggs(other.getAggs());
+        if (other.hasPkSort()) {
+          mergePkSort(other.getPkSort());
         }
-        if (other.hasGroupBys()) {
-          mergeGroupBys(other.getGroupBys());
+        if (other.hasDocSort()) {
+          mergeDocSort(other.getDocSort());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -63821,69 +64827,49 @@ public Builder mergeFrom(
               }
               break;
             }
-            case 8: {
-              bitField0_ |= 0x00000001;
-              offset_ = input.readInt32();
-              break;
-            }
-            case 16: {
-              bitField0_ |= 0x00000002;
-              limit_ = input.readInt32();
-              break;
-            }
-            case 34: {
-              com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.Query.newBuilder();
-              if (hasQuery()) {
-                subBuilder.mergeFrom(getQuery());
+            case 10: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.newBuilder();
+              if (hasFieldSort()) {
+                subBuilder.mergeFrom(getFieldSort());
               }
               input.readMessage(subBuilder, extensionRegistry);
-              setQuery(subBuilder.buildPartial());
+              setFieldSort(subBuilder.buildPartial());
               break;
             }
-            case 42: {
-              com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.newBuilder();
-              if (hasCollapse()) {
-                subBuilder.mergeFrom(getCollapse());
+            case 18: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.newBuilder();
+              if (hasGeoDistanceSort()) {
+                subBuilder.mergeFrom(getGeoDistanceSort());
               }
               input.readMessage(subBuilder, extensionRegistry);
-              setCollapse(subBuilder.buildPartial());
+              setGeoDistanceSort(subBuilder.buildPartial());
               break;
             }
-            case 50: {
-              com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.Sort.newBuilder();
-              if (hasSort()) {
-                subBuilder.mergeFrom(getSort());
+            case 26: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.newBuilder();
+              if (hasScoreSort()) {
+                subBuilder.mergeFrom(getScoreSort());
               }
               input.readMessage(subBuilder, extensionRegistry);
-              setSort(subBuilder.buildPartial());
-              break;
-            }
-            case 64: {
-              bitField0_ |= 0x00000020;
-              getTotalCount_ = input.readBool();
-              break;
-            }
-            case 74: {
-              bitField0_ |= 0x00000040;
-              token_ = input.readBytes();
+              setScoreSort(subBuilder.buildPartial());
               break;
             }
-            case 82: {
-              com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.newBuilder();
-              if (hasAggs()) {
-                subBuilder.mergeFrom(getAggs());
+            case 34: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.newBuilder();
+              if (hasPkSort()) {
+                subBuilder.mergeFrom(getPkSort());
               }
               input.readMessage(subBuilder, extensionRegistry);
-              setAggs(subBuilder.buildPartial());
+              setPkSort(subBuilder.buildPartial());
               break;
             }
-            case 90: {
-              com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.newBuilder();
-              if (hasGroupBys()) {
-                subBuilder.mergeFrom(getGroupBys());
+            case 42: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.newBuilder();
+              if (hasDocSort()) {
+                subBuilder.mergeFrom(getDocSort());
               }
               input.readMessage(subBuilder, extensionRegistry);
-              setGroupBys(subBuilder.buildPartial());
+              setDocSort(subBuilder.buildPartial());
               break;
             }
           }
@@ -63892,622 +64878,531 @@ public Builder mergeFrom(
       
       private int bitField0_;
       
-      // optional int32 offset = 1;
-      private int offset_ ;
-      public boolean hasOffset() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
-      }
-      public int getOffset() {
-        return offset_;
-      }
-      public Builder setOffset(int value) {
-        bitField0_ |= 0x00000001;
-        offset_ = value;
-        onChanged();
-        return this;
-      }
-      public Builder clearOffset() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        offset_ = 0;
-        onChanged();
-        return this;
-      }
-      
-      // optional int32 limit = 2;
-      private int limit_ ;
-      public boolean hasLimit() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
-      }
-      public int getLimit() {
-        return limit_;
-      }
-      public Builder setLimit(int value) {
-        bitField0_ |= 0x00000002;
-        limit_ = value;
-        onChanged();
-        return this;
-      }
-      public Builder clearLimit() {
-        bitField0_ = (bitField0_ & ~0x00000002);
-        limit_ = 0;
-        onChanged();
-        return this;
-      }
-      
-      // optional .com.alicloud.openservices.tablestore.core.protocol.Query query = 4;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.Query query_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
+      // optional .com.alicloud.openservices.tablestore.core.protocol.FieldSort field_sort = 1;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort fieldSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.Query, com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder> queryBuilder_;
-      public boolean hasQuery() {
-        return ((bitField0_ & 0x00000004) == 0x00000004);
+          com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSortOrBuilder> fieldSortBuilder_;
+      public boolean hasFieldSort() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Query getQuery() {
-        if (queryBuilder_ == null) {
-          return query_;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort getFieldSort() {
+        if (fieldSortBuilder_ == null) {
+          return fieldSort_;
         } else {
-          return queryBuilder_.getMessage();
+          return fieldSortBuilder_.getMessage();
         }
       }
-      public Builder setQuery(com.alicloud.openservices.tablestore.core.protocol.Search.Query value) {
-        if (queryBuilder_ == null) {
+      public Builder setFieldSort(com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort value) {
+        if (fieldSortBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          query_ = value;
+          fieldSort_ = value;
           onChanged();
         } else {
-          queryBuilder_.setMessage(value);
+          fieldSortBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000004;
+        bitField0_ |= 0x00000001;
         return this;
       }
-      public Builder setQuery(
-          com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder builderForValue) {
-        if (queryBuilder_ == null) {
-          query_ = builderForValue.build();
+      public Builder setFieldSort(
+          com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.Builder builderForValue) {
+        if (fieldSortBuilder_ == null) {
+          fieldSort_ = builderForValue.build();
           onChanged();
         } else {
-          queryBuilder_.setMessage(builderForValue.build());
+          fieldSortBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000004;
+        bitField0_ |= 0x00000001;
         return this;
       }
-      public Builder mergeQuery(com.alicloud.openservices.tablestore.core.protocol.Search.Query value) {
-        if (queryBuilder_ == null) {
-          if (((bitField0_ & 0x00000004) == 0x00000004) &&
-              query_ != com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance()) {
-            query_ =
-              com.alicloud.openservices.tablestore.core.protocol.Search.Query.newBuilder(query_).mergeFrom(value).buildPartial();
+      public Builder mergeFieldSort(com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort value) {
+        if (fieldSortBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) == 0x00000001) &&
+              fieldSort_ != com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.getDefaultInstance()) {
+            fieldSort_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.newBuilder(fieldSort_).mergeFrom(value).buildPartial();
           } else {
-            query_ = value;
+            fieldSort_ = value;
           }
           onChanged();
         } else {
-          queryBuilder_.mergeFrom(value);
+          fieldSortBuilder_.mergeFrom(value);
         }
-        bitField0_ |= 0x00000004;
+        bitField0_ |= 0x00000001;
         return this;
       }
-      public Builder clearQuery() {
-        if (queryBuilder_ == null) {
-          query_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
+      public Builder clearFieldSort() {
+        if (fieldSortBuilder_ == null) {
+          fieldSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.getDefaultInstance();
           onChanged();
         } else {
-          queryBuilder_.clear();
+          fieldSortBuilder_.clear();
         }
-        bitField0_ = (bitField0_ & ~0x00000004);
+        bitField0_ = (bitField0_ & ~0x00000001);
         return this;
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder getQueryBuilder() {
-        bitField0_ |= 0x00000004;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.Builder getFieldSortBuilder() {
+        bitField0_ |= 0x00000001;
         onChanged();
-        return getQueryFieldBuilder().getBuilder();
+        return getFieldSortFieldBuilder().getBuilder();
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder getQueryOrBuilder() {
-        if (queryBuilder_ != null) {
-          return queryBuilder_.getMessageOrBuilder();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSortOrBuilder getFieldSortOrBuilder() {
+        if (fieldSortBuilder_ != null) {
+          return fieldSortBuilder_.getMessageOrBuilder();
         } else {
-          return query_;
+          return fieldSort_;
         }
       }
       private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.Query, com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder> 
-          getQueryFieldBuilder() {
-        if (queryBuilder_ == null) {
-          queryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              com.alicloud.openservices.tablestore.core.protocol.Search.Query, com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder>(
-                  query_,
+          com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSortOrBuilder> 
+          getFieldSortFieldBuilder() {
+        if (fieldSortBuilder_ == null) {
+          fieldSortBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSortOrBuilder>(
+                  fieldSort_,
                   getParentForChildren(),
                   isClean());
-          query_ = null;
+          fieldSort_ = null;
         }
-        return queryBuilder_;
+        return fieldSortBuilder_;
       }
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.Collapse collapse = 5;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.Collapse collapse_ = com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.getDefaultInstance();
+      // optional .com.alicloud.openservices.tablestore.core.protocol.GeoDistanceSort geo_distance_sort = 2;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort geoDistanceSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.Collapse, com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.CollapseOrBuilder> collapseBuilder_;
-      public boolean hasCollapse() {
-        return ((bitField0_ & 0x00000008) == 0x00000008);
+          com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort, com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSortOrBuilder> geoDistanceSortBuilder_;
+      public boolean hasGeoDistanceSort() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Collapse getCollapse() {
-        if (collapseBuilder_ == null) {
-          return collapse_;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort getGeoDistanceSort() {
+        if (geoDistanceSortBuilder_ == null) {
+          return geoDistanceSort_;
         } else {
-          return collapseBuilder_.getMessage();
+          return geoDistanceSortBuilder_.getMessage();
         }
       }
-      public Builder setCollapse(com.alicloud.openservices.tablestore.core.protocol.Search.Collapse value) {
-        if (collapseBuilder_ == null) {
+      public Builder setGeoDistanceSort(com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort value) {
+        if (geoDistanceSortBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          collapse_ = value;
+          geoDistanceSort_ = value;
           onChanged();
         } else {
-          collapseBuilder_.setMessage(value);
+          geoDistanceSortBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000008;
+        bitField0_ |= 0x00000002;
         return this;
       }
-      public Builder setCollapse(
-          com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.Builder builderForValue) {
-        if (collapseBuilder_ == null) {
-          collapse_ = builderForValue.build();
+      public Builder setGeoDistanceSort(
+          com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.Builder builderForValue) {
+        if (geoDistanceSortBuilder_ == null) {
+          geoDistanceSort_ = builderForValue.build();
           onChanged();
         } else {
-          collapseBuilder_.setMessage(builderForValue.build());
+          geoDistanceSortBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000008;
+        bitField0_ |= 0x00000002;
         return this;
       }
-      public Builder mergeCollapse(com.alicloud.openservices.tablestore.core.protocol.Search.Collapse value) {
-        if (collapseBuilder_ == null) {
-          if (((bitField0_ & 0x00000008) == 0x00000008) &&
-              collapse_ != com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.getDefaultInstance()) {
-            collapse_ =
-              com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.newBuilder(collapse_).mergeFrom(value).buildPartial();
+      public Builder mergeGeoDistanceSort(com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort value) {
+        if (geoDistanceSortBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) == 0x00000002) &&
+              geoDistanceSort_ != com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.getDefaultInstance()) {
+            geoDistanceSort_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.newBuilder(geoDistanceSort_).mergeFrom(value).buildPartial();
           } else {
-            collapse_ = value;
+            geoDistanceSort_ = value;
           }
           onChanged();
         } else {
-          collapseBuilder_.mergeFrom(value);
+          geoDistanceSortBuilder_.mergeFrom(value);
         }
-        bitField0_ |= 0x00000008;
+        bitField0_ |= 0x00000002;
         return this;
       }
-      public Builder clearCollapse() {
-        if (collapseBuilder_ == null) {
-          collapse_ = com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.getDefaultInstance();
+      public Builder clearGeoDistanceSort() {
+        if (geoDistanceSortBuilder_ == null) {
+          geoDistanceSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.getDefaultInstance();
           onChanged();
         } else {
-          collapseBuilder_.clear();
+          geoDistanceSortBuilder_.clear();
         }
-        bitField0_ = (bitField0_ & ~0x00000008);
+        bitField0_ = (bitField0_ & ~0x00000002);
         return this;
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.Builder getCollapseBuilder() {
-        bitField0_ |= 0x00000008;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.Builder getGeoDistanceSortBuilder() {
+        bitField0_ |= 0x00000002;
         onChanged();
-        return getCollapseFieldBuilder().getBuilder();
+        return getGeoDistanceSortFieldBuilder().getBuilder();
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.CollapseOrBuilder getCollapseOrBuilder() {
-        if (collapseBuilder_ != null) {
-          return collapseBuilder_.getMessageOrBuilder();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSortOrBuilder getGeoDistanceSortOrBuilder() {
+        if (geoDistanceSortBuilder_ != null) {
+          return geoDistanceSortBuilder_.getMessageOrBuilder();
         } else {
-          return collapse_;
+          return geoDistanceSort_;
         }
       }
       private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.Collapse, com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.CollapseOrBuilder> 
-          getCollapseFieldBuilder() {
-        if (collapseBuilder_ == null) {
-          collapseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              com.alicloud.openservices.tablestore.core.protocol.Search.Collapse, com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.CollapseOrBuilder>(
-                  collapse_,
+          com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort, com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSortOrBuilder> 
+          getGeoDistanceSortFieldBuilder() {
+        if (geoDistanceSortBuilder_ == null) {
+          geoDistanceSortBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort, com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSortOrBuilder>(
+                  geoDistanceSort_,
                   getParentForChildren(),
                   isClean());
-          collapse_ = null;
+          geoDistanceSort_ = null;
         }
-        return collapseBuilder_;
+        return geoDistanceSortBuilder_;
       }
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.Sort sort = 6;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.Sort sort_ = com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance();
+      // optional .com.alicloud.openservices.tablestore.core.protocol.ScoreSort score_sort = 3;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort scoreSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.Sort, com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder> sortBuilder_;
-      public boolean hasSort() {
-        return ((bitField0_ & 0x00000010) == 0x00000010);
+          com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort, com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSortOrBuilder> scoreSortBuilder_;
+      public boolean hasScoreSort() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Sort getSort() {
-        if (sortBuilder_ == null) {
-          return sort_;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort getScoreSort() {
+        if (scoreSortBuilder_ == null) {
+          return scoreSort_;
         } else {
-          return sortBuilder_.getMessage();
+          return scoreSortBuilder_.getMessage();
         }
       }
-      public Builder setSort(com.alicloud.openservices.tablestore.core.protocol.Search.Sort value) {
-        if (sortBuilder_ == null) {
+      public Builder setScoreSort(com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort value) {
+        if (scoreSortBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          sort_ = value;
+          scoreSort_ = value;
           onChanged();
         } else {
-          sortBuilder_.setMessage(value);
+          scoreSortBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000010;
+        bitField0_ |= 0x00000004;
         return this;
       }
-      public Builder setSort(
-          com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder builderForValue) {
-        if (sortBuilder_ == null) {
-          sort_ = builderForValue.build();
+      public Builder setScoreSort(
+          com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.Builder builderForValue) {
+        if (scoreSortBuilder_ == null) {
+          scoreSort_ = builderForValue.build();
           onChanged();
         } else {
-          sortBuilder_.setMessage(builderForValue.build());
+          scoreSortBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000010;
+        bitField0_ |= 0x00000004;
         return this;
       }
-      public Builder mergeSort(com.alicloud.openservices.tablestore.core.protocol.Search.Sort value) {
-        if (sortBuilder_ == null) {
-          if (((bitField0_ & 0x00000010) == 0x00000010) &&
-              sort_ != com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance()) {
-            sort_ =
-              com.alicloud.openservices.tablestore.core.protocol.Search.Sort.newBuilder(sort_).mergeFrom(value).buildPartial();
+      public Builder mergeScoreSort(com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort value) {
+        if (scoreSortBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) == 0x00000004) &&
+              scoreSort_ != com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.getDefaultInstance()) {
+            scoreSort_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.newBuilder(scoreSort_).mergeFrom(value).buildPartial();
           } else {
-            sort_ = value;
+            scoreSort_ = value;
           }
           onChanged();
         } else {
-          sortBuilder_.mergeFrom(value);
+          scoreSortBuilder_.mergeFrom(value);
         }
-        bitField0_ |= 0x00000010;
+        bitField0_ |= 0x00000004;
         return this;
       }
-      public Builder clearSort() {
-        if (sortBuilder_ == null) {
-          sort_ = com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance();
+      public Builder clearScoreSort() {
+        if (scoreSortBuilder_ == null) {
+          scoreSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.getDefaultInstance();
           onChanged();
         } else {
-          sortBuilder_.clear();
+          scoreSortBuilder_.clear();
         }
-        bitField0_ = (bitField0_ & ~0x00000010);
+        bitField0_ = (bitField0_ & ~0x00000004);
         return this;
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder getSortBuilder() {
-        bitField0_ |= 0x00000010;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.Builder getScoreSortBuilder() {
+        bitField0_ |= 0x00000004;
         onChanged();
-        return getSortFieldBuilder().getBuilder();
+        return getScoreSortFieldBuilder().getBuilder();
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder getSortOrBuilder() {
-        if (sortBuilder_ != null) {
-          return sortBuilder_.getMessageOrBuilder();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSortOrBuilder getScoreSortOrBuilder() {
+        if (scoreSortBuilder_ != null) {
+          return scoreSortBuilder_.getMessageOrBuilder();
         } else {
-          return sort_;
+          return scoreSort_;
         }
       }
       private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.Sort, com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder> 
-          getSortFieldBuilder() {
-        if (sortBuilder_ == null) {
-          sortBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              com.alicloud.openservices.tablestore.core.protocol.Search.Sort, com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder>(
-                  sort_,
+          com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort, com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSortOrBuilder> 
+          getScoreSortFieldBuilder() {
+        if (scoreSortBuilder_ == null) {
+          scoreSortBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort, com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSortOrBuilder>(
+                  scoreSort_,
                   getParentForChildren(),
                   isClean());
-          sort_ = null;
+          scoreSort_ = null;
         }
-        return sortBuilder_;
-      }
-      
-      // optional bool getTotalCount = 8;
-      private boolean getTotalCount_ ;
-      public boolean hasGetTotalCount() {
-        return ((bitField0_ & 0x00000020) == 0x00000020);
-      }
-      public boolean getGetTotalCount() {
-        return getTotalCount_;
-      }
-      public Builder setGetTotalCount(boolean value) {
-        bitField0_ |= 0x00000020;
-        getTotalCount_ = value;
-        onChanged();
-        return this;
-      }
-      public Builder clearGetTotalCount() {
-        bitField0_ = (bitField0_ & ~0x00000020);
-        getTotalCount_ = false;
-        onChanged();
-        return this;
-      }
-      
-      // optional bytes token = 9;
-      private com.google.protobuf.ByteString token_ = com.google.protobuf.ByteString.EMPTY;
-      public boolean hasToken() {
-        return ((bitField0_ & 0x00000040) == 0x00000040);
-      }
-      public com.google.protobuf.ByteString getToken() {
-        return token_;
-      }
-      public Builder setToken(com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000040;
-        token_ = value;
-        onChanged();
-        return this;
-      }
-      public Builder clearToken() {
-        bitField0_ = (bitField0_ & ~0x00000040);
-        token_ = getDefaultInstance().getToken();
-        onChanged();
-        return this;
+        return scoreSortBuilder_;
       }
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.Aggregations aggs = 10;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations aggs_ = com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.getDefaultInstance();
+      // optional .com.alicloud.openservices.tablestore.core.protocol.PrimaryKeySort pk_sort = 4;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort pkSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations, com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.AggregationsOrBuilder> aggsBuilder_;
-      public boolean hasAggs() {
-        return ((bitField0_ & 0x00000080) == 0x00000080);
+          com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort, com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySortOrBuilder> pkSortBuilder_;
+      public boolean hasPkSort() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations getAggs() {
-        if (aggsBuilder_ == null) {
-          return aggs_;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort getPkSort() {
+        if (pkSortBuilder_ == null) {
+          return pkSort_;
         } else {
-          return aggsBuilder_.getMessage();
+          return pkSortBuilder_.getMessage();
         }
       }
-      public Builder setAggs(com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations value) {
-        if (aggsBuilder_ == null) {
+      public Builder setPkSort(com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort value) {
+        if (pkSortBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          aggs_ = value;
+          pkSort_ = value;
           onChanged();
         } else {
-          aggsBuilder_.setMessage(value);
+          pkSortBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000080;
+        bitField0_ |= 0x00000008;
         return this;
       }
-      public Builder setAggs(
-          com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.Builder builderForValue) {
-        if (aggsBuilder_ == null) {
-          aggs_ = builderForValue.build();
+      public Builder setPkSort(
+          com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.Builder builderForValue) {
+        if (pkSortBuilder_ == null) {
+          pkSort_ = builderForValue.build();
           onChanged();
         } else {
-          aggsBuilder_.setMessage(builderForValue.build());
+          pkSortBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000080;
+        bitField0_ |= 0x00000008;
         return this;
       }
-      public Builder mergeAggs(com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations value) {
-        if (aggsBuilder_ == null) {
-          if (((bitField0_ & 0x00000080) == 0x00000080) &&
-              aggs_ != com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.getDefaultInstance()) {
-            aggs_ =
-              com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.newBuilder(aggs_).mergeFrom(value).buildPartial();
+      public Builder mergePkSort(com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort value) {
+        if (pkSortBuilder_ == null) {
+          if (((bitField0_ & 0x00000008) == 0x00000008) &&
+              pkSort_ != com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.getDefaultInstance()) {
+            pkSort_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.newBuilder(pkSort_).mergeFrom(value).buildPartial();
           } else {
-            aggs_ = value;
+            pkSort_ = value;
           }
           onChanged();
         } else {
-          aggsBuilder_.mergeFrom(value);
+          pkSortBuilder_.mergeFrom(value);
         }
-        bitField0_ |= 0x00000080;
+        bitField0_ |= 0x00000008;
         return this;
       }
-      public Builder clearAggs() {
-        if (aggsBuilder_ == null) {
-          aggs_ = com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.getDefaultInstance();
+      public Builder clearPkSort() {
+        if (pkSortBuilder_ == null) {
+          pkSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.getDefaultInstance();
           onChanged();
         } else {
-          aggsBuilder_.clear();
+          pkSortBuilder_.clear();
         }
-        bitField0_ = (bitField0_ & ~0x00000080);
+        bitField0_ = (bitField0_ & ~0x00000008);
         return this;
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.Builder getAggsBuilder() {
-        bitField0_ |= 0x00000080;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.Builder getPkSortBuilder() {
+        bitField0_ |= 0x00000008;
         onChanged();
-        return getAggsFieldBuilder().getBuilder();
+        return getPkSortFieldBuilder().getBuilder();
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.AggregationsOrBuilder getAggsOrBuilder() {
-        if (aggsBuilder_ != null) {
-          return aggsBuilder_.getMessageOrBuilder();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySortOrBuilder getPkSortOrBuilder() {
+        if (pkSortBuilder_ != null) {
+          return pkSortBuilder_.getMessageOrBuilder();
         } else {
-          return aggs_;
+          return pkSort_;
         }
       }
       private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations, com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.AggregationsOrBuilder> 
-          getAggsFieldBuilder() {
-        if (aggsBuilder_ == null) {
-          aggsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations, com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.AggregationsOrBuilder>(
-                  aggs_,
+          com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort, com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySortOrBuilder> 
+          getPkSortFieldBuilder() {
+        if (pkSortBuilder_ == null) {
+          pkSortBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort, com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySortOrBuilder>(
+                  pkSort_,
                   getParentForChildren(),
                   isClean());
-          aggs_ = null;
+          pkSort_ = null;
         }
-        return aggsBuilder_;
+        return pkSortBuilder_;
       }
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.GroupBys group_bys = 11;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys groupBys_ = com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.getDefaultInstance();
+      // optional .com.alicloud.openservices.tablestore.core.protocol.DocSort doc_sort = 5;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.DocSort docSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys, com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuilder> groupBysBuilder_;
-      public boolean hasGroupBys() {
-        return ((bitField0_ & 0x00000100) == 0x00000100);
+          com.alicloud.openservices.tablestore.core.protocol.Search.DocSort, com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.DocSortOrBuilder> docSortBuilder_;
+      public boolean hasDocSort() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys getGroupBys() {
-        if (groupBysBuilder_ == null) {
-          return groupBys_;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.DocSort getDocSort() {
+        if (docSortBuilder_ == null) {
+          return docSort_;
         } else {
-          return groupBysBuilder_.getMessage();
+          return docSortBuilder_.getMessage();
         }
       }
-      public Builder setGroupBys(com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys value) {
-        if (groupBysBuilder_ == null) {
+      public Builder setDocSort(com.alicloud.openservices.tablestore.core.protocol.Search.DocSort value) {
+        if (docSortBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          groupBys_ = value;
+          docSort_ = value;
           onChanged();
         } else {
-          groupBysBuilder_.setMessage(value);
+          docSortBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000100;
+        bitField0_ |= 0x00000010;
         return this;
       }
-      public Builder setGroupBys(
-          com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.Builder builderForValue) {
-        if (groupBysBuilder_ == null) {
-          groupBys_ = builderForValue.build();
+      public Builder setDocSort(
+          com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.Builder builderForValue) {
+        if (docSortBuilder_ == null) {
+          docSort_ = builderForValue.build();
           onChanged();
         } else {
-          groupBysBuilder_.setMessage(builderForValue.build());
+          docSortBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000100;
+        bitField0_ |= 0x00000010;
         return this;
       }
-      public Builder mergeGroupBys(com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys value) {
-        if (groupBysBuilder_ == null) {
-          if (((bitField0_ & 0x00000100) == 0x00000100) &&
-              groupBys_ != com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.getDefaultInstance()) {
-            groupBys_ =
-              com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.newBuilder(groupBys_).mergeFrom(value).buildPartial();
+      public Builder mergeDocSort(com.alicloud.openservices.tablestore.core.protocol.Search.DocSort value) {
+        if (docSortBuilder_ == null) {
+          if (((bitField0_ & 0x00000010) == 0x00000010) &&
+              docSort_ != com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.getDefaultInstance()) {
+            docSort_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.newBuilder(docSort_).mergeFrom(value).buildPartial();
           } else {
-            groupBys_ = value;
+            docSort_ = value;
           }
           onChanged();
         } else {
-          groupBysBuilder_.mergeFrom(value);
+          docSortBuilder_.mergeFrom(value);
         }
-        bitField0_ |= 0x00000100;
+        bitField0_ |= 0x00000010;
         return this;
       }
-      public Builder clearGroupBys() {
-        if (groupBysBuilder_ == null) {
-          groupBys_ = com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.getDefaultInstance();
+      public Builder clearDocSort() {
+        if (docSortBuilder_ == null) {
+          docSort_ = com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.getDefaultInstance();
           onChanged();
         } else {
-          groupBysBuilder_.clear();
+          docSortBuilder_.clear();
         }
-        bitField0_ = (bitField0_ & ~0x00000100);
+        bitField0_ = (bitField0_ & ~0x00000010);
         return this;
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.Builder getGroupBysBuilder() {
-        bitField0_ |= 0x00000100;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.Builder getDocSortBuilder() {
+        bitField0_ |= 0x00000010;
         onChanged();
-        return getGroupBysFieldBuilder().getBuilder();
+        return getDocSortFieldBuilder().getBuilder();
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuilder getGroupBysOrBuilder() {
-        if (groupBysBuilder_ != null) {
-          return groupBysBuilder_.getMessageOrBuilder();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.DocSortOrBuilder getDocSortOrBuilder() {
+        if (docSortBuilder_ != null) {
+          return docSortBuilder_.getMessageOrBuilder();
         } else {
-          return groupBys_;
+          return docSort_;
         }
       }
       private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys, com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuilder> 
-          getGroupBysFieldBuilder() {
-        if (groupBysBuilder_ == null) {
-          groupBysBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys, com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuilder>(
-                  groupBys_,
+          com.alicloud.openservices.tablestore.core.protocol.Search.DocSort, com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.DocSortOrBuilder> 
+          getDocSortFieldBuilder() {
+        if (docSortBuilder_ == null) {
+          docSortBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.DocSort, com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.DocSortOrBuilder>(
+                  docSort_,
                   getParentForChildren(),
                   isClean());
-          groupBys_ = null;
+          docSort_ = null;
         }
-        return groupBysBuilder_;
+        return docSortBuilder_;
       }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.SearchQuery)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.Sorter)
     }
     
     static {
-      defaultInstance = new SearchQuery(true);
+      defaultInstance = new Sorter(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.SearchQuery)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.Sorter)
   }
   
-  public interface ColumnsToGetOrBuilder
+  public interface SortOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.ColumnReturnType return_type = 1;
-    boolean hasReturnType();
-    com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType getReturnType();
-    
-    // repeated string column_names = 2;
-    java.util.List<String> getColumnNamesList();
-    int getColumnNamesCount();
-    String getColumnNames(int index);
+    // repeated .com.alicloud.openservices.tablestore.core.protocol.Sorter sorter = 1;
+    java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.Sorter> 
+        getSorterList();
+    com.alicloud.openservices.tablestore.core.protocol.Search.Sorter getSorter(int index);
+    int getSorterCount();
+    java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder> 
+        getSorterOrBuilderList();
+    com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder getSorterOrBuilder(
+        int index);
   }
-  public static final class ColumnsToGet extends
+  public static final class Sort extends
       com.google.protobuf.GeneratedMessage
-      implements ColumnsToGetOrBuilder {
-    // Use ColumnsToGet.newBuilder() to construct.
-    private ColumnsToGet(Builder builder) {
+      implements SortOrBuilder {
+    // Use Sort.newBuilder() to construct.
+    private Sort(Builder builder) {
       super(builder);
     }
-    private ColumnsToGet(boolean noInit) {}
+    private Sort(boolean noInit) {}
     
-    private static final ColumnsToGet defaultInstance;
-    public static ColumnsToGet getDefaultInstance() {
+    private static final Sort defaultInstance;
+    public static Sort getDefaultInstance() {
       return defaultInstance;
     }
     
-    public ColumnsToGet getDefaultInstanceForType() {
+    public Sort getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ColumnsToGet_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Sort_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ColumnsToGet_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Sort_fieldAccessorTable;
     }
     
-    private int bitField0_;
-    // optional .com.alicloud.openservices.tablestore.core.protocol.ColumnReturnType return_type = 1;
-    public static final int RETURN_TYPE_FIELD_NUMBER = 1;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType returnType_;
-    public boolean hasReturnType() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
+    // repeated .com.alicloud.openservices.tablestore.core.protocol.Sorter sorter = 1;
+    public static final int SORTER_FIELD_NUMBER = 1;
+    private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.Sorter> sorter_;
+    public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.Sorter> getSorterList() {
+      return sorter_;
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType getReturnType() {
-      return returnType_;
+    public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder> 
+        getSorterOrBuilderList() {
+      return sorter_;
     }
-    
-    // repeated string column_names = 2;
-    public static final int COLUMN_NAMES_FIELD_NUMBER = 2;
-    private com.google.protobuf.LazyStringList columnNames_;
-    public java.util.List<String>
-        getColumnNamesList() {
-      return columnNames_;
+    public int getSorterCount() {
+      return sorter_.size();
     }
-    public int getColumnNamesCount() {
-      return columnNames_.size();
+    public com.alicloud.openservices.tablestore.core.protocol.Search.Sorter getSorter(int index) {
+      return sorter_.get(index);
     }
-    public String getColumnNames(int index) {
-      return columnNames_.get(index);
+    public com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder getSorterOrBuilder(
+        int index) {
+      return sorter_.get(index);
     }
     
     private void initFields() {
-      returnType_ = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType.RETURN_ALL;
-      columnNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      sorter_ = java.util.Collections.emptyList();
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -64521,11 +65416,8 @@ public final boolean isInitialized() {
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeEnum(1, returnType_.getNumber());
-      }
-      for (int i = 0; i < columnNames_.size(); i++) {
-        output.writeBytes(2, columnNames_.getByteString(i));
+      for (int i = 0; i < sorter_.size(); i++) {
+        output.writeMessage(1, sorter_.get(i));
       }
       getUnknownFields().writeTo(output);
     }
@@ -64536,18 +65428,9 @@ public int getSerializedSize() {
       if (size != -1) return size;
     
       size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+      for (int i = 0; i < sorter_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, returnType_.getNumber());
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < columnNames_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeBytesSizeNoTag(columnNames_.getByteString(i));
-        }
-        size += dataSize;
-        size += 1 * getColumnNamesList().size();
+          .computeMessageSize(1, sorter_.get(i));
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -64561,41 +65444,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -64604,7 +65487,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsT
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -64615,12 +65498,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsT
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Sort parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -64630,7 +65513,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsT
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.Sort prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -64643,18 +65526,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGetOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ColumnsToGet_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Sort_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ColumnsToGet_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Sort_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.Sort.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -64665,6 +65548,7 @@ private Builder(BuilderParent parent) {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getSorterFieldBuilder();
         }
       }
       private static Builder create() {
@@ -64673,10 +65557,12 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        returnType_ = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType.RETURN_ALL;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        columnNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000002);
+        if (sorterBuilder_ == null) {
+          sorter_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          sorterBuilder_.clear();
+        }
         return this;
       }
       
@@ -64686,24 +65572,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Sort getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Sort build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.Sort result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.Sort buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.Sort result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -64711,48 +65597,58 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet b
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet result = new com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Sort buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.Sort result = new com.alicloud.openservices.tablestore.core.protocol.Search.Sort(this);
         int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.returnType_ = returnType_;
-        if (((bitField0_ & 0x00000002) == 0x00000002)) {
-          columnNames_ = new com.google.protobuf.UnmodifiableLazyStringList(
-              columnNames_);
-          bitField0_ = (bitField0_ & ~0x00000002);
+        if (sorterBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) == 0x00000001)) {
+            sorter_ = java.util.Collections.unmodifiableList(sorter_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.sorter_ = sorter_;
+        } else {
+          result.sorter_ = sorterBuilder_.build();
         }
-        result.columnNames_ = columnNames_;
-        result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.Sort) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.Sort)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.getDefaultInstance()) return this;
-        if (other.hasReturnType()) {
-          setReturnType(other.getReturnType());
-        }
-        if (!other.columnNames_.isEmpty()) {
-          if (columnNames_.isEmpty()) {
-            columnNames_ = other.columnNames_;
-            bitField0_ = (bitField0_ & ~0x00000002);
-          } else {
-            ensureColumnNamesIsMutable();
-            columnNames_.addAll(other.columnNames_);
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.Sort other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance()) return this;
+        if (sorterBuilder_ == null) {
+          if (!other.sorter_.isEmpty()) {
+            if (sorter_.isEmpty()) {
+              sorter_ = other.sorter_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureSorterIsMutable();
+              sorter_.addAll(other.sorter_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.sorter_.isEmpty()) {
+            if (sorterBuilder_.isEmpty()) {
+              sorterBuilder_.dispose();
+              sorterBuilder_ = null;
+              sorter_ = other.sorter_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              sorterBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getSorterFieldBuilder() : null;
+            } else {
+              sorterBuilder_.addAllMessages(other.sorter_);
+            }
           }
-          onChanged();
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -64785,20 +65681,10 @@ public Builder mergeFrom(
               }
               break;
             }
-            case 8: {
-              int rawValue = input.readEnum();
-              com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType value = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType.valueOf(rawValue);
-              if (value == null) {
-                unknownFields.mergeVarintField(1, rawValue);
-              } else {
-                bitField0_ |= 0x00000001;
-                returnType_ = value;
-              }
-              break;
-            }
-            case 18: {
-              ensureColumnNamesIsMutable();
-              columnNames_.add(input.readBytes());
+            case 10: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addSorter(subBuilder.buildPartial());
               break;
             }
           }
@@ -64807,273 +65693,410 @@ public Builder mergeFrom(
       
       private int bitField0_;
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.ColumnReturnType return_type = 1;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType returnType_ = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType.RETURN_ALL;
-      public boolean hasReturnType() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
+      // repeated .com.alicloud.openservices.tablestore.core.protocol.Sorter sorter = 1;
+      private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.Sorter> sorter_ =
+        java.util.Collections.emptyList();
+      private void ensureSorterIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          sorter_ = new java.util.ArrayList<com.alicloud.openservices.tablestore.core.protocol.Search.Sorter>(sorter_);
+          bitField0_ |= 0x00000001;
+         }
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType getReturnType() {
-        return returnType_;
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Sorter, com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder> sorterBuilder_;
+      
+      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.Sorter> getSorterList() {
+        if (sorterBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sorter_);
+        } else {
+          return sorterBuilder_.getMessageList();
+        }
       }
-      public Builder setReturnType(com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType value) {
-        if (value == null) {
-          throw new NullPointerException();
+      public int getSorterCount() {
+        if (sorterBuilder_ == null) {
+          return sorter_.size();
+        } else {
+          return sorterBuilder_.getCount();
         }
-        bitField0_ |= 0x00000001;
-        returnType_ = value;
-        onChanged();
-        return this;
       }
-      public Builder clearReturnType() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        returnType_ = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType.RETURN_ALL;
-        onChanged();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Sorter getSorter(int index) {
+        if (sorterBuilder_ == null) {
+          return sorter_.get(index);
+        } else {
+          return sorterBuilder_.getMessage(index);
+        }
+      }
+      public Builder setSorter(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.Sorter value) {
+        if (sorterBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSorterIsMutable();
+          sorter_.set(index, value);
+          onChanged();
+        } else {
+          sorterBuilder_.setMessage(index, value);
+        }
         return this;
       }
-      
-      // repeated string column_names = 2;
-      private com.google.protobuf.LazyStringList columnNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      private void ensureColumnNamesIsMutable() {
-        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
-          columnNames_ = new com.google.protobuf.LazyStringArrayList(columnNames_);
-          bitField0_ |= 0x00000002;
-         }
+      public Builder setSorter(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder builderForValue) {
+        if (sorterBuilder_ == null) {
+          ensureSorterIsMutable();
+          sorter_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          sorterBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
-      public java.util.List<String>
-          getColumnNamesList() {
-        return java.util.Collections.unmodifiableList(columnNames_);
+      public Builder addSorter(com.alicloud.openservices.tablestore.core.protocol.Search.Sorter value) {
+        if (sorterBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSorterIsMutable();
+          sorter_.add(value);
+          onChanged();
+        } else {
+          sorterBuilder_.addMessage(value);
+        }
+        return this;
       }
-      public int getColumnNamesCount() {
-        return columnNames_.size();
+      public Builder addSorter(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.Sorter value) {
+        if (sorterBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSorterIsMutable();
+          sorter_.add(index, value);
+          onChanged();
+        } else {
+          sorterBuilder_.addMessage(index, value);
+        }
+        return this;
       }
-      public String getColumnNames(int index) {
-        return columnNames_.get(index);
+      public Builder addSorter(
+          com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder builderForValue) {
+        if (sorterBuilder_ == null) {
+          ensureSorterIsMutable();
+          sorter_.add(builderForValue.build());
+          onChanged();
+        } else {
+          sorterBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
       }
-      public Builder setColumnNames(
-          int index, String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureColumnNamesIsMutable();
-        columnNames_.set(index, value);
-        onChanged();
+      public Builder addSorter(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder builderForValue) {
+        if (sorterBuilder_ == null) {
+          ensureSorterIsMutable();
+          sorter_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          sorterBuilder_.addMessage(index, builderForValue.build());
+        }
         return this;
       }
-      public Builder addColumnNames(String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureColumnNamesIsMutable();
-        columnNames_.add(value);
-        onChanged();
+      public Builder addAllSorter(
+          java.lang.Iterable<? extends com.alicloud.openservices.tablestore.core.protocol.Search.Sorter> values) {
+        if (sorterBuilder_ == null) {
+          ensureSorterIsMutable();
+          super.addAll(values, sorter_);
+          onChanged();
+        } else {
+          sorterBuilder_.addAllMessages(values);
+        }
         return this;
       }
-      public Builder addAllColumnNames(
-          java.lang.Iterable<String> values) {
-        ensureColumnNamesIsMutable();
-        super.addAll(values, columnNames_);
-        onChanged();
+      public Builder clearSorter() {
+        if (sorterBuilder_ == null) {
+          sorter_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          sorterBuilder_.clear();
+        }
         return this;
       }
-      public Builder clearColumnNames() {
-        columnNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        onChanged();
+      public Builder removeSorter(int index) {
+        if (sorterBuilder_ == null) {
+          ensureSorterIsMutable();
+          sorter_.remove(index);
+          onChanged();
+        } else {
+          sorterBuilder_.remove(index);
+        }
         return this;
       }
-      void addColumnNames(com.google.protobuf.ByteString value) {
-        ensureColumnNamesIsMutable();
-        columnNames_.add(value);
-        onChanged();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder getSorterBuilder(
+          int index) {
+        return getSorterFieldBuilder().getBuilder(index);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder getSorterOrBuilder(
+          int index) {
+        if (sorterBuilder_ == null) {
+          return sorter_.get(index);  } else {
+          return sorterBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder> 
+           getSorterOrBuilderList() {
+        if (sorterBuilder_ != null) {
+          return sorterBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(sorter_);
+        }
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder addSorterBuilder() {
+        return getSorterFieldBuilder().addBuilder(
+            com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.getDefaultInstance());
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder addSorterBuilder(
+          int index) {
+        return getSorterFieldBuilder().addBuilder(
+            index, com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.getDefaultInstance());
+      }
+      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder> 
+           getSorterBuilderList() {
+        return getSorterFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Sorter, com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder> 
+          getSorterFieldBuilder() {
+        if (sorterBuilder_ == null) {
+          sorterBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.Sorter, com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SorterOrBuilder>(
+                  sorter_,
+                  ((bitField0_ & 0x00000001) == 0x00000001),
+                  getParentForChildren(),
+                  isClean());
+          sorter_ = null;
+        }
+        return sorterBuilder_;
       }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.ColumnsToGet)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.Sort)
     }
     
     static {
-      defaultInstance = new ColumnsToGet(true);
+      defaultInstance = new Sort(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.ColumnsToGet)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.Sort)
   }
   
-  public interface SearchRequestOrBuilder
+  public interface SearchQueryOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
-    // optional string table_name = 1;
-    boolean hasTableName();
-    String getTableName();
+    // optional int32 offset = 1;
+    boolean hasOffset();
+    int getOffset();
     
-    // optional string index_name = 2;
-    boolean hasIndexName();
-    String getIndexName();
+    // optional int32 limit = 2;
+    boolean hasLimit();
+    int getLimit();
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.ColumnsToGet columns_to_get = 3;
-    boolean hasColumnsToGet();
-    com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet getColumnsToGet();
-    com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGetOrBuilder getColumnsToGetOrBuilder();
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Query query = 4;
+    boolean hasQuery();
+    com.alicloud.openservices.tablestore.core.protocol.Search.Query getQuery();
+    com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder getQueryOrBuilder();
     
-    // optional bytes search_query = 4;
-    boolean hasSearchQuery();
-    com.google.protobuf.ByteString getSearchQuery();
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Collapse collapse = 5;
+    boolean hasCollapse();
+    com.alicloud.openservices.tablestore.core.protocol.Search.Collapse getCollapse();
+    com.alicloud.openservices.tablestore.core.protocol.Search.CollapseOrBuilder getCollapseOrBuilder();
     
-    // repeated bytes routing_values = 5;
-    java.util.List<com.google.protobuf.ByteString> getRoutingValuesList();
-    int getRoutingValuesCount();
-    com.google.protobuf.ByteString getRoutingValues(int index);
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Sort sort = 6;
+    boolean hasSort();
+    com.alicloud.openservices.tablestore.core.protocol.Search.Sort getSort();
+    com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder getSortOrBuilder();
     
-    // optional int32 timeout_ms = 6;
-    boolean hasTimeoutMs();
-    int getTimeoutMs();
+    // optional bool getTotalCount = 8;
+    boolean hasGetTotalCount();
+    boolean getGetTotalCount();
+    
+    // optional bytes token = 9;
+    boolean hasToken();
+    com.google.protobuf.ByteString getToken();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Aggregations aggs = 10;
+    boolean hasAggs();
+    com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations getAggs();
+    com.alicloud.openservices.tablestore.core.protocol.Search.AggregationsOrBuilder getAggsOrBuilder();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.GroupBys group_bys = 11;
+    boolean hasGroupBys();
+    com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys getGroupBys();
+    com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuilder getGroupBysOrBuilder();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Highlight highlight = 12;
+    boolean hasHighlight();
+    com.alicloud.openservices.tablestore.core.protocol.Search.Highlight getHighlight();
+    com.alicloud.openservices.tablestore.core.protocol.Search.HighlightOrBuilder getHighlightOrBuilder();
   }
-  public static final class SearchRequest extends
+  public static final class SearchQuery extends
       com.google.protobuf.GeneratedMessage
-      implements SearchRequestOrBuilder {
-    // Use SearchRequest.newBuilder() to construct.
-    private SearchRequest(Builder builder) {
+      implements SearchQueryOrBuilder {
+    // Use SearchQuery.newBuilder() to construct.
+    private SearchQuery(Builder builder) {
       super(builder);
     }
-    private SearchRequest(boolean noInit) {}
+    private SearchQuery(boolean noInit) {}
     
-    private static final SearchRequest defaultInstance;
-    public static SearchRequest getDefaultInstance() {
+    private static final SearchQuery defaultInstance;
+    public static SearchQuery getDefaultInstance() {
       return defaultInstance;
     }
     
-    public SearchRequest getDefaultInstanceForType() {
+    public SearchQuery getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchRequest_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchQuery_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchRequest_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchQuery_fieldAccessorTable;
     }
     
     private int bitField0_;
-    // optional string table_name = 1;
-    public static final int TABLE_NAME_FIELD_NUMBER = 1;
-    private java.lang.Object tableName_;
-    public boolean hasTableName() {
+    // optional int32 offset = 1;
+    public static final int OFFSET_FIELD_NUMBER = 1;
+    private int offset_;
+    public boolean hasOffset() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public String getTableName() {
-      java.lang.Object ref = tableName_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          tableName_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getTableNameBytes() {
-      java.lang.Object ref = tableName_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        tableName_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public int getOffset() {
+      return offset_;
     }
     
-    // optional string index_name = 2;
-    public static final int INDEX_NAME_FIELD_NUMBER = 2;
-    private java.lang.Object indexName_;
-    public boolean hasIndexName() {
+    // optional int32 limit = 2;
+    public static final int LIMIT_FIELD_NUMBER = 2;
+    private int limit_;
+    public boolean hasLimit() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
-    public String getIndexName() {
-      java.lang.Object ref = indexName_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          indexName_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getIndexNameBytes() {
-      java.lang.Object ref = indexName_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        indexName_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public int getLimit() {
+      return limit_;
     }
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.ColumnsToGet columns_to_get = 3;
-    public static final int COLUMNS_TO_GET_FIELD_NUMBER = 3;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet columnsToGet_;
-    public boolean hasColumnsToGet() {
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Query query = 4;
+    public static final int QUERY_FIELD_NUMBER = 4;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.Query query_;
+    public boolean hasQuery() {
       return ((bitField0_ & 0x00000004) == 0x00000004);
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet getColumnsToGet() {
-      return columnsToGet_;
+    public com.alicloud.openservices.tablestore.core.protocol.Search.Query getQuery() {
+      return query_;
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGetOrBuilder getColumnsToGetOrBuilder() {
-      return columnsToGet_;
+    public com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder getQueryOrBuilder() {
+      return query_;
     }
     
-    // optional bytes search_query = 4;
-    public static final int SEARCH_QUERY_FIELD_NUMBER = 4;
-    private com.google.protobuf.ByteString searchQuery_;
-    public boolean hasSearchQuery() {
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Collapse collapse = 5;
+    public static final int COLLAPSE_FIELD_NUMBER = 5;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.Collapse collapse_;
+    public boolean hasCollapse() {
       return ((bitField0_ & 0x00000008) == 0x00000008);
     }
-    public com.google.protobuf.ByteString getSearchQuery() {
-      return searchQuery_;
+    public com.alicloud.openservices.tablestore.core.protocol.Search.Collapse getCollapse() {
+      return collapse_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.CollapseOrBuilder getCollapseOrBuilder() {
+      return collapse_;
     }
     
-    // repeated bytes routing_values = 5;
-    public static final int ROUTING_VALUES_FIELD_NUMBER = 5;
-    private java.util.List<com.google.protobuf.ByteString> routingValues_;
-    public java.util.List<com.google.protobuf.ByteString>
-        getRoutingValuesList() {
-      return routingValues_;
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Sort sort = 6;
+    public static final int SORT_FIELD_NUMBER = 6;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.Sort sort_;
+    public boolean hasSort() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
     }
-    public int getRoutingValuesCount() {
-      return routingValues_.size();
+    public com.alicloud.openservices.tablestore.core.protocol.Search.Sort getSort() {
+      return sort_;
     }
-    public com.google.protobuf.ByteString getRoutingValues(int index) {
-      return routingValues_.get(index);
+    public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder getSortOrBuilder() {
+      return sort_;
     }
     
-    // optional int32 timeout_ms = 6;
-    public static final int TIMEOUT_MS_FIELD_NUMBER = 6;
-    private int timeoutMs_;
-    public boolean hasTimeoutMs() {
-      return ((bitField0_ & 0x00000010) == 0x00000010);
+    // optional bool getTotalCount = 8;
+    public static final int GETTOTALCOUNT_FIELD_NUMBER = 8;
+    private boolean getTotalCount_;
+    public boolean hasGetTotalCount() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
     }
-    public int getTimeoutMs() {
-      return timeoutMs_;
+    public boolean getGetTotalCount() {
+      return getTotalCount_;
+    }
+    
+    // optional bytes token = 9;
+    public static final int TOKEN_FIELD_NUMBER = 9;
+    private com.google.protobuf.ByteString token_;
+    public boolean hasToken() {
+      return ((bitField0_ & 0x00000040) == 0x00000040);
+    }
+    public com.google.protobuf.ByteString getToken() {
+      return token_;
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Aggregations aggs = 10;
+    public static final int AGGS_FIELD_NUMBER = 10;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations aggs_;
+    public boolean hasAggs() {
+      return ((bitField0_ & 0x00000080) == 0x00000080);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations getAggs() {
+      return aggs_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.AggregationsOrBuilder getAggsOrBuilder() {
+      return aggs_;
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.GroupBys group_bys = 11;
+    public static final int GROUP_BYS_FIELD_NUMBER = 11;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys groupBys_;
+    public boolean hasGroupBys() {
+      return ((bitField0_ & 0x00000100) == 0x00000100);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys getGroupBys() {
+      return groupBys_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuilder getGroupBysOrBuilder() {
+      return groupBys_;
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.Highlight highlight = 12;
+    public static final int HIGHLIGHT_FIELD_NUMBER = 12;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.Highlight highlight_;
+    public boolean hasHighlight() {
+      return ((bitField0_ & 0x00000200) == 0x00000200);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.Highlight getHighlight() {
+      return highlight_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightOrBuilder getHighlightOrBuilder() {
+      return highlight_;
     }
     
     private void initFields() {
-      tableName_ = "";
-      indexName_ = "";
-      columnsToGet_ = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.getDefaultInstance();
-      searchQuery_ = com.google.protobuf.ByteString.EMPTY;
-      routingValues_ = java.util.Collections.emptyList();;
-      timeoutMs_ = 0;
+      offset_ = 0;
+      limit_ = 0;
+      query_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
+      collapse_ = com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.getDefaultInstance();
+      sort_ = com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance();
+      getTotalCount_ = false;
+      token_ = com.google.protobuf.ByteString.EMPTY;
+      aggs_ = com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.getDefaultInstance();
+      groupBys_ = com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.getDefaultInstance();
+      highlight_ = com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.getDefaultInstance();
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -65088,22 +66111,34 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, getTableNameBytes());
+        output.writeInt32(1, offset_);
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBytes(2, getIndexNameBytes());
+        output.writeInt32(2, limit_);
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeMessage(3, columnsToGet_);
+        output.writeMessage(4, query_);
       }
       if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeBytes(4, searchQuery_);
-      }
-      for (int i = 0; i < routingValues_.size(); i++) {
-        output.writeBytes(5, routingValues_.get(i));
+        output.writeMessage(5, collapse_);
       }
       if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        output.writeInt32(6, timeoutMs_);
+        output.writeMessage(6, sort_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeBool(8, getTotalCount_);
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        output.writeBytes(9, token_);
+      }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        output.writeMessage(10, aggs_);
+      }
+      if (((bitField0_ & 0x00000100) == 0x00000100)) {
+        output.writeMessage(11, groupBys_);
+      }
+      if (((bitField0_ & 0x00000200) == 0x00000200)) {
+        output.writeMessage(12, highlight_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -65116,32 +66151,43 @@ public int getSerializedSize() {
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, getTableNameBytes());
+          .computeInt32Size(1, offset_);
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(2, getIndexNameBytes());
+          .computeInt32Size(2, limit_);
       }
       if (((bitField0_ & 0x00000004) == 0x00000004)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, columnsToGet_);
+          .computeMessageSize(4, query_);
       }
       if (((bitField0_ & 0x00000008) == 0x00000008)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(4, searchQuery_);
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < routingValues_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeBytesSizeNoTag(routingValues_.get(i));
-        }
-        size += dataSize;
-        size += 1 * getRoutingValuesList().size();
+          .computeMessageSize(5, collapse_);
       }
       if (((bitField0_ & 0x00000010) == 0x00000010)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(6, timeoutMs_);
+          .computeMessageSize(6, sort_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(8, getTotalCount_);
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(9, token_);
+      }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(10, aggs_);
+      }
+      if (((bitField0_ & 0x00000100) == 0x00000100)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(11, groupBys_);
+      }
+      if (((bitField0_ & 0x00000200) == 0x00000200)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(12, highlight_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -65155,41 +66201,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -65198,7 +66244,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRe
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -65209,12 +66255,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRe
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -65224,7 +66270,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRe
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -65237,18 +66283,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequestOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.SearchQueryOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchRequest_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchQuery_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchRequest_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchQuery_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -65259,7 +66305,12 @@ private Builder(BuilderParent parent) {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getColumnsToGetFieldBuilder();
+          getQueryFieldBuilder();
+          getCollapseFieldBuilder();
+          getSortFieldBuilder();
+          getAggsFieldBuilder();
+          getGroupBysFieldBuilder();
+          getHighlightFieldBuilder();
         }
       }
       private static Builder create() {
@@ -65268,22 +66319,50 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        tableName_ = "";
+        offset_ = 0;
         bitField0_ = (bitField0_ & ~0x00000001);
-        indexName_ = "";
+        limit_ = 0;
         bitField0_ = (bitField0_ & ~0x00000002);
-        if (columnsToGetBuilder_ == null) {
-          columnsToGet_ = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.getDefaultInstance();
+        if (queryBuilder_ == null) {
+          query_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
         } else {
-          columnsToGetBuilder_.clear();
+          queryBuilder_.clear();
         }
         bitField0_ = (bitField0_ & ~0x00000004);
-        searchQuery_ = com.google.protobuf.ByteString.EMPTY;
+        if (collapseBuilder_ == null) {
+          collapse_ = com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.getDefaultInstance();
+        } else {
+          collapseBuilder_.clear();
+        }
         bitField0_ = (bitField0_ & ~0x00000008);
-        routingValues_ = java.util.Collections.emptyList();;
+        if (sortBuilder_ == null) {
+          sort_ = com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance();
+        } else {
+          sortBuilder_.clear();
+        }
         bitField0_ = (bitField0_ & ~0x00000010);
-        timeoutMs_ = 0;
+        getTotalCount_ = false;
         bitField0_ = (bitField0_ & ~0x00000020);
+        token_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000040);
+        if (aggsBuilder_ == null) {
+          aggs_ = com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.getDefaultInstance();
+        } else {
+          aggsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000080);
+        if (groupBysBuilder_ == null) {
+          groupBys_ = com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.getDefaultInstance();
+        } else {
+          groupBysBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000100);
+        if (highlightBuilder_ == null) {
+          highlight_ = com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.getDefaultInstance();
+        } else {
+          highlightBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000200);
         return this;
       }
       
@@ -65293,24 +66372,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -65318,79 +66397,119 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest result = new com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery result = new com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        result.tableName_ = tableName_;
+        result.offset_ = offset_;
         if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
           to_bitField0_ |= 0x00000002;
         }
-        result.indexName_ = indexName_;
+        result.limit_ = limit_;
         if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
           to_bitField0_ |= 0x00000004;
         }
-        if (columnsToGetBuilder_ == null) {
-          result.columnsToGet_ = columnsToGet_;
+        if (queryBuilder_ == null) {
+          result.query_ = query_;
         } else {
-          result.columnsToGet_ = columnsToGetBuilder_.build();
+          result.query_ = queryBuilder_.build();
         }
         if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
           to_bitField0_ |= 0x00000008;
         }
-        result.searchQuery_ = searchQuery_;
-        if (((bitField0_ & 0x00000010) == 0x00000010)) {
-          routingValues_ = java.util.Collections.unmodifiableList(routingValues_);
-          bitField0_ = (bitField0_ & ~0x00000010);
+        if (collapseBuilder_ == null) {
+          result.collapse_ = collapse_;
+        } else {
+          result.collapse_ = collapseBuilder_.build();
         }
-        result.routingValues_ = routingValues_;
-        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
           to_bitField0_ |= 0x00000010;
         }
-        result.timeoutMs_ = timeoutMs_;
+        if (sortBuilder_ == null) {
+          result.sort_ = sort_;
+        } else {
+          result.sort_ = sortBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        result.getTotalCount_ = getTotalCount_;
+        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
+          to_bitField0_ |= 0x00000040;
+        }
+        result.token_ = token_;
+        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
+          to_bitField0_ |= 0x00000080;
+        }
+        if (aggsBuilder_ == null) {
+          result.aggs_ = aggs_;
+        } else {
+          result.aggs_ = aggsBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
+          to_bitField0_ |= 0x00000100;
+        }
+        if (groupBysBuilder_ == null) {
+          result.groupBys_ = groupBys_;
+        } else {
+          result.groupBys_ = groupBysBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
+          to_bitField0_ |= 0x00000200;
+        }
+        if (highlightBuilder_ == null) {
+          result.highlight_ = highlight_;
+        } else {
+          result.highlight_ = highlightBuilder_.build();
+        }
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest.getDefaultInstance()) return this;
-        if (other.hasTableName()) {
-          setTableName(other.getTableName());
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery.getDefaultInstance()) return this;
+        if (other.hasOffset()) {
+          setOffset(other.getOffset());
         }
-        if (other.hasIndexName()) {
-          setIndexName(other.getIndexName());
+        if (other.hasLimit()) {
+          setLimit(other.getLimit());
         }
-        if (other.hasColumnsToGet()) {
-          mergeColumnsToGet(other.getColumnsToGet());
+        if (other.hasQuery()) {
+          mergeQuery(other.getQuery());
         }
-        if (other.hasSearchQuery()) {
-          setSearchQuery(other.getSearchQuery());
+        if (other.hasCollapse()) {
+          mergeCollapse(other.getCollapse());
         }
-        if (!other.routingValues_.isEmpty()) {
-          if (routingValues_.isEmpty()) {
-            routingValues_ = other.routingValues_;
-            bitField0_ = (bitField0_ & ~0x00000010);
-          } else {
-            ensureRoutingValuesIsMutable();
-            routingValues_.addAll(other.routingValues_);
-          }
-          onChanged();
+        if (other.hasSort()) {
+          mergeSort(other.getSort());
         }
-        if (other.hasTimeoutMs()) {
-          setTimeoutMs(other.getTimeoutMs());
+        if (other.hasGetTotalCount()) {
+          setGetTotalCount(other.getGetTotalCount());
+        }
+        if (other.hasToken()) {
+          setToken(other.getToken());
+        }
+        if (other.hasAggs()) {
+          mergeAggs(other.getAggs());
+        }
+        if (other.hasGroupBys()) {
+          mergeGroupBys(other.getGroupBys());
+        }
+        if (other.hasHighlight()) {
+          mergeHighlight(other.getHighlight());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -65423,38 +66542,78 @@ public Builder mergeFrom(
               }
               break;
             }
-            case 10: {
+            case 8: {
               bitField0_ |= 0x00000001;
-              tableName_ = input.readBytes();
+              offset_ = input.readInt32();
               break;
             }
-            case 18: {
+            case 16: {
               bitField0_ |= 0x00000002;
-              indexName_ = input.readBytes();
+              limit_ = input.readInt32();
               break;
             }
-            case 26: {
-              com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.newBuilder();
-              if (hasColumnsToGet()) {
-                subBuilder.mergeFrom(getColumnsToGet());
+            case 34: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.Query.newBuilder();
+              if (hasQuery()) {
+                subBuilder.mergeFrom(getQuery());
               }
               input.readMessage(subBuilder, extensionRegistry);
-              setColumnsToGet(subBuilder.buildPartial());
+              setQuery(subBuilder.buildPartial());
               break;
             }
-            case 34: {
-              bitField0_ |= 0x00000008;
-              searchQuery_ = input.readBytes();
+            case 42: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.newBuilder();
+              if (hasCollapse()) {
+                subBuilder.mergeFrom(getCollapse());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setCollapse(subBuilder.buildPartial());
               break;
             }
-            case 42: {
-              ensureRoutingValuesIsMutable();
-              routingValues_.add(input.readBytes());
+            case 50: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.Sort.newBuilder();
+              if (hasSort()) {
+                subBuilder.mergeFrom(getSort());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setSort(subBuilder.buildPartial());
               break;
             }
-            case 48: {
+            case 64: {
               bitField0_ |= 0x00000020;
-              timeoutMs_ = input.readInt32();
+              getTotalCount_ = input.readBool();
+              break;
+            }
+            case 74: {
+              bitField0_ |= 0x00000040;
+              token_ = input.readBytes();
+              break;
+            }
+            case 82: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.newBuilder();
+              if (hasAggs()) {
+                subBuilder.mergeFrom(getAggs());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setAggs(subBuilder.buildPartial());
+              break;
+            }
+            case 90: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.newBuilder();
+              if (hasGroupBys()) {
+                subBuilder.mergeFrom(getGroupBys());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setGroupBys(subBuilder.buildPartial());
+              break;
+            }
+            case 98: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.newBuilder();
+              if (hasHighlight()) {
+                subBuilder.mergeFrom(getHighlight());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setHighlight(subBuilder.buildPartial());
               break;
             }
           }
@@ -65463,403 +66622,724 @@ public Builder mergeFrom(
       
       private int bitField0_;
       
-      // optional string table_name = 1;
-      private java.lang.Object tableName_ = "";
-      public boolean hasTableName() {
+      // optional int32 offset = 1;
+      private int offset_ ;
+      public boolean hasOffset() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public String getTableName() {
-        java.lang.Object ref = tableName_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
-          tableName_ = s;
-          return s;
-        } else {
-          return (String) ref;
-        }
+      public int getOffset() {
+        return offset_;
       }
-      public Builder setTableName(String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000001;
-        tableName_ = value;
+      public Builder setOffset(int value) {
+        bitField0_ |= 0x00000001;
+        offset_ = value;
         onChanged();
         return this;
       }
-      public Builder clearTableName() {
+      public Builder clearOffset() {
         bitField0_ = (bitField0_ & ~0x00000001);
-        tableName_ = getDefaultInstance().getTableName();
+        offset_ = 0;
         onChanged();
         return this;
       }
-      void setTableName(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000001;
-        tableName_ = value;
-        onChanged();
-      }
       
-      // optional string index_name = 2;
-      private java.lang.Object indexName_ = "";
-      public boolean hasIndexName() {
+      // optional int32 limit = 2;
+      private int limit_ ;
+      public boolean hasLimit() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
-      public String getIndexName() {
-        java.lang.Object ref = indexName_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
-          indexName_ = s;
-          return s;
-        } else {
-          return (String) ref;
-        }
+      public int getLimit() {
+        return limit_;
       }
-      public Builder setIndexName(String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000002;
-        indexName_ = value;
+      public Builder setLimit(int value) {
+        bitField0_ |= 0x00000002;
+        limit_ = value;
         onChanged();
         return this;
       }
-      public Builder clearIndexName() {
+      public Builder clearLimit() {
         bitField0_ = (bitField0_ & ~0x00000002);
-        indexName_ = getDefaultInstance().getIndexName();
+        limit_ = 0;
         onChanged();
         return this;
       }
-      void setIndexName(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000002;
-        indexName_ = value;
-        onChanged();
-      }
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.ColumnsToGet columns_to_get = 3;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet columnsToGet_ = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.getDefaultInstance();
+      // optional .com.alicloud.openservices.tablestore.core.protocol.Query query = 4;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.Query query_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
       private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet, com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGetOrBuilder> columnsToGetBuilder_;
-      public boolean hasColumnsToGet() {
+          com.alicloud.openservices.tablestore.core.protocol.Search.Query, com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder> queryBuilder_;
+      public boolean hasQuery() {
         return ((bitField0_ & 0x00000004) == 0x00000004);
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet getColumnsToGet() {
-        if (columnsToGetBuilder_ == null) {
-          return columnsToGet_;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Query getQuery() {
+        if (queryBuilder_ == null) {
+          return query_;
         } else {
-          return columnsToGetBuilder_.getMessage();
+          return queryBuilder_.getMessage();
         }
       }
-      public Builder setColumnsToGet(com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet value) {
-        if (columnsToGetBuilder_ == null) {
+      public Builder setQuery(com.alicloud.openservices.tablestore.core.protocol.Search.Query value) {
+        if (queryBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          columnsToGet_ = value;
+          query_ = value;
           onChanged();
         } else {
-          columnsToGetBuilder_.setMessage(value);
+          queryBuilder_.setMessage(value);
         }
         bitField0_ |= 0x00000004;
         return this;
       }
-      public Builder setColumnsToGet(
-          com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.Builder builderForValue) {
-        if (columnsToGetBuilder_ == null) {
-          columnsToGet_ = builderForValue.build();
+      public Builder setQuery(
+          com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder builderForValue) {
+        if (queryBuilder_ == null) {
+          query_ = builderForValue.build();
           onChanged();
         } else {
-          columnsToGetBuilder_.setMessage(builderForValue.build());
+          queryBuilder_.setMessage(builderForValue.build());
         }
         bitField0_ |= 0x00000004;
         return this;
       }
-      public Builder mergeColumnsToGet(com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet value) {
-        if (columnsToGetBuilder_ == null) {
+      public Builder mergeQuery(com.alicloud.openservices.tablestore.core.protocol.Search.Query value) {
+        if (queryBuilder_ == null) {
           if (((bitField0_ & 0x00000004) == 0x00000004) &&
-              columnsToGet_ != com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.getDefaultInstance()) {
-            columnsToGet_ =
-              com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.newBuilder(columnsToGet_).mergeFrom(value).buildPartial();
+              query_ != com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance()) {
+            query_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.Query.newBuilder(query_).mergeFrom(value).buildPartial();
           } else {
-            columnsToGet_ = value;
+            query_ = value;
           }
           onChanged();
         } else {
-          columnsToGetBuilder_.mergeFrom(value);
+          queryBuilder_.mergeFrom(value);
         }
         bitField0_ |= 0x00000004;
         return this;
       }
-      public Builder clearColumnsToGet() {
-        if (columnsToGetBuilder_ == null) {
-          columnsToGet_ = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.getDefaultInstance();
+      public Builder clearQuery() {
+        if (queryBuilder_ == null) {
+          query_ = com.alicloud.openservices.tablestore.core.protocol.Search.Query.getDefaultInstance();
           onChanged();
         } else {
-          columnsToGetBuilder_.clear();
+          queryBuilder_.clear();
         }
         bitField0_ = (bitField0_ & ~0x00000004);
         return this;
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.Builder getColumnsToGetBuilder() {
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder getQueryBuilder() {
         bitField0_ |= 0x00000004;
         onChanged();
-        return getColumnsToGetFieldBuilder().getBuilder();
+        return getQueryFieldBuilder().getBuilder();
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGetOrBuilder getColumnsToGetOrBuilder() {
-        if (columnsToGetBuilder_ != null) {
-          return columnsToGetBuilder_.getMessageOrBuilder();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder getQueryOrBuilder() {
+        if (queryBuilder_ != null) {
+          return queryBuilder_.getMessageOrBuilder();
         } else {
-          return columnsToGet_;
+          return query_;
         }
       }
       private com.google.protobuf.SingleFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet, com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGetOrBuilder> 
-          getColumnsToGetFieldBuilder() {
-        if (columnsToGetBuilder_ == null) {
-          columnsToGetBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet, com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGetOrBuilder>(
-                  columnsToGet_,
+          com.alicloud.openservices.tablestore.core.protocol.Search.Query, com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder> 
+          getQueryFieldBuilder() {
+        if (queryBuilder_ == null) {
+          queryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.Query, com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryOrBuilder>(
+                  query_,
                   getParentForChildren(),
                   isClean());
-          columnsToGet_ = null;
+          query_ = null;
         }
-        return columnsToGetBuilder_;
+        return queryBuilder_;
       }
       
-      // optional bytes search_query = 4;
-      private com.google.protobuf.ByteString searchQuery_ = com.google.protobuf.ByteString.EMPTY;
-      public boolean hasSearchQuery() {
+      // optional .com.alicloud.openservices.tablestore.core.protocol.Collapse collapse = 5;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.Collapse collapse_ = com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Collapse, com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.CollapseOrBuilder> collapseBuilder_;
+      public boolean hasCollapse() {
         return ((bitField0_ & 0x00000008) == 0x00000008);
       }
-      public com.google.protobuf.ByteString getSearchQuery() {
-        return searchQuery_;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Collapse getCollapse() {
+        if (collapseBuilder_ == null) {
+          return collapse_;
+        } else {
+          return collapseBuilder_.getMessage();
+        }
       }
-      public Builder setSearchQuery(com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000008;
-        searchQuery_ = value;
-        onChanged();
+      public Builder setCollapse(com.alicloud.openservices.tablestore.core.protocol.Search.Collapse value) {
+        if (collapseBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          collapse_ = value;
+          onChanged();
+        } else {
+          collapseBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000008;
         return this;
       }
-      public Builder clearSearchQuery() {
-        bitField0_ = (bitField0_ & ~0x00000008);
-        searchQuery_ = getDefaultInstance().getSearchQuery();
-        onChanged();
+      public Builder setCollapse(
+          com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.Builder builderForValue) {
+        if (collapseBuilder_ == null) {
+          collapse_ = builderForValue.build();
+          onChanged();
+        } else {
+          collapseBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000008;
         return this;
       }
-      
-      // repeated bytes routing_values = 5;
-      private java.util.List<com.google.protobuf.ByteString> routingValues_ = java.util.Collections.emptyList();;
-      private void ensureRoutingValuesIsMutable() {
-        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
-          routingValues_ = new java.util.ArrayList<com.google.protobuf.ByteString>(routingValues_);
-          bitField0_ |= 0x00000010;
-         }
+      public Builder mergeCollapse(com.alicloud.openservices.tablestore.core.protocol.Search.Collapse value) {
+        if (collapseBuilder_ == null) {
+          if (((bitField0_ & 0x00000008) == 0x00000008) &&
+              collapse_ != com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.getDefaultInstance()) {
+            collapse_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.newBuilder(collapse_).mergeFrom(value).buildPartial();
+          } else {
+            collapse_ = value;
+          }
+          onChanged();
+        } else {
+          collapseBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000008;
+        return this;
       }
-      public java.util.List<com.google.protobuf.ByteString>
-          getRoutingValuesList() {
-        return java.util.Collections.unmodifiableList(routingValues_);
+      public Builder clearCollapse() {
+        if (collapseBuilder_ == null) {
+          collapse_ = com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.getDefaultInstance();
+          onChanged();
+        } else {
+          collapseBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000008);
+        return this;
       }
-      public int getRoutingValuesCount() {
-        return routingValues_.size();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.Builder getCollapseBuilder() {
+        bitField0_ |= 0x00000008;
+        onChanged();
+        return getCollapseFieldBuilder().getBuilder();
       }
-      public com.google.protobuf.ByteString getRoutingValues(int index) {
-        return routingValues_.get(index);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.CollapseOrBuilder getCollapseOrBuilder() {
+        if (collapseBuilder_ != null) {
+          return collapseBuilder_.getMessageOrBuilder();
+        } else {
+          return collapse_;
+        }
       }
-      public Builder setRoutingValues(
-          int index, com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureRoutingValuesIsMutable();
-        routingValues_.set(index, value);
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Collapse, com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.CollapseOrBuilder> 
+          getCollapseFieldBuilder() {
+        if (collapseBuilder_ == null) {
+          collapseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.Collapse, com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.CollapseOrBuilder>(
+                  collapse_,
+                  getParentForChildren(),
+                  isClean());
+          collapse_ = null;
+        }
+        return collapseBuilder_;
+      }
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.Sort sort = 6;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.Sort sort_ = com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Sort, com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder> sortBuilder_;
+      public boolean hasSort() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Sort getSort() {
+        if (sortBuilder_ == null) {
+          return sort_;
+        } else {
+          return sortBuilder_.getMessage();
+        }
+      }
+      public Builder setSort(com.alicloud.openservices.tablestore.core.protocol.Search.Sort value) {
+        if (sortBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sort_ = value;
+          onChanged();
+        } else {
+          sortBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000010;
+        return this;
+      }
+      public Builder setSort(
+          com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder builderForValue) {
+        if (sortBuilder_ == null) {
+          sort_ = builderForValue.build();
+          onChanged();
+        } else {
+          sortBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000010;
+        return this;
+      }
+      public Builder mergeSort(com.alicloud.openservices.tablestore.core.protocol.Search.Sort value) {
+        if (sortBuilder_ == null) {
+          if (((bitField0_ & 0x00000010) == 0x00000010) &&
+              sort_ != com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance()) {
+            sort_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.Sort.newBuilder(sort_).mergeFrom(value).buildPartial();
+          } else {
+            sort_ = value;
+          }
+          onChanged();
+        } else {
+          sortBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000010;
+        return this;
+      }
+      public Builder clearSort() {
+        if (sortBuilder_ == null) {
+          sort_ = com.alicloud.openservices.tablestore.core.protocol.Search.Sort.getDefaultInstance();
+          onChanged();
+        } else {
+          sortBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000010);
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder getSortBuilder() {
+        bitField0_ |= 0x00000010;
+        onChanged();
+        return getSortFieldBuilder().getBuilder();
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder getSortOrBuilder() {
+        if (sortBuilder_ != null) {
+          return sortBuilder_.getMessageOrBuilder();
+        } else {
+          return sort_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Sort, com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder> 
+          getSortFieldBuilder() {
+        if (sortBuilder_ == null) {
+          sortBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.Sort, com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SortOrBuilder>(
+                  sort_,
+                  getParentForChildren(),
+                  isClean());
+          sort_ = null;
+        }
+        return sortBuilder_;
+      }
+      
+      // optional bool getTotalCount = 8;
+      private boolean getTotalCount_ ;
+      public boolean hasGetTotalCount() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public boolean getGetTotalCount() {
+        return getTotalCount_;
+      }
+      public Builder setGetTotalCount(boolean value) {
+        bitField0_ |= 0x00000020;
+        getTotalCount_ = value;
         onChanged();
         return this;
       }
-      public Builder addRoutingValues(com.google.protobuf.ByteString value) {
+      public Builder clearGetTotalCount() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        getTotalCount_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // optional bytes token = 9;
+      private com.google.protobuf.ByteString token_ = com.google.protobuf.ByteString.EMPTY;
+      public boolean hasToken() {
+        return ((bitField0_ & 0x00000040) == 0x00000040);
+      }
+      public com.google.protobuf.ByteString getToken() {
+        return token_;
+      }
+      public Builder setToken(com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
-  ensureRoutingValuesIsMutable();
-        routingValues_.add(value);
+  bitField0_ |= 0x00000040;
+        token_ = value;
         onChanged();
         return this;
       }
-      public Builder addAllRoutingValues(
-          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
-        ensureRoutingValuesIsMutable();
-        super.addAll(values, routingValues_);
+      public Builder clearToken() {
+        bitField0_ = (bitField0_ & ~0x00000040);
+        token_ = getDefaultInstance().getToken();
         onChanged();
         return this;
       }
-      public Builder clearRoutingValues() {
-        routingValues_ = java.util.Collections.emptyList();;
-        bitField0_ = (bitField0_ & ~0x00000010);
-        onChanged();
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.Aggregations aggs = 10;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations aggs_ = com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations, com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.AggregationsOrBuilder> aggsBuilder_;
+      public boolean hasAggs() {
+        return ((bitField0_ & 0x00000080) == 0x00000080);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations getAggs() {
+        if (aggsBuilder_ == null) {
+          return aggs_;
+        } else {
+          return aggsBuilder_.getMessage();
+        }
+      }
+      public Builder setAggs(com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations value) {
+        if (aggsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          aggs_ = value;
+          onChanged();
+        } else {
+          aggsBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000080;
         return this;
       }
-      
-      // optional int32 timeout_ms = 6;
-      private int timeoutMs_ ;
-      public boolean hasTimeoutMs() {
-        return ((bitField0_ & 0x00000020) == 0x00000020);
+      public Builder setAggs(
+          com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.Builder builderForValue) {
+        if (aggsBuilder_ == null) {
+          aggs_ = builderForValue.build();
+          onChanged();
+        } else {
+          aggsBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000080;
+        return this;
       }
-      public int getTimeoutMs() {
-        return timeoutMs_;
+      public Builder mergeAggs(com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations value) {
+        if (aggsBuilder_ == null) {
+          if (((bitField0_ & 0x00000080) == 0x00000080) &&
+              aggs_ != com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.getDefaultInstance()) {
+            aggs_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.newBuilder(aggs_).mergeFrom(value).buildPartial();
+          } else {
+            aggs_ = value;
+          }
+          onChanged();
+        } else {
+          aggsBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000080;
+        return this;
       }
-      public Builder setTimeoutMs(int value) {
-        bitField0_ |= 0x00000020;
-        timeoutMs_ = value;
+      public Builder clearAggs() {
+        if (aggsBuilder_ == null) {
+          aggs_ = com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.getDefaultInstance();
+          onChanged();
+        } else {
+          aggsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000080);
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.Builder getAggsBuilder() {
+        bitField0_ |= 0x00000080;
         onChanged();
+        return getAggsFieldBuilder().getBuilder();
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.AggregationsOrBuilder getAggsOrBuilder() {
+        if (aggsBuilder_ != null) {
+          return aggsBuilder_.getMessageOrBuilder();
+        } else {
+          return aggs_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations, com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.AggregationsOrBuilder> 
+          getAggsFieldBuilder() {
+        if (aggsBuilder_ == null) {
+          aggsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations, com.alicloud.openservices.tablestore.core.protocol.Search.Aggregations.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.AggregationsOrBuilder>(
+                  aggs_,
+                  getParentForChildren(),
+                  isClean());
+          aggs_ = null;
+        }
+        return aggsBuilder_;
+      }
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.GroupBys group_bys = 11;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys groupBys_ = com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys, com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuilder> groupBysBuilder_;
+      public boolean hasGroupBys() {
+        return ((bitField0_ & 0x00000100) == 0x00000100);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys getGroupBys() {
+        if (groupBysBuilder_ == null) {
+          return groupBys_;
+        } else {
+          return groupBysBuilder_.getMessage();
+        }
+      }
+      public Builder setGroupBys(com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys value) {
+        if (groupBysBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          groupBys_ = value;
+          onChanged();
+        } else {
+          groupBysBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000100;
         return this;
       }
-      public Builder clearTimeoutMs() {
-        bitField0_ = (bitField0_ & ~0x00000020);
-        timeoutMs_ = 0;
+      public Builder setGroupBys(
+          com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.Builder builderForValue) {
+        if (groupBysBuilder_ == null) {
+          groupBys_ = builderForValue.build();
+          onChanged();
+        } else {
+          groupBysBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000100;
+        return this;
+      }
+      public Builder mergeGroupBys(com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys value) {
+        if (groupBysBuilder_ == null) {
+          if (((bitField0_ & 0x00000100) == 0x00000100) &&
+              groupBys_ != com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.getDefaultInstance()) {
+            groupBys_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.newBuilder(groupBys_).mergeFrom(value).buildPartial();
+          } else {
+            groupBys_ = value;
+          }
+          onChanged();
+        } else {
+          groupBysBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000100;
+        return this;
+      }
+      public Builder clearGroupBys() {
+        if (groupBysBuilder_ == null) {
+          groupBys_ = com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.getDefaultInstance();
+          onChanged();
+        } else {
+          groupBysBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000100);
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.Builder getGroupBysBuilder() {
+        bitField0_ |= 0x00000100;
         onChanged();
+        return getGroupBysFieldBuilder().getBuilder();
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuilder getGroupBysOrBuilder() {
+        if (groupBysBuilder_ != null) {
+          return groupBysBuilder_.getMessageOrBuilder();
+        } else {
+          return groupBys_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys, com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuilder> 
+          getGroupBysFieldBuilder() {
+        if (groupBysBuilder_ == null) {
+          groupBysBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys, com.alicloud.openservices.tablestore.core.protocol.Search.GroupBys.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.GroupBysOrBuilder>(
+                  groupBys_,
+                  getParentForChildren(),
+                  isClean());
+          groupBys_ = null;
+        }
+        return groupBysBuilder_;
+      }
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.Highlight highlight = 12;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.Highlight highlight_ = com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Highlight, com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightOrBuilder> highlightBuilder_;
+      public boolean hasHighlight() {
+        return ((bitField0_ & 0x00000200) == 0x00000200);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Highlight getHighlight() {
+        if (highlightBuilder_ == null) {
+          return highlight_;
+        } else {
+          return highlightBuilder_.getMessage();
+        }
+      }
+      public Builder setHighlight(com.alicloud.openservices.tablestore.core.protocol.Search.Highlight value) {
+        if (highlightBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          highlight_ = value;
+          onChanged();
+        } else {
+          highlightBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000200;
+        return this;
+      }
+      public Builder setHighlight(
+          com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.Builder builderForValue) {
+        if (highlightBuilder_ == null) {
+          highlight_ = builderForValue.build();
+          onChanged();
+        } else {
+          highlightBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000200;
+        return this;
+      }
+      public Builder mergeHighlight(com.alicloud.openservices.tablestore.core.protocol.Search.Highlight value) {
+        if (highlightBuilder_ == null) {
+          if (((bitField0_ & 0x00000200) == 0x00000200) &&
+              highlight_ != com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.getDefaultInstance()) {
+            highlight_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.newBuilder(highlight_).mergeFrom(value).buildPartial();
+          } else {
+            highlight_ = value;
+          }
+          onChanged();
+        } else {
+          highlightBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000200;
+        return this;
+      }
+      public Builder clearHighlight() {
+        if (highlightBuilder_ == null) {
+          highlight_ = com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.getDefaultInstance();
+          onChanged();
+        } else {
+          highlightBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000200);
         return this;
       }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.Builder getHighlightBuilder() {
+        bitField0_ |= 0x00000200;
+        onChanged();
+        return getHighlightFieldBuilder().getBuilder();
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightOrBuilder getHighlightOrBuilder() {
+        if (highlightBuilder_ != null) {
+          return highlightBuilder_.getMessageOrBuilder();
+        } else {
+          return highlight_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.Highlight, com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightOrBuilder> 
+          getHighlightFieldBuilder() {
+        if (highlightBuilder_ == null) {
+          highlightBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.Highlight, com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightOrBuilder>(
+                  highlight_,
+                  getParentForChildren(),
+                  isClean());
+          highlight_ = null;
+        }
+        return highlightBuilder_;
+      }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.SearchRequest)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.SearchQuery)
     }
     
     static {
-      defaultInstance = new SearchRequest(true);
+      defaultInstance = new SearchQuery(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.SearchRequest)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.SearchQuery)
   }
   
-  public interface SearchResponseOrBuilder
+  public interface HighlightOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
-    // optional int64 total_hits = 1;
-    boolean hasTotalHits();
-    long getTotalHits();
-    
-    // repeated bytes rows = 2;
-    java.util.List<com.google.protobuf.ByteString> getRowsList();
-    int getRowsCount();
-    com.google.protobuf.ByteString getRows(int index);
-    
-    // optional bool is_all_succeeded = 3;
-    boolean hasIsAllSucceeded();
-    boolean getIsAllSucceeded();
-    
-    // optional bytes next_token = 6;
-    boolean hasNextToken();
-    com.google.protobuf.ByteString getNextToken();
-    
-    // optional bytes aggs = 7;
-    boolean hasAggs();
-    com.google.protobuf.ByteString getAggs();
+    // repeated .com.alicloud.openservices.tablestore.core.protocol.HighlightParameter highlight_parameters = 1;
+    java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter> 
+        getHighlightParametersList();
+    com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter getHighlightParameters(int index);
+    int getHighlightParametersCount();
+    java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameterOrBuilder> 
+        getHighlightParametersOrBuilderList();
+    com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameterOrBuilder getHighlightParametersOrBuilder(
+        int index);
     
-    // optional bytes group_bys = 8;
-    boolean hasGroupBys();
-    com.google.protobuf.ByteString getGroupBys();
+    // optional .com.alicloud.openservices.tablestore.core.protocol.HighlightEncoder highlight_encoder = 2 [default = PLAIN_MODE];
+    boolean hasHighlightEncoder();
+    com.alicloud.openservices.tablestore.core.protocol.Search.HighlightEncoder getHighlightEncoder();
   }
-  public static final class SearchResponse extends
+  public static final class Highlight extends
       com.google.protobuf.GeneratedMessage
-      implements SearchResponseOrBuilder {
-    // Use SearchResponse.newBuilder() to construct.
-    private SearchResponse(Builder builder) {
+      implements HighlightOrBuilder {
+    // Use Highlight.newBuilder() to construct.
+    private Highlight(Builder builder) {
       super(builder);
     }
-    private SearchResponse(boolean noInit) {}
+    private Highlight(boolean noInit) {}
     
-    private static final SearchResponse defaultInstance;
-    public static SearchResponse getDefaultInstance() {
+    private static final Highlight defaultInstance;
+    public static Highlight getDefaultInstance() {
       return defaultInstance;
     }
     
-    public SearchResponse getDefaultInstanceForType() {
+    public Highlight getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchResponse_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Highlight_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchResponse_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Highlight_fieldAccessorTable;
     }
     
     private int bitField0_;
-    // optional int64 total_hits = 1;
-    public static final int TOTAL_HITS_FIELD_NUMBER = 1;
-    private long totalHits_;
-    public boolean hasTotalHits() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    public long getTotalHits() {
-      return totalHits_;
-    }
-    
-    // repeated bytes rows = 2;
-    public static final int ROWS_FIELD_NUMBER = 2;
-    private java.util.List<com.google.protobuf.ByteString> rows_;
-    public java.util.List<com.google.protobuf.ByteString>
-        getRowsList() {
-      return rows_;
-    }
-    public int getRowsCount() {
-      return rows_.size();
-    }
-    public com.google.protobuf.ByteString getRows(int index) {
-      return rows_.get(index);
-    }
-    
-    // optional bool is_all_succeeded = 3;
-    public static final int IS_ALL_SUCCEEDED_FIELD_NUMBER = 3;
-    private boolean isAllSucceeded_;
-    public boolean hasIsAllSucceeded() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
+    // repeated .com.alicloud.openservices.tablestore.core.protocol.HighlightParameter highlight_parameters = 1;
+    public static final int HIGHLIGHT_PARAMETERS_FIELD_NUMBER = 1;
+    private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter> highlightParameters_;
+    public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter> getHighlightParametersList() {
+      return highlightParameters_;
     }
-    public boolean getIsAllSucceeded() {
-      return isAllSucceeded_;
-    }
-    
-    // optional bytes next_token = 6;
-    public static final int NEXT_TOKEN_FIELD_NUMBER = 6;
-    private com.google.protobuf.ByteString nextToken_;
-    public boolean hasNextToken() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
+    public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameterOrBuilder> 
+        getHighlightParametersOrBuilderList() {
+      return highlightParameters_;
     }
-    public com.google.protobuf.ByteString getNextToken() {
-      return nextToken_;
+    public int getHighlightParametersCount() {
+      return highlightParameters_.size();
     }
-    
-    // optional bytes aggs = 7;
-    public static final int AGGS_FIELD_NUMBER = 7;
-    private com.google.protobuf.ByteString aggs_;
-    public boolean hasAggs() {
-      return ((bitField0_ & 0x00000008) == 0x00000008);
+    public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter getHighlightParameters(int index) {
+      return highlightParameters_.get(index);
     }
-    public com.google.protobuf.ByteString getAggs() {
-      return aggs_;
+    public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameterOrBuilder getHighlightParametersOrBuilder(
+        int index) {
+      return highlightParameters_.get(index);
     }
     
-    // optional bytes group_bys = 8;
-    public static final int GROUP_BYS_FIELD_NUMBER = 8;
-    private com.google.protobuf.ByteString groupBys_;
-    public boolean hasGroupBys() {
-      return ((bitField0_ & 0x00000010) == 0x00000010);
+    // optional .com.alicloud.openservices.tablestore.core.protocol.HighlightEncoder highlight_encoder = 2 [default = PLAIN_MODE];
+    public static final int HIGHLIGHT_ENCODER_FIELD_NUMBER = 2;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.HighlightEncoder highlightEncoder_;
+    public boolean hasHighlightEncoder() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public com.google.protobuf.ByteString getGroupBys() {
-      return groupBys_;
+    public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightEncoder getHighlightEncoder() {
+      return highlightEncoder_;
     }
     
     private void initFields() {
-      totalHits_ = 0L;
-      rows_ = java.util.Collections.emptyList();;
-      isAllSucceeded_ = false;
-      nextToken_ = com.google.protobuf.ByteString.EMPTY;
-      aggs_ = com.google.protobuf.ByteString.EMPTY;
-      groupBys_ = com.google.protobuf.ByteString.EMPTY;
+      highlightParameters_ = java.util.Collections.emptyList();
+      highlightEncoder_ = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightEncoder.PLAIN_MODE;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -65873,23 +67353,11 @@ public final boolean isInitialized() {
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeInt64(1, totalHits_);
-      }
-      for (int i = 0; i < rows_.size(); i++) {
-        output.writeBytes(2, rows_.get(i));
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBool(3, isAllSucceeded_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeBytes(6, nextToken_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeBytes(7, aggs_);
+      for (int i = 0; i < highlightParameters_.size(); i++) {
+        output.writeMessage(1, highlightParameters_.get(i));
       }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        output.writeBytes(8, groupBys_);
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeEnum(2, highlightEncoder_.getNumber());
       }
       getUnknownFields().writeTo(output);
     }
@@ -65900,34 +67368,13 @@ public int getSerializedSize() {
       if (size != -1) return size;
     
       size = 0;
+      for (int i = 0; i < highlightParameters_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, highlightParameters_.get(i));
+      }
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeInt64Size(1, totalHits_);
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < rows_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeBytesSizeNoTag(rows_.get(i));
-        }
-        size += dataSize;
-        size += 1 * getRowsList().size();
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(3, isAllSucceeded_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(6, nextToken_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(7, aggs_);
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(8, groupBys_);
+          .computeEnumSize(2, highlightEncoder_.getNumber());
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -65941,41 +67388,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Highlight parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Highlight parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Highlight parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Highlight parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Highlight parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Highlight parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Highlight parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -65984,7 +67431,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRe
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Highlight parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -65995,12 +67442,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRe
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Highlight parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.Highlight parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -66010,7 +67457,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRe
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.Highlight prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -66023,18 +67470,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponseOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.HighlightOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchResponse_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Highlight_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchResponse_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_Highlight_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -66045,6 +67492,7 @@ private Builder(BuilderParent parent) {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getHighlightParametersFieldBuilder();
         }
       }
       private static Builder create() {
@@ -66053,18 +67501,14 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        totalHits_ = 0L;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        rows_ = java.util.Collections.emptyList();;
+        if (highlightParametersBuilder_ == null) {
+          highlightParameters_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          highlightParametersBuilder_.clear();
+        }
+        highlightEncoder_ = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightEncoder.PLAIN_MODE;
         bitField0_ = (bitField0_ & ~0x00000002);
-        isAllSucceeded_ = false;
-        bitField0_ = (bitField0_ & ~0x00000004);
-        nextToken_ = com.google.protobuf.ByteString.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000008);
-        aggs_ = com.google.protobuf.ByteString.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000010);
-        groupBys_ = com.google.protobuf.ByteString.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000020);
         return this;
       }
       
@@ -66074,24 +67518,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Highlight getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Highlight build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.Highlight result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.Highlight buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.Highlight result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -66099,75 +67543,67 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse result = new com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.Highlight buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.Highlight result = new com.alicloud.openservices.tablestore.core.protocol.Search.Highlight(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.totalHits_ = totalHits_;
-        if (((bitField0_ & 0x00000002) == 0x00000002)) {
-          rows_ = java.util.Collections.unmodifiableList(rows_);
-          bitField0_ = (bitField0_ & ~0x00000002);
-        }
-        result.rows_ = rows_;
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.isAllSucceeded_ = isAllSucceeded_;
-        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
-          to_bitField0_ |= 0x00000004;
-        }
-        result.nextToken_ = nextToken_;
-        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
-          to_bitField0_ |= 0x00000008;
+        if (highlightParametersBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) == 0x00000001)) {
+            highlightParameters_ = java.util.Collections.unmodifiableList(highlightParameters_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.highlightParameters_ = highlightParameters_;
+        } else {
+          result.highlightParameters_ = highlightParametersBuilder_.build();
         }
-        result.aggs_ = aggs_;
-        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
-          to_bitField0_ |= 0x00000010;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000001;
         }
-        result.groupBys_ = groupBys_;
+        result.highlightEncoder_ = highlightEncoder_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.Highlight) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.Highlight)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse.getDefaultInstance()) return this;
-        if (other.hasTotalHits()) {
-          setTotalHits(other.getTotalHits());
-        }
-        if (!other.rows_.isEmpty()) {
-          if (rows_.isEmpty()) {
-            rows_ = other.rows_;
-            bitField0_ = (bitField0_ & ~0x00000002);
-          } else {
-            ensureRowsIsMutable();
-            rows_.addAll(other.rows_);
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.Highlight other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.getDefaultInstance()) return this;
+        if (highlightParametersBuilder_ == null) {
+          if (!other.highlightParameters_.isEmpty()) {
+            if (highlightParameters_.isEmpty()) {
+              highlightParameters_ = other.highlightParameters_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureHighlightParametersIsMutable();
+              highlightParameters_.addAll(other.highlightParameters_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.highlightParameters_.isEmpty()) {
+            if (highlightParametersBuilder_.isEmpty()) {
+              highlightParametersBuilder_.dispose();
+              highlightParametersBuilder_ = null;
+              highlightParameters_ = other.highlightParameters_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              highlightParametersBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getHighlightParametersFieldBuilder() : null;
+            } else {
+              highlightParametersBuilder_.addAllMessages(other.highlightParameters_);
+            }
           }
-          onChanged();
-        }
-        if (other.hasIsAllSucceeded()) {
-          setIsAllSucceeded(other.getIsAllSucceeded());
-        }
-        if (other.hasNextToken()) {
-          setNextToken(other.getNextToken());
-        }
-        if (other.hasAggs()) {
-          setAggs(other.getAggs());
         }
-        if (other.hasGroupBys()) {
-          setGroupBys(other.getGroupBys());
+        if (other.hasHighlightEncoder()) {
+          setHighlightEncoder(other.getHighlightEncoder());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -66200,34 +67636,21 @@ public Builder mergeFrom(
               }
               break;
             }
-            case 8: {
-              bitField0_ |= 0x00000001;
-              totalHits_ = input.readInt64();
-              break;
-            }
-            case 18: {
-              ensureRowsIsMutable();
-              rows_.add(input.readBytes());
-              break;
-            }
-            case 24: {
-              bitField0_ |= 0x00000004;
-              isAllSucceeded_ = input.readBool();
-              break;
-            }
-            case 50: {
-              bitField0_ |= 0x00000008;
-              nextToken_ = input.readBytes();
-              break;
-            }
-            case 58: {
-              bitField0_ |= 0x00000010;
-              aggs_ = input.readBytes();
+            case 10: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addHighlightParameters(subBuilder.buildPartial());
               break;
             }
-            case 66: {
-              bitField0_ |= 0x00000020;
-              groupBys_ = input.readBytes();
+            case 16: {
+              int rawValue = input.readEnum();
+              com.alicloud.openservices.tablestore.core.protocol.Search.HighlightEncoder value = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightEncoder.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(2, rawValue);
+              } else {
+                bitField0_ |= 0x00000002;
+                highlightEncoder_ = value;
+              }
               break;
             }
           }
@@ -66236,245 +67659,416 @@ public Builder mergeFrom(
       
       private int bitField0_;
       
-      // optional int64 total_hits = 1;
-      private long totalHits_ ;
-      public boolean hasTotalHits() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
-      }
-      public long getTotalHits() {
-        return totalHits_;
-      }
-      public Builder setTotalHits(long value) {
-        bitField0_ |= 0x00000001;
-        totalHits_ = value;
-        onChanged();
-        return this;
-      }
-      public Builder clearTotalHits() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        totalHits_ = 0L;
-        onChanged();
-        return this;
-      }
-      
-      // repeated bytes rows = 2;
-      private java.util.List<com.google.protobuf.ByteString> rows_ = java.util.Collections.emptyList();;
-      private void ensureRowsIsMutable() {
-        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
-          rows_ = new java.util.ArrayList<com.google.protobuf.ByteString>(rows_);
-          bitField0_ |= 0x00000002;
+      // repeated .com.alicloud.openservices.tablestore.core.protocol.HighlightParameter highlight_parameters = 1;
+      private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter> highlightParameters_ =
+        java.util.Collections.emptyList();
+      private void ensureHighlightParametersIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          highlightParameters_ = new java.util.ArrayList<com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter>(highlightParameters_);
+          bitField0_ |= 0x00000001;
          }
       }
-      public java.util.List<com.google.protobuf.ByteString>
-          getRowsList() {
-        return java.util.Collections.unmodifiableList(rows_);
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameterOrBuilder> highlightParametersBuilder_;
+      
+      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter> getHighlightParametersList() {
+        if (highlightParametersBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(highlightParameters_);
+        } else {
+          return highlightParametersBuilder_.getMessageList();
+        }
       }
-      public int getRowsCount() {
-        return rows_.size();
+      public int getHighlightParametersCount() {
+        if (highlightParametersBuilder_ == null) {
+          return highlightParameters_.size();
+        } else {
+          return highlightParametersBuilder_.getCount();
+        }
       }
-      public com.google.protobuf.ByteString getRows(int index) {
-        return rows_.get(index);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter getHighlightParameters(int index) {
+        if (highlightParametersBuilder_ == null) {
+          return highlightParameters_.get(index);
+        } else {
+          return highlightParametersBuilder_.getMessage(index);
+        }
       }
-      public Builder setRows(
-          int index, com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureRowsIsMutable();
-        rows_.set(index, value);
-        onChanged();
+      public Builder setHighlightParameters(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter value) {
+        if (highlightParametersBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureHighlightParametersIsMutable();
+          highlightParameters_.set(index, value);
+          onChanged();
+        } else {
+          highlightParametersBuilder_.setMessage(index, value);
+        }
         return this;
       }
-      public Builder addRows(com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureRowsIsMutable();
-        rows_.add(value);
-        onChanged();
+      public Builder setHighlightParameters(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.Builder builderForValue) {
+        if (highlightParametersBuilder_ == null) {
+          ensureHighlightParametersIsMutable();
+          highlightParameters_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          highlightParametersBuilder_.setMessage(index, builderForValue.build());
+        }
         return this;
       }
-      public Builder addAllRows(
-          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
-        ensureRowsIsMutable();
-        super.addAll(values, rows_);
-        onChanged();
+      public Builder addHighlightParameters(com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter value) {
+        if (highlightParametersBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureHighlightParametersIsMutable();
+          highlightParameters_.add(value);
+          onChanged();
+        } else {
+          highlightParametersBuilder_.addMessage(value);
+        }
         return this;
       }
-      public Builder clearRows() {
-        rows_ = java.util.Collections.emptyList();;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        onChanged();
+      public Builder addHighlightParameters(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter value) {
+        if (highlightParametersBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureHighlightParametersIsMutable();
+          highlightParameters_.add(index, value);
+          onChanged();
+        } else {
+          highlightParametersBuilder_.addMessage(index, value);
+        }
         return this;
       }
-      
-      // optional bool is_all_succeeded = 3;
-      private boolean isAllSucceeded_ ;
-      public boolean hasIsAllSucceeded() {
-        return ((bitField0_ & 0x00000004) == 0x00000004);
+      public Builder addHighlightParameters(
+          com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.Builder builderForValue) {
+        if (highlightParametersBuilder_ == null) {
+          ensureHighlightParametersIsMutable();
+          highlightParameters_.add(builderForValue.build());
+          onChanged();
+        } else {
+          highlightParametersBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
       }
-      public boolean getIsAllSucceeded() {
-        return isAllSucceeded_;
+      public Builder addHighlightParameters(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.Builder builderForValue) {
+        if (highlightParametersBuilder_ == null) {
+          ensureHighlightParametersIsMutable();
+          highlightParameters_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          highlightParametersBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
       }
-      public Builder setIsAllSucceeded(boolean value) {
-        bitField0_ |= 0x00000004;
-        isAllSucceeded_ = value;
-        onChanged();
+      public Builder addAllHighlightParameters(
+          java.lang.Iterable<? extends com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter> values) {
+        if (highlightParametersBuilder_ == null) {
+          ensureHighlightParametersIsMutable();
+          super.addAll(values, highlightParameters_);
+          onChanged();
+        } else {
+          highlightParametersBuilder_.addAllMessages(values);
+        }
         return this;
       }
-      public Builder clearIsAllSucceeded() {
-        bitField0_ = (bitField0_ & ~0x00000004);
-        isAllSucceeded_ = false;
-        onChanged();
+      public Builder clearHighlightParameters() {
+        if (highlightParametersBuilder_ == null) {
+          highlightParameters_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          highlightParametersBuilder_.clear();
+        }
         return this;
       }
-      
-      // optional bytes next_token = 6;
-      private com.google.protobuf.ByteString nextToken_ = com.google.protobuf.ByteString.EMPTY;
-      public boolean hasNextToken() {
-        return ((bitField0_ & 0x00000008) == 0x00000008);
+      public Builder removeHighlightParameters(int index) {
+        if (highlightParametersBuilder_ == null) {
+          ensureHighlightParametersIsMutable();
+          highlightParameters_.remove(index);
+          onChanged();
+        } else {
+          highlightParametersBuilder_.remove(index);
+        }
+        return this;
       }
-      public com.google.protobuf.ByteString getNextToken() {
-        return nextToken_;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.Builder getHighlightParametersBuilder(
+          int index) {
+        return getHighlightParametersFieldBuilder().getBuilder(index);
       }
-      public Builder setNextToken(com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000008;
-        nextToken_ = value;
-        onChanged();
-        return this;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameterOrBuilder getHighlightParametersOrBuilder(
+          int index) {
+        if (highlightParametersBuilder_ == null) {
+          return highlightParameters_.get(index);  } else {
+          return highlightParametersBuilder_.getMessageOrBuilder(index);
+        }
       }
-      public Builder clearNextToken() {
-        bitField0_ = (bitField0_ & ~0x00000008);
-        nextToken_ = getDefaultInstance().getNextToken();
-        onChanged();
-        return this;
+      public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameterOrBuilder> 
+           getHighlightParametersOrBuilderList() {
+        if (highlightParametersBuilder_ != null) {
+          return highlightParametersBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(highlightParameters_);
+        }
       }
-      
-      // optional bytes aggs = 7;
-      private com.google.protobuf.ByteString aggs_ = com.google.protobuf.ByteString.EMPTY;
-      public boolean hasAggs() {
-        return ((bitField0_ & 0x00000010) == 0x00000010);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.Builder addHighlightParametersBuilder() {
+        return getHighlightParametersFieldBuilder().addBuilder(
+            com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.getDefaultInstance());
       }
-      public com.google.protobuf.ByteString getAggs() {
-        return aggs_;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.Builder addHighlightParametersBuilder(
+          int index) {
+        return getHighlightParametersFieldBuilder().addBuilder(
+            index, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.getDefaultInstance());
       }
-      public Builder setAggs(com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000010;
-        aggs_ = value;
-        onChanged();
-        return this;
+      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.Builder> 
+           getHighlightParametersBuilderList() {
+        return getHighlightParametersFieldBuilder().getBuilderList();
       }
-      public Builder clearAggs() {
-        bitField0_ = (bitField0_ & ~0x00000010);
-        aggs_ = getDefaultInstance().getAggs();
-        onChanged();
-        return this;
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameterOrBuilder> 
+          getHighlightParametersFieldBuilder() {
+        if (highlightParametersBuilder_ == null) {
+          highlightParametersBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameterOrBuilder>(
+                  highlightParameters_,
+                  ((bitField0_ & 0x00000001) == 0x00000001),
+                  getParentForChildren(),
+                  isClean());
+          highlightParameters_ = null;
+        }
+        return highlightParametersBuilder_;
       }
       
-      // optional bytes group_bys = 8;
-      private com.google.protobuf.ByteString groupBys_ = com.google.protobuf.ByteString.EMPTY;
-      public boolean hasGroupBys() {
-        return ((bitField0_ & 0x00000020) == 0x00000020);
+      // optional .com.alicloud.openservices.tablestore.core.protocol.HighlightEncoder highlight_encoder = 2 [default = PLAIN_MODE];
+      private com.alicloud.openservices.tablestore.core.protocol.Search.HighlightEncoder highlightEncoder_ = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightEncoder.PLAIN_MODE;
+      public boolean hasHighlightEncoder() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
       }
-      public com.google.protobuf.ByteString getGroupBys() {
-        return groupBys_;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightEncoder getHighlightEncoder() {
+        return highlightEncoder_;
       }
-      public Builder setGroupBys(com.google.protobuf.ByteString value) {
+      public Builder setHighlightEncoder(com.alicloud.openservices.tablestore.core.protocol.Search.HighlightEncoder value) {
         if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000020;
-        groupBys_ = value;
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000002;
+        highlightEncoder_ = value;
         onChanged();
         return this;
       }
-      public Builder clearGroupBys() {
-        bitField0_ = (bitField0_ & ~0x00000020);
-        groupBys_ = getDefaultInstance().getGroupBys();
+      public Builder clearHighlightEncoder() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        highlightEncoder_ = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightEncoder.PLAIN_MODE;
         onChanged();
         return this;
       }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.SearchResponse)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.Highlight)
     }
     
     static {
-      defaultInstance = new SearchResponse(true);
+      defaultInstance = new Highlight(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.SearchResponse)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.Highlight)
   }
   
-  public interface DateTimeValueOrBuilder
+  public interface HighlightParameterOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
-    // optional int32 value = 1;
-    boolean hasValue();
-    int getValue();
+    // optional string field_name = 1;
+    boolean hasFieldName();
+    String getFieldName();
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.DateTimeUnit unit = 2;
-    boolean hasUnit();
-    com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit getUnit();
+    // optional int32 number_of_fragments = 2;
+    boolean hasNumberOfFragments();
+    int getNumberOfFragments();
+    
+    // optional int32 fragment_size = 3;
+    boolean hasFragmentSize();
+    int getFragmentSize();
+    
+    // optional string pre_tag = 4;
+    boolean hasPreTag();
+    String getPreTag();
+    
+    // optional string post_tag = 5;
+    boolean hasPostTag();
+    String getPostTag();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.HighlightFragmentOrder fragments_order = 6 [default = TEXT_SEQUENCE];
+    boolean hasFragmentsOrder();
+    com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFragmentOrder getFragmentsOrder();
   }
-  public static final class DateTimeValue extends
+  public static final class HighlightParameter extends
       com.google.protobuf.GeneratedMessage
-      implements DateTimeValueOrBuilder {
-    // Use DateTimeValue.newBuilder() to construct.
-    private DateTimeValue(Builder builder) {
+      implements HighlightParameterOrBuilder {
+    // Use HighlightParameter.newBuilder() to construct.
+    private HighlightParameter(Builder builder) {
       super(builder);
     }
-    private DateTimeValue(boolean noInit) {}
+    private HighlightParameter(boolean noInit) {}
     
-    private static final DateTimeValue defaultInstance;
-    public static DateTimeValue getDefaultInstance() {
+    private static final HighlightParameter defaultInstance;
+    public static HighlightParameter getDefaultInstance() {
       return defaultInstance;
     }
     
-    public DateTimeValue getDefaultInstanceForType() {
+    public HighlightParameter getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_DateTimeValue_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightParameter_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_DateTimeValue_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightParameter_fieldAccessorTable;
     }
     
     private int bitField0_;
-    // optional int32 value = 1;
-    public static final int VALUE_FIELD_NUMBER = 1;
-    private int value_;
-    public boolean hasValue() {
+    // optional string field_name = 1;
+    public static final int FIELD_NAME_FIELD_NUMBER = 1;
+    private java.lang.Object fieldName_;
+    public boolean hasFieldName() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public int getValue() {
-      return value_;
+    public String getFieldName() {
+      java.lang.Object ref = fieldName_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          fieldName_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getFieldNameBytes() {
+      java.lang.Object ref = fieldName_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        fieldName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.DateTimeUnit unit = 2;
-    public static final int UNIT_FIELD_NUMBER = 2;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit unit_;
-    public boolean hasUnit() {
+    // optional int32 number_of_fragments = 2;
+    public static final int NUMBER_OF_FRAGMENTS_FIELD_NUMBER = 2;
+    private int numberOfFragments_;
+    public boolean hasNumberOfFragments() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit getUnit() {
-      return unit_;
+    public int getNumberOfFragments() {
+      return numberOfFragments_;
+    }
+    
+    // optional int32 fragment_size = 3;
+    public static final int FRAGMENT_SIZE_FIELD_NUMBER = 3;
+    private int fragmentSize_;
+    public boolean hasFragmentSize() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public int getFragmentSize() {
+      return fragmentSize_;
+    }
+    
+    // optional string pre_tag = 4;
+    public static final int PRE_TAG_FIELD_NUMBER = 4;
+    private java.lang.Object preTag_;
+    public boolean hasPreTag() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public String getPreTag() {
+      java.lang.Object ref = preTag_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          preTag_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getPreTagBytes() {
+      java.lang.Object ref = preTag_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        preTag_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional string post_tag = 5;
+    public static final int POST_TAG_FIELD_NUMBER = 5;
+    private java.lang.Object postTag_;
+    public boolean hasPostTag() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    public String getPostTag() {
+      java.lang.Object ref = postTag_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          postTag_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getPostTagBytes() {
+      java.lang.Object ref = postTag_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        postTag_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.HighlightFragmentOrder fragments_order = 6 [default = TEXT_SEQUENCE];
+    public static final int FRAGMENTS_ORDER_FIELD_NUMBER = 6;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFragmentOrder fragmentsOrder_;
+    public boolean hasFragmentsOrder() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFragmentOrder getFragmentsOrder() {
+      return fragmentsOrder_;
     }
     
     private void initFields() {
-      value_ = 0;
-      unit_ = com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit.YEAR;
+      fieldName_ = "";
+      numberOfFragments_ = 0;
+      fragmentSize_ = 0;
+      preTag_ = "";
+      postTag_ = "";
+      fragmentsOrder_ = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFragmentOrder.TEXT_SEQUENCE;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -66489,10 +68083,22 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeInt32(1, value_);
+        output.writeBytes(1, getFieldNameBytes());
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeEnum(2, unit_.getNumber());
+        output.writeInt32(2, numberOfFragments_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeInt32(3, fragmentSize_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeBytes(4, getPreTagBytes());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeBytes(5, getPostTagBytes());
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeEnum(6, fragmentsOrder_.getNumber());
       }
       getUnknownFields().writeTo(output);
     }
@@ -66505,11 +68111,27 @@ public int getSerializedSize() {
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(1, value_);
+          .computeBytesSize(1, getFieldNameBytes());
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(2, unit_.getNumber());
+          .computeInt32Size(2, numberOfFragments_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(3, fragmentSize_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(4, getPreTagBytes());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(5, getPostTagBytes());
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(6, fragmentsOrder_.getNumber());
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -66523,41 +68145,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -66566,7 +68188,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTime
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -66577,12 +68199,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTime
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -66592,7 +68214,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTime
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -66605,18 +68227,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValueOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameterOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_DateTimeValue_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightParameter_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_DateTimeValue_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightParameter_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -66635,10 +68257,18 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        value_ = 0;
+        fieldName_ = "";
         bitField0_ = (bitField0_ & ~0x00000001);
-        unit_ = com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit.YEAR;
+        numberOfFragments_ = 0;
         bitField0_ = (bitField0_ & ~0x00000002);
+        fragmentSize_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        preTag_ = "";
+        bitField0_ = (bitField0_ & ~0x00000008);
+        postTag_ = "";
+        bitField0_ = (bitField0_ & ~0x00000010);
+        fragmentsOrder_ = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFragmentOrder.TEXT_SEQUENCE;
+        bitField0_ = (bitField0_ & ~0x00000020);
         return this;
       }
       
@@ -66648,24 +68278,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -66673,39 +68303,67 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue result = new com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter result = new com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        result.value_ = value_;
+        result.fieldName_ = fieldName_;
         if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
           to_bitField0_ |= 0x00000002;
         }
-        result.unit_ = unit_;
+        result.numberOfFragments_ = numberOfFragments_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.fragmentSize_ = fragmentSize_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.preTag_ = preTag_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.postTag_ = postTag_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        result.fragmentsOrder_ = fragmentsOrder_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.getDefaultInstance()) return this;
-        if (other.hasValue()) {
-          setValue(other.getValue());
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.getDefaultInstance()) return this;
+        if (other.hasFieldName()) {
+          setFieldName(other.getFieldName());
         }
-        if (other.hasUnit()) {
-          setUnit(other.getUnit());
+        if (other.hasNumberOfFragments()) {
+          setNumberOfFragments(other.getNumberOfFragments());
+        }
+        if (other.hasFragmentSize()) {
+          setFragmentSize(other.getFragmentSize());
+        }
+        if (other.hasPreTag()) {
+          setPreTag(other.getPreTag());
+        }
+        if (other.hasPostTag()) {
+          setPostTag(other.getPostTag());
+        }
+        if (other.hasFragmentsOrder()) {
+          setFragmentsOrder(other.getFragmentsOrder());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -66738,19 +68396,39 @@ public Builder mergeFrom(
               }
               break;
             }
-            case 8: {
+            case 10: {
               bitField0_ |= 0x00000001;
-              value_ = input.readInt32();
+              fieldName_ = input.readBytes();
               break;
             }
             case 16: {
+              bitField0_ |= 0x00000002;
+              numberOfFragments_ = input.readInt32();
+              break;
+            }
+            case 24: {
+              bitField0_ |= 0x00000004;
+              fragmentSize_ = input.readInt32();
+              break;
+            }
+            case 34: {
+              bitField0_ |= 0x00000008;
+              preTag_ = input.readBytes();
+              break;
+            }
+            case 42: {
+              bitField0_ |= 0x00000010;
+              postTag_ = input.readBytes();
+              break;
+            }
+            case 48: {
               int rawValue = input.readEnum();
-              com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit value = com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit.valueOf(rawValue);
+              com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFragmentOrder value = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFragmentOrder.valueOf(rawValue);
               if (value == null) {
-                unknownFields.mergeVarintField(2, rawValue);
+                unknownFields.mergeVarintField(6, rawValue);
               } else {
-                bitField0_ |= 0x00000002;
-                unit_ = value;
+                bitField0_ |= 0x00000020;
+                fragmentsOrder_ = value;
               }
               break;
             }
@@ -66760,125 +68438,259 @@ public Builder mergeFrom(
       
       private int bitField0_;
       
-      // optional int32 value = 1;
-      private int value_ ;
-      public boolean hasValue() {
+      // optional string field_name = 1;
+      private java.lang.Object fieldName_ = "";
+      public boolean hasFieldName() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public int getValue() {
-        return value_;
+      public String getFieldName() {
+        java.lang.Object ref = fieldName_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          fieldName_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
       }
-      public Builder setValue(int value) {
-        bitField0_ |= 0x00000001;
-        value_ = value;
+      public Builder setFieldName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        fieldName_ = value;
         onChanged();
         return this;
       }
-      public Builder clearValue() {
+      public Builder clearFieldName() {
         bitField0_ = (bitField0_ & ~0x00000001);
-        value_ = 0;
+        fieldName_ = getDefaultInstance().getFieldName();
         onChanged();
         return this;
       }
+      void setFieldName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        fieldName_ = value;
+        onChanged();
+      }
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.DateTimeUnit unit = 2;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit unit_ = com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit.YEAR;
-      public boolean hasUnit() {
+      // optional int32 number_of_fragments = 2;
+      private int numberOfFragments_ ;
+      public boolean hasNumberOfFragments() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit getUnit() {
-        return unit_;
+      public int getNumberOfFragments() {
+        return numberOfFragments_;
       }
-      public Builder setUnit(com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit value) {
+      public Builder setNumberOfFragments(int value) {
+        bitField0_ |= 0x00000002;
+        numberOfFragments_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearNumberOfFragments() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        numberOfFragments_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // optional int32 fragment_size = 3;
+      private int fragmentSize_ ;
+      public boolean hasFragmentSize() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public int getFragmentSize() {
+        return fragmentSize_;
+      }
+      public Builder setFragmentSize(int value) {
+        bitField0_ |= 0x00000004;
+        fragmentSize_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearFragmentSize() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        fragmentSize_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // optional string pre_tag = 4;
+      private java.lang.Object preTag_ = "";
+      public boolean hasPreTag() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public String getPreTag() {
+        java.lang.Object ref = preTag_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          preTag_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setPreTag(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000008;
+        preTag_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearPreTag() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        preTag_ = getDefaultInstance().getPreTag();
+        onChanged();
+        return this;
+      }
+      void setPreTag(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000008;
+        preTag_ = value;
+        onChanged();
+      }
+      
+      // optional string post_tag = 5;
+      private java.lang.Object postTag_ = "";
+      public boolean hasPostTag() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public String getPostTag() {
+        java.lang.Object ref = postTag_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          postTag_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setPostTag(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000010;
+        postTag_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearPostTag() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        postTag_ = getDefaultInstance().getPostTag();
+        onChanged();
+        return this;
+      }
+      void setPostTag(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000010;
+        postTag_ = value;
+        onChanged();
+      }
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.HighlightFragmentOrder fragments_order = 6 [default = TEXT_SEQUENCE];
+      private com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFragmentOrder fragmentsOrder_ = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFragmentOrder.TEXT_SEQUENCE;
+      public boolean hasFragmentsOrder() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFragmentOrder getFragmentsOrder() {
+        return fragmentsOrder_;
+      }
+      public Builder setFragmentsOrder(com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFragmentOrder value) {
         if (value == null) {
           throw new NullPointerException();
         }
-        bitField0_ |= 0x00000002;
-        unit_ = value;
+        bitField0_ |= 0x00000020;
+        fragmentsOrder_ = value;
         onChanged();
         return this;
       }
-      public Builder clearUnit() {
-        bitField0_ = (bitField0_ & ~0x00000002);
-        unit_ = com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit.YEAR;
+      public Builder clearFragmentsOrder() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        fragmentsOrder_ = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFragmentOrder.TEXT_SEQUENCE;
         onChanged();
         return this;
       }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.DateTimeValue)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.HighlightParameter)
     }
     
     static {
-      defaultInstance = new DateTimeValue(true);
+      defaultInstance = new HighlightParameter(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.DateTimeValue)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.HighlightParameter)
   }
   
-  public interface SingleWordAnalyzerParameterOrBuilder
+  public interface ColumnsToGetOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
-    // optional bool case_sensitive = 1;
-    boolean hasCaseSensitive();
-    boolean getCaseSensitive();
+    // optional .com.alicloud.openservices.tablestore.core.protocol.ColumnReturnType return_type = 1;
+    boolean hasReturnType();
+    com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType getReturnType();
     
-    // optional bool delimit_word = 2;
-    boolean hasDelimitWord();
-    boolean getDelimitWord();
+    // repeated string column_names = 2;
+    java.util.List<String> getColumnNamesList();
+    int getColumnNamesCount();
+    String getColumnNames(int index);
   }
-  public static final class SingleWordAnalyzerParameter extends
+  public static final class ColumnsToGet extends
       com.google.protobuf.GeneratedMessage
-      implements SingleWordAnalyzerParameterOrBuilder {
-    // Use SingleWordAnalyzerParameter.newBuilder() to construct.
-    private SingleWordAnalyzerParameter(Builder builder) {
+      implements ColumnsToGetOrBuilder {
+    // Use ColumnsToGet.newBuilder() to construct.
+    private ColumnsToGet(Builder builder) {
       super(builder);
     }
-    private SingleWordAnalyzerParameter(boolean noInit) {}
+    private ColumnsToGet(boolean noInit) {}
     
-    private static final SingleWordAnalyzerParameter defaultInstance;
-    public static SingleWordAnalyzerParameter getDefaultInstance() {
+    private static final ColumnsToGet defaultInstance;
+    public static ColumnsToGet getDefaultInstance() {
       return defaultInstance;
     }
     
-    public SingleWordAnalyzerParameter getDefaultInstanceForType() {
+    public ColumnsToGet getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SingleWordAnalyzerParameter_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ColumnsToGet_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SingleWordAnalyzerParameter_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ColumnsToGet_fieldAccessorTable;
     }
     
     private int bitField0_;
-    // optional bool case_sensitive = 1;
-    public static final int CASE_SENSITIVE_FIELD_NUMBER = 1;
-    private boolean caseSensitive_;
-    public boolean hasCaseSensitive() {
+    // optional .com.alicloud.openservices.tablestore.core.protocol.ColumnReturnType return_type = 1;
+    public static final int RETURN_TYPE_FIELD_NUMBER = 1;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType returnType_;
+    public boolean hasReturnType() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public boolean getCaseSensitive() {
-      return caseSensitive_;
+    public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType getReturnType() {
+      return returnType_;
     }
     
-    // optional bool delimit_word = 2;
-    public static final int DELIMIT_WORD_FIELD_NUMBER = 2;
-    private boolean delimitWord_;
-    public boolean hasDelimitWord() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
+    // repeated string column_names = 2;
+    public static final int COLUMN_NAMES_FIELD_NUMBER = 2;
+    private com.google.protobuf.LazyStringList columnNames_;
+    public java.util.List<String>
+        getColumnNamesList() {
+      return columnNames_;
     }
-    public boolean getDelimitWord() {
-      return delimitWord_;
+    public int getColumnNamesCount() {
+      return columnNames_.size();
+    }
+    public String getColumnNames(int index) {
+      return columnNames_.get(index);
     }
     
     private void initFields() {
-      caseSensitive_ = false;
-      delimitWord_ = false;
+      returnType_ = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType.RETURN_ALL;
+      columnNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -66893,10 +68705,10 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBool(1, caseSensitive_);
+        output.writeEnum(1, returnType_.getNumber());
       }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBool(2, delimitWord_);
+      for (int i = 0; i < columnNames_.size(); i++) {
+        output.writeBytes(2, columnNames_.getByteString(i));
       }
       getUnknownFields().writeTo(output);
     }
@@ -66909,11 +68721,16 @@ public int getSerializedSize() {
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(1, caseSensitive_);
+          .computeEnumSize(1, returnType_.getNumber());
       }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(2, delimitWord_);
+      {
+        int dataSize = 0;
+        for (int i = 0; i < columnNames_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(columnNames_.getByteString(i));
+        }
+        size += dataSize;
+        size += 1 * getColumnNamesList().size();
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -66927,41 +68744,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -66970,7 +68787,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWo
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -66981,12 +68798,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWo
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -66996,7 +68813,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWo
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -67009,18 +68826,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameterOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGetOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SingleWordAnalyzerParameter_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ColumnsToGet_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SingleWordAnalyzerParameter_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_ColumnsToGet_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -67039,9 +68856,9 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        caseSensitive_ = false;
+        returnType_ = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType.RETURN_ALL;
         bitField0_ = (bitField0_ & ~0x00000001);
-        delimitWord_ = false;
+        columnNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
         bitField0_ = (bitField0_ & ~0x00000002);
         return this;
       }
@@ -67052,24 +68869,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -67077,39 +68894,48 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnal
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter result = new com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet result = new com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        result.caseSensitive_ = caseSensitive_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
+        result.returnType_ = returnType_;
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          columnNames_ = new com.google.protobuf.UnmodifiableLazyStringList(
+              columnNames_);
+          bitField0_ = (bitField0_ & ~0x00000002);
         }
-        result.delimitWord_ = delimitWord_;
+        result.columnNames_ = columnNames_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter.getDefaultInstance()) return this;
-        if (other.hasCaseSensitive()) {
-          setCaseSensitive(other.getCaseSensitive());
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.getDefaultInstance()) return this;
+        if (other.hasReturnType()) {
+          setReturnType(other.getReturnType());
         }
-        if (other.hasDelimitWord()) {
-          setDelimitWord(other.getDelimitWord());
+        if (!other.columnNames_.isEmpty()) {
+          if (columnNames_.isEmpty()) {
+            columnNames_ = other.columnNames_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensureColumnNamesIsMutable();
+            columnNames_.addAll(other.columnNames_);
+          }
+          onChanged();
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -67143,13 +68969,19 @@ public Builder mergeFrom(
               break;
             }
             case 8: {
-              bitField0_ |= 0x00000001;
-              caseSensitive_ = input.readBool();
+              int rawValue = input.readEnum();
+              com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType value = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(1, rawValue);
+              } else {
+                bitField0_ |= 0x00000001;
+                returnType_ = value;
+              }
               break;
             }
-            case 16: {
-              bitField0_ |= 0x00000002;
-              delimitWord_ = input.readBool();
+            case 18: {
+              ensureColumnNamesIsMutable();
+              columnNames_.add(input.readBytes());
               break;
             }
           }
@@ -67158,103 +68990,163 @@ public Builder mergeFrom(
       
       private int bitField0_;
       
-      // optional bool case_sensitive = 1;
-      private boolean caseSensitive_ ;
-      public boolean hasCaseSensitive() {
+      // optional .com.alicloud.openservices.tablestore.core.protocol.ColumnReturnType return_type = 1;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType returnType_ = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType.RETURN_ALL;
+      public boolean hasReturnType() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public boolean getCaseSensitive() {
-        return caseSensitive_;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType getReturnType() {
+        return returnType_;
       }
-      public Builder setCaseSensitive(boolean value) {
+      public Builder setReturnType(com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
         bitField0_ |= 0x00000001;
-        caseSensitive_ = value;
+        returnType_ = value;
         onChanged();
         return this;
       }
-      public Builder clearCaseSensitive() {
+      public Builder clearReturnType() {
         bitField0_ = (bitField0_ & ~0x00000001);
-        caseSensitive_ = false;
+        returnType_ = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType.RETURN_ALL;
         onChanged();
         return this;
       }
       
-      // optional bool delimit_word = 2;
-      private boolean delimitWord_ ;
-      public boolean hasDelimitWord() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
+      // repeated string column_names = 2;
+      private com.google.protobuf.LazyStringList columnNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensureColumnNamesIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          columnNames_ = new com.google.protobuf.LazyStringArrayList(columnNames_);
+          bitField0_ |= 0x00000002;
+         }
       }
-      public boolean getDelimitWord() {
-        return delimitWord_;
+      public java.util.List<String>
+          getColumnNamesList() {
+        return java.util.Collections.unmodifiableList(columnNames_);
       }
-      public Builder setDelimitWord(boolean value) {
-        bitField0_ |= 0x00000002;
-        delimitWord_ = value;
+      public int getColumnNamesCount() {
+        return columnNames_.size();
+      }
+      public String getColumnNames(int index) {
+        return columnNames_.get(index);
+      }
+      public Builder setColumnNames(
+          int index, String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureColumnNamesIsMutable();
+        columnNames_.set(index, value);
         onChanged();
         return this;
       }
-      public Builder clearDelimitWord() {
+      public Builder addColumnNames(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureColumnNamesIsMutable();
+        columnNames_.add(value);
+        onChanged();
+        return this;
+      }
+      public Builder addAllColumnNames(
+          java.lang.Iterable<String> values) {
+        ensureColumnNamesIsMutable();
+        super.addAll(values, columnNames_);
+        onChanged();
+        return this;
+      }
+      public Builder clearColumnNames() {
+        columnNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
         bitField0_ = (bitField0_ & ~0x00000002);
-        delimitWord_ = false;
         onChanged();
         return this;
       }
+      void addColumnNames(com.google.protobuf.ByteString value) {
+        ensureColumnNamesIsMutable();
+        columnNames_.add(value);
+        onChanged();
+      }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.SingleWordAnalyzerParameter)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.ColumnsToGet)
     }
     
     static {
-      defaultInstance = new SingleWordAnalyzerParameter(true);
+      defaultInstance = new ColumnsToGet(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.SingleWordAnalyzerParameter)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.ColumnsToGet)
   }
   
-  public interface SplitAnalyzerParameterOrBuilder
+  public interface SearchRequestOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
-    // optional string delimiter = 1;
-    boolean hasDelimiter();
-    String getDelimiter();
+    // optional string table_name = 1;
+    boolean hasTableName();
+    String getTableName();
+    
+    // optional string index_name = 2;
+    boolean hasIndexName();
+    String getIndexName();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.ColumnsToGet columns_to_get = 3;
+    boolean hasColumnsToGet();
+    com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet getColumnsToGet();
+    com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGetOrBuilder getColumnsToGetOrBuilder();
+    
+    // optional bytes search_query = 4;
+    boolean hasSearchQuery();
+    com.google.protobuf.ByteString getSearchQuery();
+    
+    // repeated bytes routing_values = 5;
+    java.util.List<com.google.protobuf.ByteString> getRoutingValuesList();
+    int getRoutingValuesCount();
+    com.google.protobuf.ByteString getRoutingValues(int index);
+    
+    // optional int32 timeout_ms = 6;
+    boolean hasTimeoutMs();
+    int getTimeoutMs();
   }
-  public static final class SplitAnalyzerParameter extends
+  public static final class SearchRequest extends
       com.google.protobuf.GeneratedMessage
-      implements SplitAnalyzerParameterOrBuilder {
-    // Use SplitAnalyzerParameter.newBuilder() to construct.
-    private SplitAnalyzerParameter(Builder builder) {
+      implements SearchRequestOrBuilder {
+    // Use SearchRequest.newBuilder() to construct.
+    private SearchRequest(Builder builder) {
       super(builder);
     }
-    private SplitAnalyzerParameter(boolean noInit) {}
+    private SearchRequest(boolean noInit) {}
     
-    private static final SplitAnalyzerParameter defaultInstance;
-    public static SplitAnalyzerParameter getDefaultInstance() {
+    private static final SearchRequest defaultInstance;
+    public static SearchRequest getDefaultInstance() {
       return defaultInstance;
     }
     
-    public SplitAnalyzerParameter getDefaultInstanceForType() {
+    public SearchRequest getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SplitAnalyzerParameter_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchRequest_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SplitAnalyzerParameter_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchRequest_fieldAccessorTable;
     }
     
     private int bitField0_;
-    // optional string delimiter = 1;
-    public static final int DELIMITER_FIELD_NUMBER = 1;
-    private java.lang.Object delimiter_;
-    public boolean hasDelimiter() {
+    // optional string table_name = 1;
+    public static final int TABLE_NAME_FIELD_NUMBER = 1;
+    private java.lang.Object tableName_;
+    public boolean hasTableName() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public String getDelimiter() {
-      java.lang.Object ref = delimiter_;
+    public String getTableName() {
+      java.lang.Object ref = tableName_;
       if (ref instanceof String) {
         return (String) ref;
       } else {
@@ -67262,25 +69154,109 @@ public String getDelimiter() {
             (com.google.protobuf.ByteString) ref;
         String s = bs.toStringUtf8();
         if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          delimiter_ = s;
+          tableName_ = s;
         }
         return s;
       }
     }
-    private com.google.protobuf.ByteString getDelimiterBytes() {
-      java.lang.Object ref = delimiter_;
+    private com.google.protobuf.ByteString getTableNameBytes() {
+      java.lang.Object ref = tableName_;
       if (ref instanceof String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        delimiter_ = b;
+        tableName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional string index_name = 2;
+    public static final int INDEX_NAME_FIELD_NUMBER = 2;
+    private java.lang.Object indexName_;
+    public boolean hasIndexName() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public String getIndexName() {
+      java.lang.Object ref = indexName_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          indexName_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getIndexNameBytes() {
+      java.lang.Object ref = indexName_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        indexName_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
     
+    // optional .com.alicloud.openservices.tablestore.core.protocol.ColumnsToGet columns_to_get = 3;
+    public static final int COLUMNS_TO_GET_FIELD_NUMBER = 3;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet columnsToGet_;
+    public boolean hasColumnsToGet() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet getColumnsToGet() {
+      return columnsToGet_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGetOrBuilder getColumnsToGetOrBuilder() {
+      return columnsToGet_;
+    }
+    
+    // optional bytes search_query = 4;
+    public static final int SEARCH_QUERY_FIELD_NUMBER = 4;
+    private com.google.protobuf.ByteString searchQuery_;
+    public boolean hasSearchQuery() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public com.google.protobuf.ByteString getSearchQuery() {
+      return searchQuery_;
+    }
+    
+    // repeated bytes routing_values = 5;
+    public static final int ROUTING_VALUES_FIELD_NUMBER = 5;
+    private java.util.List<com.google.protobuf.ByteString> routingValues_;
+    public java.util.List<com.google.protobuf.ByteString>
+        getRoutingValuesList() {
+      return routingValues_;
+    }
+    public int getRoutingValuesCount() {
+      return routingValues_.size();
+    }
+    public com.google.protobuf.ByteString getRoutingValues(int index) {
+      return routingValues_.get(index);
+    }
+    
+    // optional int32 timeout_ms = 6;
+    public static final int TIMEOUT_MS_FIELD_NUMBER = 6;
+    private int timeoutMs_;
+    public boolean hasTimeoutMs() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    public int getTimeoutMs() {
+      return timeoutMs_;
+    }
+    
     private void initFields() {
-      delimiter_ = "";
+      tableName_ = "";
+      indexName_ = "";
+      columnsToGet_ = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.getDefaultInstance();
+      searchQuery_ = com.google.protobuf.ByteString.EMPTY;
+      routingValues_ = java.util.Collections.emptyList();;
+      timeoutMs_ = 0;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -67295,7 +69271,22 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, getDelimiterBytes());
+        output.writeBytes(1, getTableNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBytes(2, getIndexNameBytes());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeMessage(3, columnsToGet_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeBytes(4, searchQuery_);
+      }
+      for (int i = 0; i < routingValues_.size(); i++) {
+        output.writeBytes(5, routingValues_.get(i));
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeInt32(6, timeoutMs_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -67308,7 +69299,32 @@ public int getSerializedSize() {
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, getDelimiterBytes());
+          .computeBytesSize(1, getTableNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(2, getIndexNameBytes());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, columnsToGet_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(4, searchQuery_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < routingValues_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(routingValues_.get(i));
+        }
+        size += dataSize;
+        size += 1 * getRoutingValuesList().size();
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(6, timeoutMs_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -67322,41 +69338,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -67365,7 +69381,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAna
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -67376,12 +69392,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAna
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -67391,7 +69407,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAna
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -67404,18 +69420,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameterOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequestOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SplitAnalyzerParameter_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchRequest_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SplitAnalyzerParameter_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchRequest_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -67426,6 +69442,7 @@ private Builder(BuilderParent parent) {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getColumnsToGetFieldBuilder();
         }
       }
       private static Builder create() {
@@ -67434,8 +69451,22 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        delimiter_ = "";
+        tableName_ = "";
         bitField0_ = (bitField0_ & ~0x00000001);
+        indexName_ = "";
+        bitField0_ = (bitField0_ & ~0x00000002);
+        if (columnsToGetBuilder_ == null) {
+          columnsToGet_ = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.getDefaultInstance();
+        } else {
+          columnsToGetBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000004);
+        searchQuery_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        routingValues_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        timeoutMs_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000020);
         return this;
       }
       
@@ -67445,24 +69476,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -67470,32 +69501,79 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerP
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter result = new com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest result = new com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        result.delimiter_ = delimiter_;
+        result.tableName_ = tableName_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.indexName_ = indexName_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        if (columnsToGetBuilder_ == null) {
+          result.columnsToGet_ = columnsToGet_;
+        } else {
+          result.columnsToGet_ = columnsToGetBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.searchQuery_ = searchQuery_;
+        if (((bitField0_ & 0x00000010) == 0x00000010)) {
+          routingValues_ = java.util.Collections.unmodifiableList(routingValues_);
+          bitField0_ = (bitField0_ & ~0x00000010);
+        }
+        result.routingValues_ = routingValues_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.timeoutMs_ = timeoutMs_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter.getDefaultInstance()) return this;
-        if (other.hasDelimiter()) {
-          setDelimiter(other.getDelimiter());
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest.getDefaultInstance()) return this;
+        if (other.hasTableName()) {
+          setTableName(other.getTableName());
+        }
+        if (other.hasIndexName()) {
+          setIndexName(other.getIndexName());
+        }
+        if (other.hasColumnsToGet()) {
+          mergeColumnsToGet(other.getColumnsToGet());
+        }
+        if (other.hasSearchQuery()) {
+          setSearchQuery(other.getSearchQuery());
+        }
+        if (!other.routingValues_.isEmpty()) {
+          if (routingValues_.isEmpty()) {
+            routingValues_ = other.routingValues_;
+            bitField0_ = (bitField0_ & ~0x00000010);
+          } else {
+            ensureRoutingValuesIsMutable();
+            routingValues_.addAll(other.routingValues_);
+          }
+          onChanged();
+        }
+        if (other.hasTimeoutMs()) {
+          setTimeoutMs(other.getTimeoutMs());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -67530,7 +69608,36 @@ public Builder mergeFrom(
             }
             case 10: {
               bitField0_ |= 0x00000001;
-              delimiter_ = input.readBytes();
+              tableName_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              bitField0_ |= 0x00000002;
+              indexName_ = input.readBytes();
+              break;
+            }
+            case 26: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.newBuilder();
+              if (hasColumnsToGet()) {
+                subBuilder.mergeFrom(getColumnsToGet());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setColumnsToGet(subBuilder.buildPartial());
+              break;
+            }
+            case 34: {
+              bitField0_ |= 0x00000008;
+              searchQuery_ = input.readBytes();
+              break;
+            }
+            case 42: {
+              ensureRoutingValuesIsMutable();
+              routingValues_.add(input.readBytes());
+              break;
+            }
+            case 48: {
+              bitField0_ |= 0x00000020;
+              timeoutMs_ = input.readInt32();
               break;
             }
           }
@@ -67539,155 +69646,578 @@ public Builder mergeFrom(
       
       private int bitField0_;
       
-      // optional string delimiter = 1;
-      private java.lang.Object delimiter_ = "";
-      public boolean hasDelimiter() {
+      // optional string table_name = 1;
+      private java.lang.Object tableName_ = "";
+      public boolean hasTableName() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public String getDelimiter() {
-        java.lang.Object ref = delimiter_;
+      public String getTableName() {
+        java.lang.Object ref = tableName_;
         if (!(ref instanceof String)) {
           String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
-          delimiter_ = s;
+          tableName_ = s;
           return s;
         } else {
           return (String) ref;
         }
       }
-      public Builder setDelimiter(String value) {
+      public Builder setTableName(String value) {
         if (value == null) {
     throw new NullPointerException();
   }
   bitField0_ |= 0x00000001;
-        delimiter_ = value;
+        tableName_ = value;
         onChanged();
         return this;
       }
-      public Builder clearDelimiter() {
+      public Builder clearTableName() {
         bitField0_ = (bitField0_ & ~0x00000001);
-        delimiter_ = getDefaultInstance().getDelimiter();
+        tableName_ = getDefaultInstance().getTableName();
         onChanged();
         return this;
       }
-      void setDelimiter(com.google.protobuf.ByteString value) {
+      void setTableName(com.google.protobuf.ByteString value) {
         bitField0_ |= 0x00000001;
-        delimiter_ = value;
+        tableName_ = value;
         onChanged();
       }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.SplitAnalyzerParameter)
-    }
-    
-    static {
-      defaultInstance = new SplitAnalyzerParameter(true);
-      defaultInstance.initFields();
-    }
-    
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.SplitAnalyzerParameter)
-  }
-  
-  public interface FuzzyAnalyzerParameterOrBuilder
-      extends com.google.protobuf.MessageOrBuilder {
-    
-    // optional int32 min_chars = 1;
-    boolean hasMinChars();
-    int getMinChars();
-    
-    // optional int32 max_chars = 2;
-    boolean hasMaxChars();
-    int getMaxChars();
+      // optional string index_name = 2;
+      private java.lang.Object indexName_ = "";
+      public boolean hasIndexName() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public String getIndexName() {
+        java.lang.Object ref = indexName_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          indexName_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setIndexName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
   }
-  public static final class FuzzyAnalyzerParameter extends
-      com.google.protobuf.GeneratedMessage
-      implements FuzzyAnalyzerParameterOrBuilder {
-    // Use FuzzyAnalyzerParameter.newBuilder() to construct.
-    private FuzzyAnalyzerParameter(Builder builder) {
-      super(builder);
-    }
-    private FuzzyAnalyzerParameter(boolean noInit) {}
-    
-    private static final FuzzyAnalyzerParameter defaultInstance;
-    public static FuzzyAnalyzerParameter getDefaultInstance() {
-      return defaultInstance;
-    }
-    
-    public FuzzyAnalyzerParameter getDefaultInstanceForType() {
-      return defaultInstance;
-    }
-    
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FuzzyAnalyzerParameter_descriptor;
-    }
-    
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FuzzyAnalyzerParameter_fieldAccessorTable;
-    }
-    
-    private int bitField0_;
-    // optional int32 min_chars = 1;
-    public static final int MIN_CHARS_FIELD_NUMBER = 1;
-    private int minChars_;
-    public boolean hasMinChars() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    public int getMinChars() {
-      return minChars_;
-    }
-    
-    // optional int32 max_chars = 2;
-    public static final int MAX_CHARS_FIELD_NUMBER = 2;
-    private int maxChars_;
-    public boolean hasMaxChars() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    public int getMaxChars() {
-      return maxChars_;
-    }
-    
-    private void initFields() {
-      minChars_ = 0;
-      maxChars_ = 0;
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized != -1) return isInitialized == 1;
+  bitField0_ |= 0x00000002;
+        indexName_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearIndexName() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        indexName_ = getDefaultInstance().getIndexName();
+        onChanged();
+        return this;
+      }
+      void setIndexName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000002;
+        indexName_ = value;
+        onChanged();
+      }
       
-      memoizedIsInitialized = 1;
-      return true;
-    }
-    
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeInt32(1, minChars_);
+      // optional .com.alicloud.openservices.tablestore.core.protocol.ColumnsToGet columns_to_get = 3;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet columnsToGet_ = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet, com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGetOrBuilder> columnsToGetBuilder_;
+      public boolean hasColumnsToGet() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
       }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeInt32(2, maxChars_);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet getColumnsToGet() {
+        if (columnsToGetBuilder_ == null) {
+          return columnsToGet_;
+        } else {
+          return columnsToGetBuilder_.getMessage();
+        }
       }
-      getUnknownFields().writeTo(output);
-    }
-    
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-    
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(1, minChars_);
+      public Builder setColumnsToGet(com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet value) {
+        if (columnsToGetBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          columnsToGet_ = value;
+          onChanged();
+        } else {
+          columnsToGetBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000004;
+        return this;
       }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt32Size(2, maxChars_);
+      public Builder setColumnsToGet(
+          com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.Builder builderForValue) {
+        if (columnsToGetBuilder_ == null) {
+          columnsToGet_ = builderForValue.build();
+          onChanged();
+        } else {
+          columnsToGetBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000004;
+        return this;
       }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
+      public Builder mergeColumnsToGet(com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet value) {
+        if (columnsToGetBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) == 0x00000004) &&
+              columnsToGet_ != com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.getDefaultInstance()) {
+            columnsToGet_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.newBuilder(columnsToGet_).mergeFrom(value).buildPartial();
+          } else {
+            columnsToGet_ = value;
+          }
+          onChanged();
+        } else {
+          columnsToGetBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000004;
+        return this;
+      }
+      public Builder clearColumnsToGet() {
+        if (columnsToGetBuilder_ == null) {
+          columnsToGet_ = com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.getDefaultInstance();
+          onChanged();
+        } else {
+          columnsToGetBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000004);
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.Builder getColumnsToGetBuilder() {
+        bitField0_ |= 0x00000004;
+        onChanged();
+        return getColumnsToGetFieldBuilder().getBuilder();
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGetOrBuilder getColumnsToGetOrBuilder() {
+        if (columnsToGetBuilder_ != null) {
+          return columnsToGetBuilder_.getMessageOrBuilder();
+        } else {
+          return columnsToGet_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet, com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGetOrBuilder> 
+          getColumnsToGetFieldBuilder() {
+        if (columnsToGetBuilder_ == null) {
+          columnsToGetBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet, com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGetOrBuilder>(
+                  columnsToGet_,
+                  getParentForChildren(),
+                  isClean());
+          columnsToGet_ = null;
+        }
+        return columnsToGetBuilder_;
+      }
+      
+      // optional bytes search_query = 4;
+      private com.google.protobuf.ByteString searchQuery_ = com.google.protobuf.ByteString.EMPTY;
+      public boolean hasSearchQuery() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public com.google.protobuf.ByteString getSearchQuery() {
+        return searchQuery_;
+      }
+      public Builder setSearchQuery(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000008;
+        searchQuery_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearSearchQuery() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        searchQuery_ = getDefaultInstance().getSearchQuery();
+        onChanged();
+        return this;
+      }
+      
+      // repeated bytes routing_values = 5;
+      private java.util.List<com.google.protobuf.ByteString> routingValues_ = java.util.Collections.emptyList();;
+      private void ensureRoutingValuesIsMutable() {
+        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
+          routingValues_ = new java.util.ArrayList<com.google.protobuf.ByteString>(routingValues_);
+          bitField0_ |= 0x00000010;
+         }
+      }
+      public java.util.List<com.google.protobuf.ByteString>
+          getRoutingValuesList() {
+        return java.util.Collections.unmodifiableList(routingValues_);
+      }
+      public int getRoutingValuesCount() {
+        return routingValues_.size();
+      }
+      public com.google.protobuf.ByteString getRoutingValues(int index) {
+        return routingValues_.get(index);
+      }
+      public Builder setRoutingValues(
+          int index, com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureRoutingValuesIsMutable();
+        routingValues_.set(index, value);
+        onChanged();
+        return this;
+      }
+      public Builder addRoutingValues(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureRoutingValuesIsMutable();
+        routingValues_.add(value);
+        onChanged();
+        return this;
+      }
+      public Builder addAllRoutingValues(
+          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
+        ensureRoutingValuesIsMutable();
+        super.addAll(values, routingValues_);
+        onChanged();
+        return this;
+      }
+      public Builder clearRoutingValues() {
+        routingValues_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        onChanged();
+        return this;
+      }
+      
+      // optional int32 timeout_ms = 6;
+      private int timeoutMs_ ;
+      public boolean hasTimeoutMs() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public int getTimeoutMs() {
+        return timeoutMs_;
+      }
+      public Builder setTimeoutMs(int value) {
+        bitField0_ |= 0x00000020;
+        timeoutMs_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearTimeoutMs() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        timeoutMs_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.SearchRequest)
+    }
+    
+    static {
+      defaultInstance = new SearchRequest(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.SearchRequest)
+  }
+  
+  public interface SearchResponseOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional int64 total_hits = 1;
+    boolean hasTotalHits();
+    long getTotalHits();
+    
+    // repeated bytes rows = 2;
+    java.util.List<com.google.protobuf.ByteString> getRowsList();
+    int getRowsCount();
+    com.google.protobuf.ByteString getRows(int index);
+    
+    // optional bool is_all_succeeded = 3;
+    boolean hasIsAllSucceeded();
+    boolean getIsAllSucceeded();
+    
+    // repeated .com.alicloud.openservices.tablestore.core.protocol.SearchHit search_hits = 5;
+    java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit> 
+        getSearchHitsList();
+    com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit getSearchHits(int index);
+    int getSearchHitsCount();
+    java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder> 
+        getSearchHitsOrBuilderList();
+    com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder getSearchHitsOrBuilder(
+        int index);
+    
+    // optional bytes next_token = 6;
+    boolean hasNextToken();
+    com.google.protobuf.ByteString getNextToken();
+    
+    // optional bytes aggs = 7;
+    boolean hasAggs();
+    com.google.protobuf.ByteString getAggs();
+    
+    // optional bytes group_bys = 8;
+    boolean hasGroupBys();
+    com.google.protobuf.ByteString getGroupBys();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.ConsumedCapacity consumed = 9;
+    boolean hasConsumed();
+    com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity getConsumed();
+    com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacityOrBuilder getConsumedOrBuilder();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.ConsumedCapacity reserved_consumed = 10;
+    boolean hasReservedConsumed();
+    com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity getReservedConsumed();
+    com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacityOrBuilder getReservedConsumedOrBuilder();
+  }
+  public static final class SearchResponse extends
+      com.google.protobuf.GeneratedMessage
+      implements SearchResponseOrBuilder {
+    // Use SearchResponse.newBuilder() to construct.
+    private SearchResponse(Builder builder) {
+      super(builder);
+    }
+    private SearchResponse(boolean noInit) {}
+    
+    private static final SearchResponse defaultInstance;
+    public static SearchResponse getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public SearchResponse getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchResponse_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchResponse_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional int64 total_hits = 1;
+    public static final int TOTAL_HITS_FIELD_NUMBER = 1;
+    private long totalHits_;
+    public boolean hasTotalHits() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public long getTotalHits() {
+      return totalHits_;
+    }
+    
+    // repeated bytes rows = 2;
+    public static final int ROWS_FIELD_NUMBER = 2;
+    private java.util.List<com.google.protobuf.ByteString> rows_;
+    public java.util.List<com.google.protobuf.ByteString>
+        getRowsList() {
+      return rows_;
+    }
+    public int getRowsCount() {
+      return rows_.size();
+    }
+    public com.google.protobuf.ByteString getRows(int index) {
+      return rows_.get(index);
+    }
+    
+    // optional bool is_all_succeeded = 3;
+    public static final int IS_ALL_SUCCEEDED_FIELD_NUMBER = 3;
+    private boolean isAllSucceeded_;
+    public boolean hasIsAllSucceeded() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public boolean getIsAllSucceeded() {
+      return isAllSucceeded_;
+    }
+    
+    // repeated .com.alicloud.openservices.tablestore.core.protocol.SearchHit search_hits = 5;
+    public static final int SEARCH_HITS_FIELD_NUMBER = 5;
+    private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit> searchHits_;
+    public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit> getSearchHitsList() {
+      return searchHits_;
+    }
+    public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder> 
+        getSearchHitsOrBuilderList() {
+      return searchHits_;
+    }
+    public int getSearchHitsCount() {
+      return searchHits_.size();
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit getSearchHits(int index) {
+      return searchHits_.get(index);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder getSearchHitsOrBuilder(
+        int index) {
+      return searchHits_.get(index);
+    }
+    
+    // optional bytes next_token = 6;
+    public static final int NEXT_TOKEN_FIELD_NUMBER = 6;
+    private com.google.protobuf.ByteString nextToken_;
+    public boolean hasNextToken() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public com.google.protobuf.ByteString getNextToken() {
+      return nextToken_;
+    }
+    
+    // optional bytes aggs = 7;
+    public static final int AGGS_FIELD_NUMBER = 7;
+    private com.google.protobuf.ByteString aggs_;
+    public boolean hasAggs() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public com.google.protobuf.ByteString getAggs() {
+      return aggs_;
+    }
+    
+    // optional bytes group_bys = 8;
+    public static final int GROUP_BYS_FIELD_NUMBER = 8;
+    private com.google.protobuf.ByteString groupBys_;
+    public boolean hasGroupBys() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    public com.google.protobuf.ByteString getGroupBys() {
+      return groupBys_;
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.ConsumedCapacity consumed = 9;
+    public static final int CONSUMED_FIELD_NUMBER = 9;
+    private com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity consumed_;
+    public boolean hasConsumed() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity getConsumed() {
+      return consumed_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacityOrBuilder getConsumedOrBuilder() {
+      return consumed_;
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.ConsumedCapacity reserved_consumed = 10;
+    public static final int RESERVED_CONSUMED_FIELD_NUMBER = 10;
+    private com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity reservedConsumed_;
+    public boolean hasReservedConsumed() {
+      return ((bitField0_ & 0x00000040) == 0x00000040);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity getReservedConsumed() {
+      return reservedConsumed_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacityOrBuilder getReservedConsumedOrBuilder() {
+      return reservedConsumed_;
+    }
+    
+    private void initFields() {
+      totalHits_ = 0L;
+      rows_ = java.util.Collections.emptyList();;
+      isAllSucceeded_ = false;
+      searchHits_ = java.util.Collections.emptyList();
+      nextToken_ = com.google.protobuf.ByteString.EMPTY;
+      aggs_ = com.google.protobuf.ByteString.EMPTY;
+      groupBys_ = com.google.protobuf.ByteString.EMPTY;
+      consumed_ = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.getDefaultInstance();
+      reservedConsumed_ = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.getDefaultInstance();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (hasConsumed()) {
+        if (!getConsumed().isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      if (hasReservedConsumed()) {
+        if (!getReservedConsumed().isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeInt64(1, totalHits_);
+      }
+      for (int i = 0; i < rows_.size(); i++) {
+        output.writeBytes(2, rows_.get(i));
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBool(3, isAllSucceeded_);
+      }
+      for (int i = 0; i < searchHits_.size(); i++) {
+        output.writeMessage(5, searchHits_.get(i));
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBytes(6, nextToken_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeBytes(7, aggs_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeBytes(8, groupBys_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeMessage(9, consumed_);
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        output.writeMessage(10, reservedConsumed_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, totalHits_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < rows_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(rows_.get(i));
+        }
+        size += dataSize;
+        size += 1 * getRowsList().size();
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(3, isAllSucceeded_);
+      }
+      for (int i = 0; i < searchHits_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, searchHits_.get(i));
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(6, nextToken_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(7, aggs_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(8, groupBys_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(9, consumed_);
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(10, reservedConsumed_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
     }
     
     private static final long serialVersionUID = 0L;
@@ -67697,41 +70227,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -67740,7 +70270,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAna
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -67751,12 +70281,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAna
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -67766,7 +70296,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAna
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -67779,18 +70309,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameterOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponseOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FuzzyAnalyzerParameter_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchResponse_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FuzzyAnalyzerParameter_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchResponse_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -67801,6 +70331,9 @@ private Builder(BuilderParent parent) {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getSearchHitsFieldBuilder();
+          getConsumedFieldBuilder();
+          getReservedConsumedFieldBuilder();
         }
       }
       private static Builder create() {
@@ -67809,10 +70342,36 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        minChars_ = 0;
+        totalHits_ = 0L;
         bitField0_ = (bitField0_ & ~0x00000001);
-        maxChars_ = 0;
+        rows_ = java.util.Collections.emptyList();;
         bitField0_ = (bitField0_ & ~0x00000002);
+        isAllSucceeded_ = false;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        if (searchHitsBuilder_ == null) {
+          searchHits_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
+        } else {
+          searchHitsBuilder_.clear();
+        }
+        nextToken_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        aggs_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000020);
+        groupBys_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000040);
+        if (consumedBuilder_ == null) {
+          consumed_ = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.getDefaultInstance();
+        } else {
+          consumedBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000080);
+        if (reservedConsumedBuilder_ == null) {
+          reservedConsumed_ = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.getDefaultInstance();
+        } else {
+          reservedConsumedBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000100);
         return this;
       }
       
@@ -67822,24 +70381,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -67847,45 +70406,150 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerP
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter result = new com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse result = new com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        result.minChars_ = minChars_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+        result.totalHits_ = totalHits_;
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          rows_ = java.util.Collections.unmodifiableList(rows_);
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.rows_ = rows_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
           to_bitField0_ |= 0x00000002;
         }
-        result.maxChars_ = maxChars_;
+        result.isAllSucceeded_ = isAllSucceeded_;
+        if (searchHitsBuilder_ == null) {
+          if (((bitField0_ & 0x00000008) == 0x00000008)) {
+            searchHits_ = java.util.Collections.unmodifiableList(searchHits_);
+            bitField0_ = (bitField0_ & ~0x00000008);
+          }
+          result.searchHits_ = searchHits_;
+        } else {
+          result.searchHits_ = searchHitsBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.nextToken_ = nextToken_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.aggs_ = aggs_;
+        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.groupBys_ = groupBys_;
+        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        if (consumedBuilder_ == null) {
+          result.consumed_ = consumed_;
+        } else {
+          result.consumed_ = consumedBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
+          to_bitField0_ |= 0x00000040;
+        }
+        if (reservedConsumedBuilder_ == null) {
+          result.reservedConsumed_ = reservedConsumed_;
+        } else {
+          result.reservedConsumed_ = reservedConsumedBuilder_.build();
+        }
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter.getDefaultInstance()) return this;
-        if (other.hasMinChars()) {
-          setMinChars(other.getMinChars());
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse.getDefaultInstance()) return this;
+        if (other.hasTotalHits()) {
+          setTotalHits(other.getTotalHits());
         }
-        if (other.hasMaxChars()) {
-          setMaxChars(other.getMaxChars());
+        if (!other.rows_.isEmpty()) {
+          if (rows_.isEmpty()) {
+            rows_ = other.rows_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensureRowsIsMutable();
+            rows_.addAll(other.rows_);
+          }
+          onChanged();
+        }
+        if (other.hasIsAllSucceeded()) {
+          setIsAllSucceeded(other.getIsAllSucceeded());
+        }
+        if (searchHitsBuilder_ == null) {
+          if (!other.searchHits_.isEmpty()) {
+            if (searchHits_.isEmpty()) {
+              searchHits_ = other.searchHits_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+            } else {
+              ensureSearchHitsIsMutable();
+              searchHits_.addAll(other.searchHits_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.searchHits_.isEmpty()) {
+            if (searchHitsBuilder_.isEmpty()) {
+              searchHitsBuilder_.dispose();
+              searchHitsBuilder_ = null;
+              searchHits_ = other.searchHits_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+              searchHitsBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getSearchHitsFieldBuilder() : null;
+            } else {
+              searchHitsBuilder_.addAllMessages(other.searchHits_);
+            }
+          }
+        }
+        if (other.hasNextToken()) {
+          setNextToken(other.getNextToken());
+        }
+        if (other.hasAggs()) {
+          setAggs(other.getAggs());
+        }
+        if (other.hasGroupBys()) {
+          setGroupBys(other.getGroupBys());
+        }
+        if (other.hasConsumed()) {
+          mergeConsumed(other.getConsumed());
+        }
+        if (other.hasReservedConsumed()) {
+          mergeReservedConsumed(other.getReservedConsumed());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
       
       public final boolean isInitialized() {
+        if (hasConsumed()) {
+          if (!getConsumed().isInitialized()) {
+            
+            return false;
+          }
+        }
+        if (hasReservedConsumed()) {
+          if (!getReservedConsumed().isInitialized()) {
+            
+            return false;
+          }
+        }
         return true;
       }
       
@@ -67914,12 +70578,56 @@ public Builder mergeFrom(
             }
             case 8: {
               bitField0_ |= 0x00000001;
-              minChars_ = input.readInt32();
+              totalHits_ = input.readInt64();
               break;
             }
-            case 16: {
-              bitField0_ |= 0x00000002;
-              maxChars_ = input.readInt32();
+            case 18: {
+              ensureRowsIsMutable();
+              rows_.add(input.readBytes());
+              break;
+            }
+            case 24: {
+              bitField0_ |= 0x00000004;
+              isAllSucceeded_ = input.readBool();
+              break;
+            }
+            case 42: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addSearchHits(subBuilder.buildPartial());
+              break;
+            }
+            case 50: {
+              bitField0_ |= 0x00000010;
+              nextToken_ = input.readBytes();
+              break;
+            }
+            case 58: {
+              bitField0_ |= 0x00000020;
+              aggs_ = input.readBytes();
+              break;
+            }
+            case 66: {
+              bitField0_ |= 0x00000040;
+              groupBys_ = input.readBytes();
+              break;
+            }
+            case 74: {
+              com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.newBuilder();
+              if (hasConsumed()) {
+                subBuilder.mergeFrom(getConsumed());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setConsumed(subBuilder.buildPartial());
+              break;
+            }
+            case 82: {
+              com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.newBuilder();
+              if (hasReservedConsumed()) {
+                subBuilder.mergeFrom(getReservedConsumed());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setReservedConsumed(subBuilder.buildPartial());
               break;
             }
           }
@@ -67928,358 +70636,662 @@ public Builder mergeFrom(
       
       private int bitField0_;
       
-      // optional int32 min_chars = 1;
-      private int minChars_ ;
-      public boolean hasMinChars() {
+      // optional int64 total_hits = 1;
+      private long totalHits_ ;
+      public boolean hasTotalHits() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public int getMinChars() {
-        return minChars_;
+      public long getTotalHits() {
+        return totalHits_;
       }
-      public Builder setMinChars(int value) {
+      public Builder setTotalHits(long value) {
         bitField0_ |= 0x00000001;
-        minChars_ = value;
+        totalHits_ = value;
         onChanged();
         return this;
       }
-      public Builder clearMinChars() {
+      public Builder clearTotalHits() {
         bitField0_ = (bitField0_ & ~0x00000001);
-        minChars_ = 0;
+        totalHits_ = 0L;
         onChanged();
         return this;
       }
       
-      // optional int32 max_chars = 2;
-      private int maxChars_ ;
-      public boolean hasMaxChars() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
+      // repeated bytes rows = 2;
+      private java.util.List<com.google.protobuf.ByteString> rows_ = java.util.Collections.emptyList();;
+      private void ensureRowsIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          rows_ = new java.util.ArrayList<com.google.protobuf.ByteString>(rows_);
+          bitField0_ |= 0x00000002;
+         }
       }
-      public int getMaxChars() {
-        return maxChars_;
+      public java.util.List<com.google.protobuf.ByteString>
+          getRowsList() {
+        return java.util.Collections.unmodifiableList(rows_);
       }
-      public Builder setMaxChars(int value) {
-        bitField0_ |= 0x00000002;
-        maxChars_ = value;
+      public int getRowsCount() {
+        return rows_.size();
+      }
+      public com.google.protobuf.ByteString getRows(int index) {
+        return rows_.get(index);
+      }
+      public Builder setRows(
+          int index, com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureRowsIsMutable();
+        rows_.set(index, value);
         onChanged();
         return this;
       }
-      public Builder clearMaxChars() {
+      public Builder addRows(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureRowsIsMutable();
+        rows_.add(value);
+        onChanged();
+        return this;
+      }
+      public Builder addAllRows(
+          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
+        ensureRowsIsMutable();
+        super.addAll(values, rows_);
+        onChanged();
+        return this;
+      }
+      public Builder clearRows() {
+        rows_ = java.util.Collections.emptyList();;
         bitField0_ = (bitField0_ & ~0x00000002);
-        maxChars_ = 0;
         onChanged();
         return this;
       }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.FuzzyAnalyzerParameter)
+      // optional bool is_all_succeeded = 3;
+      private boolean isAllSucceeded_ ;
+      public boolean hasIsAllSucceeded() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public boolean getIsAllSucceeded() {
+        return isAllSucceeded_;
+      }
+      public Builder setIsAllSucceeded(boolean value) {
+        bitField0_ |= 0x00000004;
+        isAllSucceeded_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearIsAllSucceeded() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        isAllSucceeded_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // repeated .com.alicloud.openservices.tablestore.core.protocol.SearchHit search_hits = 5;
+      private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit> searchHits_ =
+        java.util.Collections.emptyList();
+      private void ensureSearchHitsIsMutable() {
+        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
+          searchHits_ = new java.util.ArrayList<com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit>(searchHits_);
+          bitField0_ |= 0x00000008;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder> searchHitsBuilder_;
+      
+      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit> getSearchHitsList() {
+        if (searchHitsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(searchHits_);
+        } else {
+          return searchHitsBuilder_.getMessageList();
+        }
+      }
+      public int getSearchHitsCount() {
+        if (searchHitsBuilder_ == null) {
+          return searchHits_.size();
+        } else {
+          return searchHitsBuilder_.getCount();
+        }
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit getSearchHits(int index) {
+        if (searchHitsBuilder_ == null) {
+          return searchHits_.get(index);
+        } else {
+          return searchHitsBuilder_.getMessage(index);
+        }
+      }
+      public Builder setSearchHits(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit value) {
+        if (searchHitsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSearchHitsIsMutable();
+          searchHits_.set(index, value);
+          onChanged();
+        } else {
+          searchHitsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setSearchHits(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder builderForValue) {
+        if (searchHitsBuilder_ == null) {
+          ensureSearchHitsIsMutable();
+          searchHits_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          searchHitsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addSearchHits(com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit value) {
+        if (searchHitsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSearchHitsIsMutable();
+          searchHits_.add(value);
+          onChanged();
+        } else {
+          searchHitsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addSearchHits(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit value) {
+        if (searchHitsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSearchHitsIsMutable();
+          searchHits_.add(index, value);
+          onChanged();
+        } else {
+          searchHitsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addSearchHits(
+          com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder builderForValue) {
+        if (searchHitsBuilder_ == null) {
+          ensureSearchHitsIsMutable();
+          searchHits_.add(builderForValue.build());
+          onChanged();
+        } else {
+          searchHitsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addSearchHits(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder builderForValue) {
+        if (searchHitsBuilder_ == null) {
+          ensureSearchHitsIsMutable();
+          searchHits_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          searchHitsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllSearchHits(
+          java.lang.Iterable<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit> values) {
+        if (searchHitsBuilder_ == null) {
+          ensureSearchHitsIsMutable();
+          super.addAll(values, searchHits_);
+          onChanged();
+        } else {
+          searchHitsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearSearchHits() {
+        if (searchHitsBuilder_ == null) {
+          searchHits_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
+          onChanged();
+        } else {
+          searchHitsBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeSearchHits(int index) {
+        if (searchHitsBuilder_ == null) {
+          ensureSearchHitsIsMutable();
+          searchHits_.remove(index);
+          onChanged();
+        } else {
+          searchHitsBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder getSearchHitsBuilder(
+          int index) {
+        return getSearchHitsFieldBuilder().getBuilder(index);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder getSearchHitsOrBuilder(
+          int index) {
+        if (searchHitsBuilder_ == null) {
+          return searchHits_.get(index);  } else {
+          return searchHitsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder> 
+           getSearchHitsOrBuilderList() {
+        if (searchHitsBuilder_ != null) {
+          return searchHitsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(searchHits_);
+        }
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder addSearchHitsBuilder() {
+        return getSearchHitsFieldBuilder().addBuilder(
+            com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.getDefaultInstance());
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder addSearchHitsBuilder(
+          int index) {
+        return getSearchHitsFieldBuilder().addBuilder(
+            index, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.getDefaultInstance());
+      }
+      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder> 
+           getSearchHitsBuilderList() {
+        return getSearchHitsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder> 
+          getSearchHitsFieldBuilder() {
+        if (searchHitsBuilder_ == null) {
+          searchHitsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder>(
+                  searchHits_,
+                  ((bitField0_ & 0x00000008) == 0x00000008),
+                  getParentForChildren(),
+                  isClean());
+          searchHits_ = null;
+        }
+        return searchHitsBuilder_;
+      }
+      
+      // optional bytes next_token = 6;
+      private com.google.protobuf.ByteString nextToken_ = com.google.protobuf.ByteString.EMPTY;
+      public boolean hasNextToken() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public com.google.protobuf.ByteString getNextToken() {
+        return nextToken_;
+      }
+      public Builder setNextToken(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000010;
+        nextToken_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearNextToken() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        nextToken_ = getDefaultInstance().getNextToken();
+        onChanged();
+        return this;
+      }
+      
+      // optional bytes aggs = 7;
+      private com.google.protobuf.ByteString aggs_ = com.google.protobuf.ByteString.EMPTY;
+      public boolean hasAggs() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public com.google.protobuf.ByteString getAggs() {
+        return aggs_;
+      }
+      public Builder setAggs(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000020;
+        aggs_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearAggs() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        aggs_ = getDefaultInstance().getAggs();
+        onChanged();
+        return this;
+      }
+      
+      // optional bytes group_bys = 8;
+      private com.google.protobuf.ByteString groupBys_ = com.google.protobuf.ByteString.EMPTY;
+      public boolean hasGroupBys() {
+        return ((bitField0_ & 0x00000040) == 0x00000040);
+      }
+      public com.google.protobuf.ByteString getGroupBys() {
+        return groupBys_;
+      }
+      public Builder setGroupBys(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000040;
+        groupBys_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearGroupBys() {
+        bitField0_ = (bitField0_ & ~0x00000040);
+        groupBys_ = getDefaultInstance().getGroupBys();
+        onChanged();
+        return this;
+      }
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.ConsumedCapacity consumed = 9;
+      private com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity consumed_ = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity, com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.Builder, com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacityOrBuilder> consumedBuilder_;
+      public boolean hasConsumed() {
+        return ((bitField0_ & 0x00000080) == 0x00000080);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity getConsumed() {
+        if (consumedBuilder_ == null) {
+          return consumed_;
+        } else {
+          return consumedBuilder_.getMessage();
+        }
+      }
+      public Builder setConsumed(com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity value) {
+        if (consumedBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          consumed_ = value;
+          onChanged();
+        } else {
+          consumedBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000080;
+        return this;
+      }
+      public Builder setConsumed(
+          com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.Builder builderForValue) {
+        if (consumedBuilder_ == null) {
+          consumed_ = builderForValue.build();
+          onChanged();
+        } else {
+          consumedBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000080;
+        return this;
+      }
+      public Builder mergeConsumed(com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity value) {
+        if (consumedBuilder_ == null) {
+          if (((bitField0_ & 0x00000080) == 0x00000080) &&
+              consumed_ != com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.getDefaultInstance()) {
+            consumed_ =
+              com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.newBuilder(consumed_).mergeFrom(value).buildPartial();
+          } else {
+            consumed_ = value;
+          }
+          onChanged();
+        } else {
+          consumedBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000080;
+        return this;
+      }
+      public Builder clearConsumed() {
+        if (consumedBuilder_ == null) {
+          consumed_ = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.getDefaultInstance();
+          onChanged();
+        } else {
+          consumedBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000080);
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.Builder getConsumedBuilder() {
+        bitField0_ |= 0x00000080;
+        onChanged();
+        return getConsumedFieldBuilder().getBuilder();
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacityOrBuilder getConsumedOrBuilder() {
+        if (consumedBuilder_ != null) {
+          return consumedBuilder_.getMessageOrBuilder();
+        } else {
+          return consumed_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity, com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.Builder, com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacityOrBuilder> 
+          getConsumedFieldBuilder() {
+        if (consumedBuilder_ == null) {
+          consumedBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity, com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.Builder, com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacityOrBuilder>(
+                  consumed_,
+                  getParentForChildren(),
+                  isClean());
+          consumed_ = null;
+        }
+        return consumedBuilder_;
+      }
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.ConsumedCapacity reserved_consumed = 10;
+      private com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity reservedConsumed_ = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity, com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.Builder, com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacityOrBuilder> reservedConsumedBuilder_;
+      public boolean hasReservedConsumed() {
+        return ((bitField0_ & 0x00000100) == 0x00000100);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity getReservedConsumed() {
+        if (reservedConsumedBuilder_ == null) {
+          return reservedConsumed_;
+        } else {
+          return reservedConsumedBuilder_.getMessage();
+        }
+      }
+      public Builder setReservedConsumed(com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity value) {
+        if (reservedConsumedBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          reservedConsumed_ = value;
+          onChanged();
+        } else {
+          reservedConsumedBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000100;
+        return this;
+      }
+      public Builder setReservedConsumed(
+          com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.Builder builderForValue) {
+        if (reservedConsumedBuilder_ == null) {
+          reservedConsumed_ = builderForValue.build();
+          onChanged();
+        } else {
+          reservedConsumedBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000100;
+        return this;
+      }
+      public Builder mergeReservedConsumed(com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity value) {
+        if (reservedConsumedBuilder_ == null) {
+          if (((bitField0_ & 0x00000100) == 0x00000100) &&
+              reservedConsumed_ != com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.getDefaultInstance()) {
+            reservedConsumed_ =
+              com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.newBuilder(reservedConsumed_).mergeFrom(value).buildPartial();
+          } else {
+            reservedConsumed_ = value;
+          }
+          onChanged();
+        } else {
+          reservedConsumedBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000100;
+        return this;
+      }
+      public Builder clearReservedConsumed() {
+        if (reservedConsumedBuilder_ == null) {
+          reservedConsumed_ = com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.getDefaultInstance();
+          onChanged();
+        } else {
+          reservedConsumedBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000100);
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.Builder getReservedConsumedBuilder() {
+        bitField0_ |= 0x00000100;
+        onChanged();
+        return getReservedConsumedFieldBuilder().getBuilder();
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacityOrBuilder getReservedConsumedOrBuilder() {
+        if (reservedConsumedBuilder_ != null) {
+          return reservedConsumedBuilder_.getMessageOrBuilder();
+        } else {
+          return reservedConsumed_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity, com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.Builder, com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacityOrBuilder> 
+          getReservedConsumedFieldBuilder() {
+        if (reservedConsumedBuilder_ == null) {
+          reservedConsumedBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity, com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacity.Builder, com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.ConsumedCapacityOrBuilder>(
+                  reservedConsumed_,
+                  getParentForChildren(),
+                  isClean());
+          reservedConsumed_ = null;
+        }
+        return reservedConsumedBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.SearchResponse)
     }
     
     static {
-      defaultInstance = new FuzzyAnalyzerParameter(true);
+      defaultInstance = new SearchResponse(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.FuzzyAnalyzerParameter)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.SearchResponse)
   }
   
-  public interface FieldSchemaOrBuilder
+  public interface SearchHitOrBuilder
       extends com.google.protobuf.MessageOrBuilder {
     
-    // optional string field_name = 1;
-    boolean hasFieldName();
-    String getFieldName();
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.FieldType field_type = 2;
-    boolean hasFieldType();
-    com.alicloud.openservices.tablestore.core.protocol.Search.FieldType getFieldType();
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.IndexOptions index_options = 3;
-    boolean hasIndexOptions();
-    com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions getIndexOptions();
-    
-    // optional string analyzer = 4;
-    boolean hasAnalyzer();
-    String getAnalyzer();
-    
-    // optional bool index = 5;
-    boolean hasIndex();
-    boolean getIndex();
-    
-    // optional bool sort_and_agg = 6;
-    boolean hasSortAndAgg();
-    boolean getSortAndAgg();
-    
-    // optional bool store = 7;
-    boolean hasStore();
-    boolean getStore();
-    
-    // repeated .com.alicloud.openservices.tablestore.core.protocol.FieldSchema field_schemas = 8;
-    java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema> 
-        getFieldSchemasList();
-    com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema getFieldSchemas(int index);
-    int getFieldSchemasCount();
-    java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder> 
-        getFieldSchemasOrBuilderList();
-    com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder getFieldSchemasOrBuilder(
+    // optional double score = 3;
+    boolean hasScore();
+    double getScore();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.HighlightResult highlight_result = 4;
+    boolean hasHighlightResult();
+    com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult getHighlightResult();
+    com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResultOrBuilder getHighlightResultOrBuilder();
+    
+    // repeated .com.alicloud.openservices.tablestore.core.protocol.SearchInnerHit search_inner_hits = 5;
+    java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit> 
+        getSearchInnerHitsList();
+    com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit getSearchInnerHits(int index);
+    int getSearchInnerHitsCount();
+    java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHitOrBuilder> 
+        getSearchInnerHitsOrBuilderList();
+    com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHitOrBuilder getSearchInnerHitsOrBuilder(
         int index);
     
-    // optional bool is_array = 9;
-    boolean hasIsArray();
-    boolean getIsArray();
-    
-    // optional bytes analyzer_parameter = 10;
-    boolean hasAnalyzerParameter();
-    com.google.protobuf.ByteString getAnalyzerParameter();
-    
-    // optional bool is_virtual_field = 11;
-    boolean hasIsVirtualField();
-    boolean getIsVirtualField();
-    
-    // repeated string source_field_names = 12;
-    java.util.List<String> getSourceFieldNamesList();
-    int getSourceFieldNamesCount();
-    String getSourceFieldNames(int index);
-    
-    // repeated string date_formats = 13;
-    java.util.List<String> getDateFormatsList();
-    int getDateFormatsCount();
-    String getDateFormats(int index);
+    // optional int32 nested_doc_offset = 6;
+    boolean hasNestedDocOffset();
+    int getNestedDocOffset();
   }
-  public static final class FieldSchema extends
+  public static final class SearchHit extends
       com.google.protobuf.GeneratedMessage
-      implements FieldSchemaOrBuilder {
-    // Use FieldSchema.newBuilder() to construct.
-    private FieldSchema(Builder builder) {
+      implements SearchHitOrBuilder {
+    // Use SearchHit.newBuilder() to construct.
+    private SearchHit(Builder builder) {
       super(builder);
     }
-    private FieldSchema(boolean noInit) {}
+    private SearchHit(boolean noInit) {}
     
-    private static final FieldSchema defaultInstance;
-    public static FieldSchema getDefaultInstance() {
+    private static final SearchHit defaultInstance;
+    public static SearchHit getDefaultInstance() {
       return defaultInstance;
     }
     
-    public FieldSchema getDefaultInstanceForType() {
+    public SearchHit getDefaultInstanceForType() {
       return defaultInstance;
     }
     
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSchema_descriptor;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchHit_descriptor;
     }
     
     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSchema_fieldAccessorTable;
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchHit_fieldAccessorTable;
     }
     
     private int bitField0_;
-    // optional string field_name = 1;
-    public static final int FIELD_NAME_FIELD_NUMBER = 1;
-    private java.lang.Object fieldName_;
-    public boolean hasFieldName() {
+    // optional double score = 3;
+    public static final int SCORE_FIELD_NUMBER = 3;
+    private double score_;
+    public boolean hasScore() {
       return ((bitField0_ & 0x00000001) == 0x00000001);
     }
-    public String getFieldName() {
-      java.lang.Object ref = fieldName_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          fieldName_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getFieldNameBytes() {
-      java.lang.Object ref = fieldName_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        fieldName_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public double getScore() {
+      return score_;
     }
     
-    // optional .com.alicloud.openservices.tablestore.core.protocol.FieldType field_type = 2;
-    public static final int FIELD_TYPE_FIELD_NUMBER = 2;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.FieldType fieldType_;
-    public boolean hasFieldType() {
+    // optional .com.alicloud.openservices.tablestore.core.protocol.HighlightResult highlight_result = 4;
+    public static final int HIGHLIGHT_RESULT_FIELD_NUMBER = 4;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult highlightResult_;
+    public boolean hasHighlightResult() {
       return ((bitField0_ & 0x00000002) == 0x00000002);
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.FieldType getFieldType() {
-      return fieldType_;
-    }
-    
-    // optional .com.alicloud.openservices.tablestore.core.protocol.IndexOptions index_options = 3;
-    public static final int INDEX_OPTIONS_FIELD_NUMBER = 3;
-    private com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions indexOptions_;
-    public boolean hasIndexOptions() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
-    }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions getIndexOptions() {
-      return indexOptions_;
-    }
-    
-    // optional string analyzer = 4;
-    public static final int ANALYZER_FIELD_NUMBER = 4;
-    private java.lang.Object analyzer_;
-    public boolean hasAnalyzer() {
-      return ((bitField0_ & 0x00000008) == 0x00000008);
-    }
-    public String getAnalyzer() {
-      java.lang.Object ref = analyzer_;
-      if (ref instanceof String) {
-        return (String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        String s = bs.toStringUtf8();
-        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
-          analyzer_ = s;
-        }
-        return s;
-      }
-    }
-    private com.google.protobuf.ByteString getAnalyzerBytes() {
-      java.lang.Object ref = analyzer_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
-        analyzer_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    
-    // optional bool index = 5;
-    public static final int INDEX_FIELD_NUMBER = 5;
-    private boolean index_;
-    public boolean hasIndex() {
-      return ((bitField0_ & 0x00000010) == 0x00000010);
-    }
-    public boolean getIndex() {
-      return index_;
-    }
-    
-    // optional bool sort_and_agg = 6;
-    public static final int SORT_AND_AGG_FIELD_NUMBER = 6;
-    private boolean sortAndAgg_;
-    public boolean hasSortAndAgg() {
-      return ((bitField0_ & 0x00000020) == 0x00000020);
-    }
-    public boolean getSortAndAgg() {
-      return sortAndAgg_;
-    }
-    
-    // optional bool store = 7;
-    public static final int STORE_FIELD_NUMBER = 7;
-    private boolean store_;
-    public boolean hasStore() {
-      return ((bitField0_ & 0x00000040) == 0x00000040);
+    public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult getHighlightResult() {
+      return highlightResult_;
     }
-    public boolean getStore() {
-      return store_;
+    public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResultOrBuilder getHighlightResultOrBuilder() {
+      return highlightResult_;
     }
     
-    // repeated .com.alicloud.openservices.tablestore.core.protocol.FieldSchema field_schemas = 8;
-    public static final int FIELD_SCHEMAS_FIELD_NUMBER = 8;
-    private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema> fieldSchemas_;
-    public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema> getFieldSchemasList() {
-      return fieldSchemas_;
+    // repeated .com.alicloud.openservices.tablestore.core.protocol.SearchInnerHit search_inner_hits = 5;
+    public static final int SEARCH_INNER_HITS_FIELD_NUMBER = 5;
+    private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit> searchInnerHits_;
+    public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit> getSearchInnerHitsList() {
+      return searchInnerHits_;
     }
-    public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder> 
-        getFieldSchemasOrBuilderList() {
-      return fieldSchemas_;
+    public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHitOrBuilder> 
+        getSearchInnerHitsOrBuilderList() {
+      return searchInnerHits_;
     }
-    public int getFieldSchemasCount() {
-      return fieldSchemas_.size();
+    public int getSearchInnerHitsCount() {
+      return searchInnerHits_.size();
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema getFieldSchemas(int index) {
-      return fieldSchemas_.get(index);
+    public com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit getSearchInnerHits(int index) {
+      return searchInnerHits_.get(index);
     }
-    public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder getFieldSchemasOrBuilder(
+    public com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHitOrBuilder getSearchInnerHitsOrBuilder(
         int index) {
-      return fieldSchemas_.get(index);
-    }
-    
-    // optional bool is_array = 9;
-    public static final int IS_ARRAY_FIELD_NUMBER = 9;
-    private boolean isArray_;
-    public boolean hasIsArray() {
-      return ((bitField0_ & 0x00000080) == 0x00000080);
-    }
-    public boolean getIsArray() {
-      return isArray_;
-    }
-    
-    // optional bytes analyzer_parameter = 10;
-    public static final int ANALYZER_PARAMETER_FIELD_NUMBER = 10;
-    private com.google.protobuf.ByteString analyzerParameter_;
-    public boolean hasAnalyzerParameter() {
-      return ((bitField0_ & 0x00000100) == 0x00000100);
-    }
-    public com.google.protobuf.ByteString getAnalyzerParameter() {
-      return analyzerParameter_;
-    }
-    
-    // optional bool is_virtual_field = 11;
-    public static final int IS_VIRTUAL_FIELD_FIELD_NUMBER = 11;
-    private boolean isVirtualField_;
-    public boolean hasIsVirtualField() {
-      return ((bitField0_ & 0x00000200) == 0x00000200);
-    }
-    public boolean getIsVirtualField() {
-      return isVirtualField_;
-    }
-    
-    // repeated string source_field_names = 12;
-    public static final int SOURCE_FIELD_NAMES_FIELD_NUMBER = 12;
-    private com.google.protobuf.LazyStringList sourceFieldNames_;
-    public java.util.List<String>
-        getSourceFieldNamesList() {
-      return sourceFieldNames_;
-    }
-    public int getSourceFieldNamesCount() {
-      return sourceFieldNames_.size();
-    }
-    public String getSourceFieldNames(int index) {
-      return sourceFieldNames_.get(index);
+      return searchInnerHits_.get(index);
     }
     
-    // repeated string date_formats = 13;
-    public static final int DATE_FORMATS_FIELD_NUMBER = 13;
-    private com.google.protobuf.LazyStringList dateFormats_;
-    public java.util.List<String>
-        getDateFormatsList() {
-      return dateFormats_;
-    }
-    public int getDateFormatsCount() {
-      return dateFormats_.size();
+    // optional int32 nested_doc_offset = 6;
+    public static final int NESTED_DOC_OFFSET_FIELD_NUMBER = 6;
+    private int nestedDocOffset_;
+    public boolean hasNestedDocOffset() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
     }
-    public String getDateFormats(int index) {
-      return dateFormats_.get(index);
+    public int getNestedDocOffset() {
+      return nestedDocOffset_;
     }
     
     private void initFields() {
-      fieldName_ = "";
-      fieldType_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldType.LONG;
-      indexOptions_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions.DOCS;
-      analyzer_ = "";
-      index_ = false;
-      sortAndAgg_ = false;
-      store_ = false;
-      fieldSchemas_ = java.util.Collections.emptyList();
-      isArray_ = false;
-      analyzerParameter_ = com.google.protobuf.ByteString.EMPTY;
-      isVirtualField_ = false;
-      sourceFieldNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      dateFormats_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      score_ = 0D;
+      highlightResult_ = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.getDefaultInstance();
+      searchInnerHits_ = java.util.Collections.emptyList();
+      nestedDocOffset_ = 0;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -68294,43 +71306,16 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
       getSerializedSize();
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, getFieldNameBytes());
+        output.writeDouble(3, score_);
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeEnum(2, fieldType_.getNumber());
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeEnum(3, indexOptions_.getNumber());
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeBytes(4, getAnalyzerBytes());
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        output.writeBool(5, index_);
-      }
-      if (((bitField0_ & 0x00000020) == 0x00000020)) {
-        output.writeBool(6, sortAndAgg_);
-      }
-      if (((bitField0_ & 0x00000040) == 0x00000040)) {
-        output.writeBool(7, store_);
-      }
-      for (int i = 0; i < fieldSchemas_.size(); i++) {
-        output.writeMessage(8, fieldSchemas_.get(i));
-      }
-      if (((bitField0_ & 0x00000080) == 0x00000080)) {
-        output.writeBool(9, isArray_);
-      }
-      if (((bitField0_ & 0x00000100) == 0x00000100)) {
-        output.writeBytes(10, analyzerParameter_);
-      }
-      if (((bitField0_ & 0x00000200) == 0x00000200)) {
-        output.writeBool(11, isVirtualField_);
+        output.writeMessage(4, highlightResult_);
       }
-      for (int i = 0; i < sourceFieldNames_.size(); i++) {
-        output.writeBytes(12, sourceFieldNames_.getByteString(i));
+      for (int i = 0; i < searchInnerHits_.size(); i++) {
+        output.writeMessage(5, searchInnerHits_.get(i));
       }
-      for (int i = 0; i < dateFormats_.size(); i++) {
-        output.writeBytes(13, dateFormats_.getByteString(i));
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeInt32(6, nestedDocOffset_);
       }
       getUnknownFields().writeTo(output);
     }
@@ -68343,65 +71328,19 @@ public int getSerializedSize() {
       size = 0;
       if (((bitField0_ & 0x00000001) == 0x00000001)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, getFieldNameBytes());
+          .computeDoubleSize(3, score_);
       }
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(2, fieldType_.getNumber());
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(3, indexOptions_.getNumber());
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(4, getAnalyzerBytes());
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(5, index_);
-      }
-      if (((bitField0_ & 0x00000020) == 0x00000020)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(6, sortAndAgg_);
-      }
-      if (((bitField0_ & 0x00000040) == 0x00000040)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(7, store_);
-      }
-      for (int i = 0; i < fieldSchemas_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(8, fieldSchemas_.get(i));
-      }
-      if (((bitField0_ & 0x00000080) == 0x00000080)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(9, isArray_);
+          .computeMessageSize(4, highlightResult_);
       }
-      if (((bitField0_ & 0x00000100) == 0x00000100)) {
+      for (int i = 0; i < searchInnerHits_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(10, analyzerParameter_);
+          .computeMessageSize(5, searchInnerHits_.get(i));
       }
-      if (((bitField0_ & 0x00000200) == 0x00000200)) {
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(11, isVirtualField_);
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < sourceFieldNames_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeBytesSizeNoTag(sourceFieldNames_.getByteString(i));
-        }
-        size += dataSize;
-        size += 1 * getSourceFieldNamesList().size();
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < dateFormats_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeBytesSizeNoTag(dateFormats_.getByteString(i));
-        }
-        size += dataSize;
-        size += 1 * getDateFormatsList().size();
+          .computeInt32Size(6, nestedDocOffset_);
       }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
@@ -68415,41 +71354,41 @@ protected java.lang.Object writeReplace()
       return super.writeReplace();
     }
     
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseFrom(byte[] data)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return newBuilder().mergeFrom(data, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input, extensionRegistry)
                .buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseDelimitedFrom(java.io.InputStream input)
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       Builder builder = newBuilder();
       if (builder.mergeDelimitedFrom(input)) {
@@ -68458,7 +71397,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSch
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseDelimitedFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -68469,12 +71408,12 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSch
         return null;
       }
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return newBuilder().mergeFrom(input).buildParsed();
     }
-    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseFrom(
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -68484,7 +71423,7 @@ public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSch
     
     public static Builder newBuilder() { return Builder.create(); }
     public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema prototype) {
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit prototype) {
       return newBuilder().mergeFrom(prototype);
     }
     public Builder toBuilder() { return newBuilder(this); }
@@ -68497,18 +71436,18 @@ protected Builder newBuilderForType(
     }
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder>
-       implements com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder {
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSchema_descriptor;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchHit_descriptor;
       }
       
       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSchema_fieldAccessorTable;
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchHit_fieldAccessorTable;
       }
       
-      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.newBuilder()
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -68519,7 +71458,8 @@ private Builder(BuilderParent parent) {
       }
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getFieldSchemasFieldBuilder();
+          getHighlightResultFieldBuilder();
+          getSearchInnerHitsFieldBuilder();
         }
       }
       private static Builder create() {
@@ -68528,36 +71468,22 @@ private static Builder create() {
       
       public Builder clear() {
         super.clear();
-        fieldName_ = "";
+        score_ = 0D;
         bitField0_ = (bitField0_ & ~0x00000001);
-        fieldType_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldType.LONG;
+        if (highlightResultBuilder_ == null) {
+          highlightResult_ = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.getDefaultInstance();
+        } else {
+          highlightResultBuilder_.clear();
+        }
         bitField0_ = (bitField0_ & ~0x00000002);
-        indexOptions_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions.DOCS;
-        bitField0_ = (bitField0_ & ~0x00000004);
-        analyzer_ = "";
-        bitField0_ = (bitField0_ & ~0x00000008);
-        index_ = false;
-        bitField0_ = (bitField0_ & ~0x00000010);
-        sortAndAgg_ = false;
-        bitField0_ = (bitField0_ & ~0x00000020);
-        store_ = false;
-        bitField0_ = (bitField0_ & ~0x00000040);
-        if (fieldSchemasBuilder_ == null) {
-          fieldSchemas_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000080);
+        if (searchInnerHitsBuilder_ == null) {
+          searchInnerHits_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
         } else {
-          fieldSchemasBuilder_.clear();
+          searchInnerHitsBuilder_.clear();
         }
-        isArray_ = false;
-        bitField0_ = (bitField0_ & ~0x00000100);
-        analyzerParameter_ = com.google.protobuf.ByteString.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000200);
-        isVirtualField_ = false;
-        bitField0_ = (bitField0_ & ~0x00000400);
-        sourceFieldNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000800);
-        dateFormats_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00001000);
+        nestedDocOffset_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000008);
         return this;
       }
       
@@ -68567,24 +71493,24 @@ public Builder clone() {
       
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.getDescriptor();
+        return com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.getDescriptor();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema getDefaultInstanceForType() {
-        return com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.getDefaultInstance();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.getDefaultInstance();
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema build() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema result = buildPartial();
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
       }
       
-      private com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema buildParsed()
+      private com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit buildParsed()
           throws com.google.protobuf.InvalidProtocolBufferException {
-        com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema result = buildPartial();
+        com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(
             result).asInvalidProtocolBufferException();
@@ -68592,162 +71518,85 @@ private com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema bu
         return result;
       }
       
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema buildPartial() {
-        com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema result = new com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema(this);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit result = new com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit(this);
         int from_bitField0_ = bitField0_;
         int to_bitField0_ = 0;
         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
           to_bitField0_ |= 0x00000001;
         }
-        result.fieldName_ = fieldName_;
+        result.score_ = score_;
         if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
           to_bitField0_ |= 0x00000002;
         }
-        result.fieldType_ = fieldType_;
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
-          to_bitField0_ |= 0x00000004;
-        }
-        result.indexOptions_ = indexOptions_;
-        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
-          to_bitField0_ |= 0x00000008;
-        }
-        result.analyzer_ = analyzer_;
-        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
-          to_bitField0_ |= 0x00000010;
-        }
-        result.index_ = index_;
-        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
-          to_bitField0_ |= 0x00000020;
-        }
-        result.sortAndAgg_ = sortAndAgg_;
-        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
-          to_bitField0_ |= 0x00000040;
+        if (highlightResultBuilder_ == null) {
+          result.highlightResult_ = highlightResult_;
+        } else {
+          result.highlightResult_ = highlightResultBuilder_.build();
         }
-        result.store_ = store_;
-        if (fieldSchemasBuilder_ == null) {
-          if (((bitField0_ & 0x00000080) == 0x00000080)) {
-            fieldSchemas_ = java.util.Collections.unmodifiableList(fieldSchemas_);
-            bitField0_ = (bitField0_ & ~0x00000080);
+        if (searchInnerHitsBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) == 0x00000004)) {
+            searchInnerHits_ = java.util.Collections.unmodifiableList(searchInnerHits_);
+            bitField0_ = (bitField0_ & ~0x00000004);
           }
-          result.fieldSchemas_ = fieldSchemas_;
+          result.searchInnerHits_ = searchInnerHits_;
         } else {
-          result.fieldSchemas_ = fieldSchemasBuilder_.build();
-        }
-        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
-          to_bitField0_ |= 0x00000080;
-        }
-        result.isArray_ = isArray_;
-        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
-          to_bitField0_ |= 0x00000100;
+          result.searchInnerHits_ = searchInnerHitsBuilder_.build();
         }
-        result.analyzerParameter_ = analyzerParameter_;
-        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
-          to_bitField0_ |= 0x00000200;
-        }
-        result.isVirtualField_ = isVirtualField_;
-        if (((bitField0_ & 0x00000800) == 0x00000800)) {
-          sourceFieldNames_ = new com.google.protobuf.UnmodifiableLazyStringList(
-              sourceFieldNames_);
-          bitField0_ = (bitField0_ & ~0x00000800);
-        }
-        result.sourceFieldNames_ = sourceFieldNames_;
-        if (((bitField0_ & 0x00001000) == 0x00001000)) {
-          dateFormats_ = new com.google.protobuf.UnmodifiableLazyStringList(
-              dateFormats_);
-          bitField0_ = (bitField0_ & ~0x00001000);
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000004;
         }
-        result.dateFormats_ = dateFormats_;
+        result.nestedDocOffset_ = nestedDocOffset_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
       
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema) {
-          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema)other);
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
       
-      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema other) {
-        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.getDefaultInstance()) return this;
-        if (other.hasFieldName()) {
-          setFieldName(other.getFieldName());
-        }
-        if (other.hasFieldType()) {
-          setFieldType(other.getFieldType());
-        }
-        if (other.hasIndexOptions()) {
-          setIndexOptions(other.getIndexOptions());
-        }
-        if (other.hasAnalyzer()) {
-          setAnalyzer(other.getAnalyzer());
-        }
-        if (other.hasIndex()) {
-          setIndex(other.getIndex());
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.getDefaultInstance()) return this;
+        if (other.hasScore()) {
+          setScore(other.getScore());
         }
-        if (other.hasSortAndAgg()) {
-          setSortAndAgg(other.getSortAndAgg());
-        }
-        if (other.hasStore()) {
-          setStore(other.getStore());
+        if (other.hasHighlightResult()) {
+          mergeHighlightResult(other.getHighlightResult());
         }
-        if (fieldSchemasBuilder_ == null) {
-          if (!other.fieldSchemas_.isEmpty()) {
-            if (fieldSchemas_.isEmpty()) {
-              fieldSchemas_ = other.fieldSchemas_;
-              bitField0_ = (bitField0_ & ~0x00000080);
+        if (searchInnerHitsBuilder_ == null) {
+          if (!other.searchInnerHits_.isEmpty()) {
+            if (searchInnerHits_.isEmpty()) {
+              searchInnerHits_ = other.searchInnerHits_;
+              bitField0_ = (bitField0_ & ~0x00000004);
             } else {
-              ensureFieldSchemasIsMutable();
-              fieldSchemas_.addAll(other.fieldSchemas_);
+              ensureSearchInnerHitsIsMutable();
+              searchInnerHits_.addAll(other.searchInnerHits_);
             }
             onChanged();
           }
         } else {
-          if (!other.fieldSchemas_.isEmpty()) {
-            if (fieldSchemasBuilder_.isEmpty()) {
-              fieldSchemasBuilder_.dispose();
-              fieldSchemasBuilder_ = null;
-              fieldSchemas_ = other.fieldSchemas_;
-              bitField0_ = (bitField0_ & ~0x00000080);
-              fieldSchemasBuilder_ = 
+          if (!other.searchInnerHits_.isEmpty()) {
+            if (searchInnerHitsBuilder_.isEmpty()) {
+              searchInnerHitsBuilder_.dispose();
+              searchInnerHitsBuilder_ = null;
+              searchInnerHits_ = other.searchInnerHits_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+              searchInnerHitsBuilder_ = 
                 com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
-                   getFieldSchemasFieldBuilder() : null;
+                   getSearchInnerHitsFieldBuilder() : null;
             } else {
-              fieldSchemasBuilder_.addAllMessages(other.fieldSchemas_);
+              searchInnerHitsBuilder_.addAllMessages(other.searchInnerHits_);
             }
           }
         }
-        if (other.hasIsArray()) {
-          setIsArray(other.getIsArray());
-        }
-        if (other.hasAnalyzerParameter()) {
-          setAnalyzerParameter(other.getAnalyzerParameter());
-        }
-        if (other.hasIsVirtualField()) {
-          setIsVirtualField(other.getIsVirtualField());
-        }
-        if (!other.sourceFieldNames_.isEmpty()) {
-          if (sourceFieldNames_.isEmpty()) {
-            sourceFieldNames_ = other.sourceFieldNames_;
-            bitField0_ = (bitField0_ & ~0x00000800);
-          } else {
-            ensureSourceFieldNamesIsMutable();
-            sourceFieldNames_.addAll(other.sourceFieldNames_);
-          }
-          onChanged();
-        }
-        if (!other.dateFormats_.isEmpty()) {
-          if (dateFormats_.isEmpty()) {
-            dateFormats_ = other.dateFormats_;
-            bitField0_ = (bitField0_ & ~0x00001000);
-          } else {
-            ensureDateFormatsIsMutable();
-            dateFormats_.addAll(other.dateFormats_);
-          }
-          onChanged();
+        if (other.hasNestedDocOffset()) {
+          setNestedDocOffset(other.getNestedDocOffset());
         }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
@@ -68780,82 +71629,29 @@ public Builder mergeFrom(
               }
               break;
             }
-            case 10: {
+            case 25: {
               bitField0_ |= 0x00000001;
-              fieldName_ = input.readBytes();
-              break;
-            }
-            case 16: {
-              int rawValue = input.readEnum();
-              com.alicloud.openservices.tablestore.core.protocol.Search.FieldType value = com.alicloud.openservices.tablestore.core.protocol.Search.FieldType.valueOf(rawValue);
-              if (value == null) {
-                unknownFields.mergeVarintField(2, rawValue);
-              } else {
-                bitField0_ |= 0x00000002;
-                fieldType_ = value;
-              }
-              break;
-            }
-            case 24: {
-              int rawValue = input.readEnum();
-              com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions value = com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions.valueOf(rawValue);
-              if (value == null) {
-                unknownFields.mergeVarintField(3, rawValue);
-              } else {
-                bitField0_ |= 0x00000004;
-                indexOptions_ = value;
-              }
+              score_ = input.readDouble();
               break;
             }
             case 34: {
-              bitField0_ |= 0x00000008;
-              analyzer_ = input.readBytes();
-              break;
-            }
-            case 40: {
-              bitField0_ |= 0x00000010;
-              index_ = input.readBool();
-              break;
-            }
-            case 48: {
-              bitField0_ |= 0x00000020;
-              sortAndAgg_ = input.readBool();
-              break;
-            }
-            case 56: {
-              bitField0_ |= 0x00000040;
-              store_ = input.readBool();
+              com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.newBuilder();
+              if (hasHighlightResult()) {
+                subBuilder.mergeFrom(getHighlightResult());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setHighlightResult(subBuilder.buildPartial());
               break;
             }
-            case 66: {
-              com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.newBuilder();
+            case 42: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.newBuilder();
               input.readMessage(subBuilder, extensionRegistry);
-              addFieldSchemas(subBuilder.buildPartial());
+              addSearchInnerHits(subBuilder.buildPartial());
               break;
             }
-            case 72: {
-              bitField0_ |= 0x00000100;
-              isArray_ = input.readBool();
-              break;
-            }
-            case 82: {
-              bitField0_ |= 0x00000200;
-              analyzerParameter_ = input.readBytes();
-              break;
-            }
-            case 88: {
-              bitField0_ |= 0x00000400;
-              isVirtualField_ = input.readBool();
-              break;
-            }
-            case 98: {
-              ensureSourceFieldNamesIsMutable();
-              sourceFieldNames_.add(input.readBytes());
-              break;
-            }
-            case 106: {
-              ensureDateFormatsIsMutable();
-              dateFormats_.add(input.readBytes());
+            case 48: {
+              bitField0_ |= 0x00000008;
+              nestedDocOffset_ = input.readInt32();
               break;
             }
           }
@@ -68864,562 +71660,6219 @@ public Builder mergeFrom(
       
       private int bitField0_;
       
-      // optional string field_name = 1;
-      private java.lang.Object fieldName_ = "";
-      public boolean hasFieldName() {
+      // optional double score = 3;
+      private double score_ ;
+      public boolean hasScore() {
         return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public String getFieldName() {
-        java.lang.Object ref = fieldName_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
-          fieldName_ = s;
-          return s;
-        } else {
-          return (String) ref;
-        }
+      public double getScore() {
+        return score_;
       }
-      public Builder setFieldName(String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000001;
-        fieldName_ = value;
+      public Builder setScore(double value) {
+        bitField0_ |= 0x00000001;
+        score_ = value;
         onChanged();
         return this;
       }
-      public Builder clearFieldName() {
+      public Builder clearScore() {
         bitField0_ = (bitField0_ & ~0x00000001);
-        fieldName_ = getDefaultInstance().getFieldName();
+        score_ = 0D;
         onChanged();
         return this;
       }
-      void setFieldName(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000001;
-        fieldName_ = value;
-        onChanged();
-      }
       
-      // optional .com.alicloud.openservices.tablestore.core.protocol.FieldType field_type = 2;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.FieldType fieldType_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldType.LONG;
-      public boolean hasFieldType() {
+      // optional .com.alicloud.openservices.tablestore.core.protocol.HighlightResult highlight_result = 4;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult highlightResult_ = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResultOrBuilder> highlightResultBuilder_;
+      public boolean hasHighlightResult() {
         return ((bitField0_ & 0x00000002) == 0x00000002);
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldType getFieldType() {
-        return fieldType_;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult getHighlightResult() {
+        if (highlightResultBuilder_ == null) {
+          return highlightResult_;
+        } else {
+          return highlightResultBuilder_.getMessage();
+        }
       }
-      public Builder setFieldType(com.alicloud.openservices.tablestore.core.protocol.Search.FieldType value) {
-        if (value == null) {
-          throw new NullPointerException();
+      public Builder setHighlightResult(com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult value) {
+        if (highlightResultBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          highlightResult_ = value;
+          onChanged();
+        } else {
+          highlightResultBuilder_.setMessage(value);
         }
         bitField0_ |= 0x00000002;
-        fieldType_ = value;
-        onChanged();
-        return this;
-      }
-      public Builder clearFieldType() {
-        bitField0_ = (bitField0_ & ~0x00000002);
-        fieldType_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldType.LONG;
-        onChanged();
         return this;
       }
-      
-      // optional .com.alicloud.openservices.tablestore.core.protocol.IndexOptions index_options = 3;
-      private com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions indexOptions_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions.DOCS;
-      public boolean hasIndexOptions() {
-        return ((bitField0_ & 0x00000004) == 0x00000004);
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions getIndexOptions() {
-        return indexOptions_;
-      }
-      public Builder setIndexOptions(com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions value) {
-        if (value == null) {
-          throw new NullPointerException();
+      public Builder setHighlightResult(
+          com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.Builder builderForValue) {
+        if (highlightResultBuilder_ == null) {
+          highlightResult_ = builderForValue.build();
+          onChanged();
+        } else {
+          highlightResultBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000004;
-        indexOptions_ = value;
-        onChanged();
-        return this;
-      }
-      public Builder clearIndexOptions() {
-        bitField0_ = (bitField0_ & ~0x00000004);
-        indexOptions_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions.DOCS;
-        onChanged();
+        bitField0_ |= 0x00000002;
         return this;
       }
-      
-      // optional string analyzer = 4;
-      private java.lang.Object analyzer_ = "";
-      public boolean hasAnalyzer() {
-        return ((bitField0_ & 0x00000008) == 0x00000008);
-      }
-      public String getAnalyzer() {
-        java.lang.Object ref = analyzer_;
-        if (!(ref instanceof String)) {
-          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
-          analyzer_ = s;
-          return s;
+      public Builder mergeHighlightResult(com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult value) {
+        if (highlightResultBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) == 0x00000002) &&
+              highlightResult_ != com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.getDefaultInstance()) {
+            highlightResult_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.newBuilder(highlightResult_).mergeFrom(value).buildPartial();
+          } else {
+            highlightResult_ = value;
+          }
+          onChanged();
         } else {
-          return (String) ref;
+          highlightResultBuilder_.mergeFrom(value);
         }
-      }
-      public Builder setAnalyzer(String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000008;
-        analyzer_ = value;
-        onChanged();
-        return this;
-      }
-      public Builder clearAnalyzer() {
-        bitField0_ = (bitField0_ & ~0x00000008);
-        analyzer_ = getDefaultInstance().getAnalyzer();
-        onChanged();
-        return this;
-      }
-      void setAnalyzer(com.google.protobuf.ByteString value) {
-        bitField0_ |= 0x00000008;
-        analyzer_ = value;
-        onChanged();
-      }
-      
-      // optional bool index = 5;
-      private boolean index_ ;
-      public boolean hasIndex() {
-        return ((bitField0_ & 0x00000010) == 0x00000010);
-      }
-      public boolean getIndex() {
-        return index_;
-      }
-      public Builder setIndex(boolean value) {
-        bitField0_ |= 0x00000010;
-        index_ = value;
-        onChanged();
-        return this;
-      }
-      public Builder clearIndex() {
-        bitField0_ = (bitField0_ & ~0x00000010);
-        index_ = false;
-        onChanged();
+        bitField0_ |= 0x00000002;
         return this;
       }
-      
-      // optional bool sort_and_agg = 6;
-      private boolean sortAndAgg_ ;
-      public boolean hasSortAndAgg() {
-        return ((bitField0_ & 0x00000020) == 0x00000020);
-      }
-      public boolean getSortAndAgg() {
-        return sortAndAgg_;
-      }
-      public Builder setSortAndAgg(boolean value) {
-        bitField0_ |= 0x00000020;
-        sortAndAgg_ = value;
-        onChanged();
+      public Builder clearHighlightResult() {
+        if (highlightResultBuilder_ == null) {
+          highlightResult_ = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.getDefaultInstance();
+          onChanged();
+        } else {
+          highlightResultBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000002);
         return this;
       }
-      public Builder clearSortAndAgg() {
-        bitField0_ = (bitField0_ & ~0x00000020);
-        sortAndAgg_ = false;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.Builder getHighlightResultBuilder() {
+        bitField0_ |= 0x00000002;
         onChanged();
-        return this;
-      }
-      
-      // optional bool store = 7;
-      private boolean store_ ;
-      public boolean hasStore() {
-        return ((bitField0_ & 0x00000040) == 0x00000040);
+        return getHighlightResultFieldBuilder().getBuilder();
       }
-      public boolean getStore() {
-        return store_;
-      }
-      public Builder setStore(boolean value) {
-        bitField0_ |= 0x00000040;
-        store_ = value;
-        onChanged();
-        return this;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResultOrBuilder getHighlightResultOrBuilder() {
+        if (highlightResultBuilder_ != null) {
+          return highlightResultBuilder_.getMessageOrBuilder();
+        } else {
+          return highlightResult_;
+        }
       }
-      public Builder clearStore() {
-        bitField0_ = (bitField0_ & ~0x00000040);
-        store_ = false;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResultOrBuilder> 
+          getHighlightResultFieldBuilder() {
+        if (highlightResultBuilder_ == null) {
+          highlightResultBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResultOrBuilder>(
+                  highlightResult_,
+                  getParentForChildren(),
+                  isClean());
+          highlightResult_ = null;
+        }
+        return highlightResultBuilder_;
       }
       
-      // repeated .com.alicloud.openservices.tablestore.core.protocol.FieldSchema field_schemas = 8;
-      private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema> fieldSchemas_ =
+      // repeated .com.alicloud.openservices.tablestore.core.protocol.SearchInnerHit search_inner_hits = 5;
+      private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit> searchInnerHits_ =
         java.util.Collections.emptyList();
-      private void ensureFieldSchemasIsMutable() {
-        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
-          fieldSchemas_ = new java.util.ArrayList<com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema>(fieldSchemas_);
-          bitField0_ |= 0x00000080;
+      private void ensureSearchInnerHitsIsMutable() {
+        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
+          searchInnerHits_ = new java.util.ArrayList<com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit>(searchInnerHits_);
+          bitField0_ |= 0x00000004;
          }
       }
       
       private com.google.protobuf.RepeatedFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder> fieldSchemasBuilder_;
+          com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit, com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHitOrBuilder> searchInnerHitsBuilder_;
       
-      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema> getFieldSchemasList() {
-        if (fieldSchemasBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(fieldSchemas_);
+      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit> getSearchInnerHitsList() {
+        if (searchInnerHitsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(searchInnerHits_);
         } else {
-          return fieldSchemasBuilder_.getMessageList();
+          return searchInnerHitsBuilder_.getMessageList();
         }
       }
-      public int getFieldSchemasCount() {
-        if (fieldSchemasBuilder_ == null) {
-          return fieldSchemas_.size();
+      public int getSearchInnerHitsCount() {
+        if (searchInnerHitsBuilder_ == null) {
+          return searchInnerHits_.size();
         } else {
-          return fieldSchemasBuilder_.getCount();
+          return searchInnerHitsBuilder_.getCount();
         }
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema getFieldSchemas(int index) {
-        if (fieldSchemasBuilder_ == null) {
-          return fieldSchemas_.get(index);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit getSearchInnerHits(int index) {
+        if (searchInnerHitsBuilder_ == null) {
+          return searchInnerHits_.get(index);
         } else {
-          return fieldSchemasBuilder_.getMessage(index);
+          return searchInnerHitsBuilder_.getMessage(index);
         }
       }
-      public Builder setFieldSchemas(
-          int index, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema value) {
-        if (fieldSchemasBuilder_ == null) {
+      public Builder setSearchInnerHits(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit value) {
+        if (searchInnerHitsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureFieldSchemasIsMutable();
-          fieldSchemas_.set(index, value);
+          ensureSearchInnerHitsIsMutable();
+          searchInnerHits_.set(index, value);
           onChanged();
         } else {
-          fieldSchemasBuilder_.setMessage(index, value);
+          searchInnerHitsBuilder_.setMessage(index, value);
         }
         return this;
       }
-      public Builder setFieldSchemas(
-          int index, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder builderForValue) {
-        if (fieldSchemasBuilder_ == null) {
-          ensureFieldSchemasIsMutable();
-          fieldSchemas_.set(index, builderForValue.build());
+      public Builder setSearchInnerHits(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.Builder builderForValue) {
+        if (searchInnerHitsBuilder_ == null) {
+          ensureSearchInnerHitsIsMutable();
+          searchInnerHits_.set(index, builderForValue.build());
           onChanged();
         } else {
-          fieldSchemasBuilder_.setMessage(index, builderForValue.build());
+          searchInnerHitsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
-      public Builder addFieldSchemas(com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema value) {
-        if (fieldSchemasBuilder_ == null) {
+      public Builder addSearchInnerHits(com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit value) {
+        if (searchInnerHitsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureFieldSchemasIsMutable();
-          fieldSchemas_.add(value);
+          ensureSearchInnerHitsIsMutable();
+          searchInnerHits_.add(value);
           onChanged();
         } else {
-          fieldSchemasBuilder_.addMessage(value);
+          searchInnerHitsBuilder_.addMessage(value);
         }
         return this;
       }
-      public Builder addFieldSchemas(
-          int index, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema value) {
-        if (fieldSchemasBuilder_ == null) {
+      public Builder addSearchInnerHits(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit value) {
+        if (searchInnerHitsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureFieldSchemasIsMutable();
-          fieldSchemas_.add(index, value);
+          ensureSearchInnerHitsIsMutable();
+          searchInnerHits_.add(index, value);
           onChanged();
         } else {
-          fieldSchemasBuilder_.addMessage(index, value);
+          searchInnerHitsBuilder_.addMessage(index, value);
         }
         return this;
       }
-      public Builder addFieldSchemas(
-          com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder builderForValue) {
-        if (fieldSchemasBuilder_ == null) {
-          ensureFieldSchemasIsMutable();
-          fieldSchemas_.add(builderForValue.build());
+      public Builder addSearchInnerHits(
+          com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.Builder builderForValue) {
+        if (searchInnerHitsBuilder_ == null) {
+          ensureSearchInnerHitsIsMutable();
+          searchInnerHits_.add(builderForValue.build());
           onChanged();
         } else {
-          fieldSchemasBuilder_.addMessage(builderForValue.build());
+          searchInnerHitsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
-      public Builder addFieldSchemas(
-          int index, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder builderForValue) {
-        if (fieldSchemasBuilder_ == null) {
-          ensureFieldSchemasIsMutable();
-          fieldSchemas_.add(index, builderForValue.build());
+      public Builder addSearchInnerHits(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.Builder builderForValue) {
+        if (searchInnerHitsBuilder_ == null) {
+          ensureSearchInnerHitsIsMutable();
+          searchInnerHits_.add(index, builderForValue.build());
           onChanged();
         } else {
-          fieldSchemasBuilder_.addMessage(index, builderForValue.build());
+          searchInnerHitsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
-      public Builder addAllFieldSchemas(
-          java.lang.Iterable<? extends com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema> values) {
-        if (fieldSchemasBuilder_ == null) {
-          ensureFieldSchemasIsMutable();
-          super.addAll(values, fieldSchemas_);
+      public Builder addAllSearchInnerHits(
+          java.lang.Iterable<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit> values) {
+        if (searchInnerHitsBuilder_ == null) {
+          ensureSearchInnerHitsIsMutable();
+          super.addAll(values, searchInnerHits_);
           onChanged();
         } else {
-          fieldSchemasBuilder_.addAllMessages(values);
+          searchInnerHitsBuilder_.addAllMessages(values);
         }
         return this;
       }
-      public Builder clearFieldSchemas() {
-        if (fieldSchemasBuilder_ == null) {
-          fieldSchemas_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000080);
+      public Builder clearSearchInnerHits() {
+        if (searchInnerHitsBuilder_ == null) {
+          searchInnerHits_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
           onChanged();
         } else {
-          fieldSchemasBuilder_.clear();
+          searchInnerHitsBuilder_.clear();
         }
         return this;
       }
-      public Builder removeFieldSchemas(int index) {
-        if (fieldSchemasBuilder_ == null) {
-          ensureFieldSchemasIsMutable();
-          fieldSchemas_.remove(index);
+      public Builder removeSearchInnerHits(int index) {
+        if (searchInnerHitsBuilder_ == null) {
+          ensureSearchInnerHitsIsMutable();
+          searchInnerHits_.remove(index);
           onChanged();
         } else {
-          fieldSchemasBuilder_.remove(index);
+          searchInnerHitsBuilder_.remove(index);
         }
         return this;
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder getFieldSchemasBuilder(
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.Builder getSearchInnerHitsBuilder(
           int index) {
-        return getFieldSchemasFieldBuilder().getBuilder(index);
+        return getSearchInnerHitsFieldBuilder().getBuilder(index);
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder getFieldSchemasOrBuilder(
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHitOrBuilder getSearchInnerHitsOrBuilder(
           int index) {
-        if (fieldSchemasBuilder_ == null) {
-          return fieldSchemas_.get(index);  } else {
-          return fieldSchemasBuilder_.getMessageOrBuilder(index);
+        if (searchInnerHitsBuilder_ == null) {
+          return searchInnerHits_.get(index);  } else {
+          return searchInnerHitsBuilder_.getMessageOrBuilder(index);
         }
       }
-      public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder> 
-           getFieldSchemasOrBuilderList() {
-        if (fieldSchemasBuilder_ != null) {
-          return fieldSchemasBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHitOrBuilder> 
+           getSearchInnerHitsOrBuilderList() {
+        if (searchInnerHitsBuilder_ != null) {
+          return searchInnerHitsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(fieldSchemas_);
+          return java.util.Collections.unmodifiableList(searchInnerHits_);
         }
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder addFieldSchemasBuilder() {
-        return getFieldSchemasFieldBuilder().addBuilder(
-            com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.getDefaultInstance());
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.Builder addSearchInnerHitsBuilder() {
+        return getSearchInnerHitsFieldBuilder().addBuilder(
+            com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.getDefaultInstance());
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder addFieldSchemasBuilder(
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.Builder addSearchInnerHitsBuilder(
           int index) {
-        return getFieldSchemasFieldBuilder().addBuilder(
-            index, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.getDefaultInstance());
+        return getSearchInnerHitsFieldBuilder().addBuilder(
+            index, com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.getDefaultInstance());
       }
-      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder> 
-           getFieldSchemasBuilderList() {
-        return getFieldSchemasFieldBuilder().getBuilderList();
+      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.Builder> 
+           getSearchInnerHitsBuilderList() {
+        return getSearchInnerHitsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder> 
-          getFieldSchemasFieldBuilder() {
-        if (fieldSchemasBuilder_ == null) {
-          fieldSchemasBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
-              com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder>(
-                  fieldSchemas_,
-                  ((bitField0_ & 0x00000080) == 0x00000080),
+          com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit, com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHitOrBuilder> 
+          getSearchInnerHitsFieldBuilder() {
+        if (searchInnerHitsBuilder_ == null) {
+          searchInnerHitsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit, com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHitOrBuilder>(
+                  searchInnerHits_,
+                  ((bitField0_ & 0x00000004) == 0x00000004),
                   getParentForChildren(),
                   isClean());
-          fieldSchemas_ = null;
+          searchInnerHits_ = null;
         }
-        return fieldSchemasBuilder_;
+        return searchInnerHitsBuilder_;
       }
       
-      // optional bool is_array = 9;
-      private boolean isArray_ ;
-      public boolean hasIsArray() {
-        return ((bitField0_ & 0x00000100) == 0x00000100);
+      // optional int32 nested_doc_offset = 6;
+      private int nestedDocOffset_ ;
+      public boolean hasNestedDocOffset() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
       }
-      public boolean getIsArray() {
-        return isArray_;
+      public int getNestedDocOffset() {
+        return nestedDocOffset_;
       }
-      public Builder setIsArray(boolean value) {
-        bitField0_ |= 0x00000100;
-        isArray_ = value;
+      public Builder setNestedDocOffset(int value) {
+        bitField0_ |= 0x00000008;
+        nestedDocOffset_ = value;
         onChanged();
         return this;
       }
-      public Builder clearIsArray() {
-        bitField0_ = (bitField0_ & ~0x00000100);
-        isArray_ = false;
+      public Builder clearNestedDocOffset() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        nestedDocOffset_ = 0;
         onChanged();
         return this;
       }
       
-      // optional bytes analyzer_parameter = 10;
-      private com.google.protobuf.ByteString analyzerParameter_ = com.google.protobuf.ByteString.EMPTY;
-      public boolean hasAnalyzerParameter() {
-        return ((bitField0_ & 0x00000200) == 0x00000200);
-      }
-      public com.google.protobuf.ByteString getAnalyzerParameter() {
-        return analyzerParameter_;
-      }
-      public Builder setAnalyzerParameter(com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.SearchHit)
+    }
+    
+    static {
+      defaultInstance = new SearchHit(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.SearchHit)
   }
-  bitField0_ |= 0x00000200;
-        analyzerParameter_ = value;
-        onChanged();
-        return this;
+  
+  public interface SearchInnerHitOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional string path = 1;
+    boolean hasPath();
+    String getPath();
+    
+    // repeated .com.alicloud.openservices.tablestore.core.protocol.SearchHit search_hits = 2;
+    java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit> 
+        getSearchHitsList();
+    com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit getSearchHits(int index);
+    int getSearchHitsCount();
+    java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder> 
+        getSearchHitsOrBuilderList();
+    com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder getSearchHitsOrBuilder(
+        int index);
+  }
+  public static final class SearchInnerHit extends
+      com.google.protobuf.GeneratedMessage
+      implements SearchInnerHitOrBuilder {
+    // Use SearchInnerHit.newBuilder() to construct.
+    private SearchInnerHit(Builder builder) {
+      super(builder);
+    }
+    private SearchInnerHit(boolean noInit) {}
+    
+    private static final SearchInnerHit defaultInstance;
+    public static SearchInnerHit getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public SearchInnerHit getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchInnerHit_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchInnerHit_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional string path = 1;
+    public static final int PATH_FIELD_NUMBER = 1;
+    private java.lang.Object path_;
+    public boolean hasPath() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getPath() {
+      java.lang.Object ref = path_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          path_ = s;
+        }
+        return s;
       }
-      public Builder clearAnalyzerParameter() {
-        bitField0_ = (bitField0_ & ~0x00000200);
-        analyzerParameter_ = getDefaultInstance().getAnalyzerParameter();
-        onChanged();
-        return this;
+    }
+    private com.google.protobuf.ByteString getPathBytes() {
+      java.lang.Object ref = path_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        path_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
       }
+    }
+    
+    // repeated .com.alicloud.openservices.tablestore.core.protocol.SearchHit search_hits = 2;
+    public static final int SEARCH_HITS_FIELD_NUMBER = 2;
+    private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit> searchHits_;
+    public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit> getSearchHitsList() {
+      return searchHits_;
+    }
+    public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder> 
+        getSearchHitsOrBuilderList() {
+      return searchHits_;
+    }
+    public int getSearchHitsCount() {
+      return searchHits_.size();
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit getSearchHits(int index) {
+      return searchHits_.get(index);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder getSearchHitsOrBuilder(
+        int index) {
+      return searchHits_.get(index);
+    }
+    
+    private void initFields() {
+      path_ = "";
+      searchHits_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
       
-      // optional bool is_virtual_field = 11;
-      private boolean isVirtualField_ ;
-      public boolean hasIsVirtualField() {
-        return ((bitField0_ & 0x00000400) == 0x00000400);
-      }
-      public boolean getIsVirtualField() {
-        return isVirtualField_;
-      }
-      public Builder setIsVirtualField(boolean value) {
-        bitField0_ |= 0x00000400;
-        isVirtualField_ = value;
-        onChanged();
-        return this;
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getPathBytes());
       }
-      public Builder clearIsVirtualField() {
-        bitField0_ = (bitField0_ & ~0x00000400);
-        isVirtualField_ = false;
-        onChanged();
-        return this;
+      for (int i = 0; i < searchHits_.size(); i++) {
+        output.writeMessage(2, searchHits_.get(i));
       }
-      
-      // repeated string source_field_names = 12;
-      private com.google.protobuf.LazyStringList sourceFieldNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      private void ensureSourceFieldNamesIsMutable() {
-        if (!((bitField0_ & 0x00000800) == 0x00000800)) {
-          sourceFieldNames_ = new com.google.protobuf.LazyStringArrayList(sourceFieldNames_);
-          bitField0_ |= 0x00000800;
-         }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getPathBytes());
       }
-      public java.util.List<String>
-          getSourceFieldNamesList() {
-        return java.util.Collections.unmodifiableList(sourceFieldNames_);
+      for (int i = 0; i < searchHits_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, searchHits_.get(i));
       }
-      public int getSourceFieldNamesCount() {
-        return sourceFieldNames_.size();
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
       }
-      public String getSourceFieldNames(int index) {
-        return sourceFieldNames_.get(index);
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHitOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchInnerHit_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchInnerHit_fieldAccessorTable;
+      }
+      
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getSearchHitsFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        path_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        if (searchHitsBuilder_ == null) {
+          searchHits_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          searchHitsBuilder_.clear();
+        }
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.getDescriptor();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.getDefaultInstance();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit result = new com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.path_ = path_;
+        if (searchHitsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) == 0x00000002)) {
+            searchHits_ = java.util.Collections.unmodifiableList(searchHits_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.searchHits_ = searchHits_;
+        } else {
+          result.searchHits_ = searchHitsBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.getDefaultInstance()) return this;
+        if (other.hasPath()) {
+          setPath(other.getPath());
+        }
+        if (searchHitsBuilder_ == null) {
+          if (!other.searchHits_.isEmpty()) {
+            if (searchHits_.isEmpty()) {
+              searchHits_ = other.searchHits_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureSearchHitsIsMutable();
+              searchHits_.addAll(other.searchHits_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.searchHits_.isEmpty()) {
+            if (searchHitsBuilder_.isEmpty()) {
+              searchHitsBuilder_.dispose();
+              searchHitsBuilder_ = null;
+              searchHits_ = other.searchHits_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              searchHitsBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getSearchHitsFieldBuilder() : null;
+            } else {
+              searchHitsBuilder_.addAllMessages(other.searchHits_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              path_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addSearchHits(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional string path = 1;
+      private java.lang.Object path_ = "";
+      public boolean hasPath() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getPath() {
+        java.lang.Object ref = path_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          path_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setPath(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        path_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearPath() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        path_ = getDefaultInstance().getPath();
+        onChanged();
+        return this;
+      }
+      void setPath(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        path_ = value;
+        onChanged();
+      }
+      
+      // repeated .com.alicloud.openservices.tablestore.core.protocol.SearchHit search_hits = 2;
+      private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit> searchHits_ =
+        java.util.Collections.emptyList();
+      private void ensureSearchHitsIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          searchHits_ = new java.util.ArrayList<com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit>(searchHits_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder> searchHitsBuilder_;
+      
+      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit> getSearchHitsList() {
+        if (searchHitsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(searchHits_);
+        } else {
+          return searchHitsBuilder_.getMessageList();
+        }
+      }
+      public int getSearchHitsCount() {
+        if (searchHitsBuilder_ == null) {
+          return searchHits_.size();
+        } else {
+          return searchHitsBuilder_.getCount();
+        }
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit getSearchHits(int index) {
+        if (searchHitsBuilder_ == null) {
+          return searchHits_.get(index);
+        } else {
+          return searchHitsBuilder_.getMessage(index);
+        }
+      }
+      public Builder setSearchHits(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit value) {
+        if (searchHitsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSearchHitsIsMutable();
+          searchHits_.set(index, value);
+          onChanged();
+        } else {
+          searchHitsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setSearchHits(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder builderForValue) {
+        if (searchHitsBuilder_ == null) {
+          ensureSearchHitsIsMutable();
+          searchHits_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          searchHitsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addSearchHits(com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit value) {
+        if (searchHitsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSearchHitsIsMutable();
+          searchHits_.add(value);
+          onChanged();
+        } else {
+          searchHitsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addSearchHits(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit value) {
+        if (searchHitsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSearchHitsIsMutable();
+          searchHits_.add(index, value);
+          onChanged();
+        } else {
+          searchHitsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addSearchHits(
+          com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder builderForValue) {
+        if (searchHitsBuilder_ == null) {
+          ensureSearchHitsIsMutable();
+          searchHits_.add(builderForValue.build());
+          onChanged();
+        } else {
+          searchHitsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addSearchHits(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder builderForValue) {
+        if (searchHitsBuilder_ == null) {
+          ensureSearchHitsIsMutable();
+          searchHits_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          searchHitsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllSearchHits(
+          java.lang.Iterable<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit> values) {
+        if (searchHitsBuilder_ == null) {
+          ensureSearchHitsIsMutable();
+          super.addAll(values, searchHits_);
+          onChanged();
+        } else {
+          searchHitsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearSearchHits() {
+        if (searchHitsBuilder_ == null) {
+          searchHits_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          searchHitsBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeSearchHits(int index) {
+        if (searchHitsBuilder_ == null) {
+          ensureSearchHitsIsMutable();
+          searchHits_.remove(index);
+          onChanged();
+        } else {
+          searchHitsBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder getSearchHitsBuilder(
+          int index) {
+        return getSearchHitsFieldBuilder().getBuilder(index);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder getSearchHitsOrBuilder(
+          int index) {
+        if (searchHitsBuilder_ == null) {
+          return searchHits_.get(index);  } else {
+          return searchHitsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder> 
+           getSearchHitsOrBuilderList() {
+        if (searchHitsBuilder_ != null) {
+          return searchHitsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(searchHits_);
+        }
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder addSearchHitsBuilder() {
+        return getSearchHitsFieldBuilder().addBuilder(
+            com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.getDefaultInstance());
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder addSearchHitsBuilder(
+          int index) {
+        return getSearchHitsFieldBuilder().addBuilder(
+            index, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.getDefaultInstance());
+      }
+      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder> 
+           getSearchHitsBuilderList() {
+        return getSearchHitsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder> 
+          getSearchHitsFieldBuilder() {
+        if (searchHitsBuilder_ == null) {
+          searchHitsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.SearchHitOrBuilder>(
+                  searchHits_,
+                  ((bitField0_ & 0x00000002) == 0x00000002),
+                  getParentForChildren(),
+                  isClean());
+          searchHits_ = null;
+        }
+        return searchHitsBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.SearchInnerHit)
+    }
+    
+    static {
+      defaultInstance = new SearchInnerHit(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.SearchInnerHit)
+  }
+  
+  public interface HighlightResultOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // repeated .com.alicloud.openservices.tablestore.core.protocol.HighlightField highlight_fields = 1;
+    java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField> 
+        getHighlightFieldsList();
+    com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField getHighlightFields(int index);
+    int getHighlightFieldsCount();
+    java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFieldOrBuilder> 
+        getHighlightFieldsOrBuilderList();
+    com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFieldOrBuilder getHighlightFieldsOrBuilder(
+        int index);
+  }
+  public static final class HighlightResult extends
+      com.google.protobuf.GeneratedMessage
+      implements HighlightResultOrBuilder {
+    // Use HighlightResult.newBuilder() to construct.
+    private HighlightResult(Builder builder) {
+      super(builder);
+    }
+    private HighlightResult(boolean noInit) {}
+    
+    private static final HighlightResult defaultInstance;
+    public static HighlightResult getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public HighlightResult getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightResult_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightResult_fieldAccessorTable;
+    }
+    
+    // repeated .com.alicloud.openservices.tablestore.core.protocol.HighlightField highlight_fields = 1;
+    public static final int HIGHLIGHT_FIELDS_FIELD_NUMBER = 1;
+    private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField> highlightFields_;
+    public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField> getHighlightFieldsList() {
+      return highlightFields_;
+    }
+    public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFieldOrBuilder> 
+        getHighlightFieldsOrBuilderList() {
+      return highlightFields_;
+    }
+    public int getHighlightFieldsCount() {
+      return highlightFields_.size();
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField getHighlightFields(int index) {
+      return highlightFields_.get(index);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFieldOrBuilder getHighlightFieldsOrBuilder(
+        int index) {
+      return highlightFields_.get(index);
+    }
+    
+    private void initFields() {
+      highlightFields_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      for (int i = 0; i < highlightFields_.size(); i++) {
+        output.writeMessage(1, highlightFields_.get(i));
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      for (int i = 0; i < highlightFields_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, highlightFields_.get(i));
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResultOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightResult_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightResult_fieldAccessorTable;
+      }
+      
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getHighlightFieldsFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        if (highlightFieldsBuilder_ == null) {
+          highlightFields_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          highlightFieldsBuilder_.clear();
+        }
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.getDescriptor();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.getDefaultInstance();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult result = new com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult(this);
+        int from_bitField0_ = bitField0_;
+        if (highlightFieldsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) == 0x00000001)) {
+            highlightFields_ = java.util.Collections.unmodifiableList(highlightFields_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.highlightFields_ = highlightFields_;
+        } else {
+          result.highlightFields_ = highlightFieldsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.getDefaultInstance()) return this;
+        if (highlightFieldsBuilder_ == null) {
+          if (!other.highlightFields_.isEmpty()) {
+            if (highlightFields_.isEmpty()) {
+              highlightFields_ = other.highlightFields_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureHighlightFieldsIsMutable();
+              highlightFields_.addAll(other.highlightFields_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.highlightFields_.isEmpty()) {
+            if (highlightFieldsBuilder_.isEmpty()) {
+              highlightFieldsBuilder_.dispose();
+              highlightFieldsBuilder_ = null;
+              highlightFields_ = other.highlightFields_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              highlightFieldsBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getHighlightFieldsFieldBuilder() : null;
+            } else {
+              highlightFieldsBuilder_.addAllMessages(other.highlightFields_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addHighlightFields(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // repeated .com.alicloud.openservices.tablestore.core.protocol.HighlightField highlight_fields = 1;
+      private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField> highlightFields_ =
+        java.util.Collections.emptyList();
+      private void ensureHighlightFieldsIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          highlightFields_ = new java.util.ArrayList<com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField>(highlightFields_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFieldOrBuilder> highlightFieldsBuilder_;
+      
+      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField> getHighlightFieldsList() {
+        if (highlightFieldsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(highlightFields_);
+        } else {
+          return highlightFieldsBuilder_.getMessageList();
+        }
+      }
+      public int getHighlightFieldsCount() {
+        if (highlightFieldsBuilder_ == null) {
+          return highlightFields_.size();
+        } else {
+          return highlightFieldsBuilder_.getCount();
+        }
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField getHighlightFields(int index) {
+        if (highlightFieldsBuilder_ == null) {
+          return highlightFields_.get(index);
+        } else {
+          return highlightFieldsBuilder_.getMessage(index);
+        }
+      }
+      public Builder setHighlightFields(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField value) {
+        if (highlightFieldsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureHighlightFieldsIsMutable();
+          highlightFields_.set(index, value);
+          onChanged();
+        } else {
+          highlightFieldsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setHighlightFields(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.Builder builderForValue) {
+        if (highlightFieldsBuilder_ == null) {
+          ensureHighlightFieldsIsMutable();
+          highlightFields_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          highlightFieldsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addHighlightFields(com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField value) {
+        if (highlightFieldsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureHighlightFieldsIsMutable();
+          highlightFields_.add(value);
+          onChanged();
+        } else {
+          highlightFieldsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addHighlightFields(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField value) {
+        if (highlightFieldsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureHighlightFieldsIsMutable();
+          highlightFields_.add(index, value);
+          onChanged();
+        } else {
+          highlightFieldsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addHighlightFields(
+          com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.Builder builderForValue) {
+        if (highlightFieldsBuilder_ == null) {
+          ensureHighlightFieldsIsMutable();
+          highlightFields_.add(builderForValue.build());
+          onChanged();
+        } else {
+          highlightFieldsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addHighlightFields(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.Builder builderForValue) {
+        if (highlightFieldsBuilder_ == null) {
+          ensureHighlightFieldsIsMutable();
+          highlightFields_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          highlightFieldsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllHighlightFields(
+          java.lang.Iterable<? extends com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField> values) {
+        if (highlightFieldsBuilder_ == null) {
+          ensureHighlightFieldsIsMutable();
+          super.addAll(values, highlightFields_);
+          onChanged();
+        } else {
+          highlightFieldsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearHighlightFields() {
+        if (highlightFieldsBuilder_ == null) {
+          highlightFields_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          highlightFieldsBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeHighlightFields(int index) {
+        if (highlightFieldsBuilder_ == null) {
+          ensureHighlightFieldsIsMutable();
+          highlightFields_.remove(index);
+          onChanged();
+        } else {
+          highlightFieldsBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.Builder getHighlightFieldsBuilder(
+          int index) {
+        return getHighlightFieldsFieldBuilder().getBuilder(index);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFieldOrBuilder getHighlightFieldsOrBuilder(
+          int index) {
+        if (highlightFieldsBuilder_ == null) {
+          return highlightFields_.get(index);  } else {
+          return highlightFieldsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFieldOrBuilder> 
+           getHighlightFieldsOrBuilderList() {
+        if (highlightFieldsBuilder_ != null) {
+          return highlightFieldsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(highlightFields_);
+        }
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.Builder addHighlightFieldsBuilder() {
+        return getHighlightFieldsFieldBuilder().addBuilder(
+            com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.getDefaultInstance());
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.Builder addHighlightFieldsBuilder(
+          int index) {
+        return getHighlightFieldsFieldBuilder().addBuilder(
+            index, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.getDefaultInstance());
+      }
+      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.Builder> 
+           getHighlightFieldsBuilderList() {
+        return getHighlightFieldsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFieldOrBuilder> 
+          getHighlightFieldsFieldBuilder() {
+        if (highlightFieldsBuilder_ == null) {
+          highlightFieldsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFieldOrBuilder>(
+                  highlightFields_,
+                  ((bitField0_ & 0x00000001) == 0x00000001),
+                  getParentForChildren(),
+                  isClean());
+          highlightFields_ = null;
+        }
+        return highlightFieldsBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.HighlightResult)
+    }
+    
+    static {
+      defaultInstance = new HighlightResult(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.HighlightResult)
+  }
+  
+  public interface HighlightFieldOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional string field_name = 1;
+    boolean hasFieldName();
+    String getFieldName();
+    
+    // repeated string field_fragments = 2;
+    java.util.List<String> getFieldFragmentsList();
+    int getFieldFragmentsCount();
+    String getFieldFragments(int index);
+  }
+  public static final class HighlightField extends
+      com.google.protobuf.GeneratedMessage
+      implements HighlightFieldOrBuilder {
+    // Use HighlightField.newBuilder() to construct.
+    private HighlightField(Builder builder) {
+      super(builder);
+    }
+    private HighlightField(boolean noInit) {}
+    
+    private static final HighlightField defaultInstance;
+    public static HighlightField getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public HighlightField getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightField_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightField_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional string field_name = 1;
+    public static final int FIELD_NAME_FIELD_NUMBER = 1;
+    private java.lang.Object fieldName_;
+    public boolean hasFieldName() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getFieldName() {
+      java.lang.Object ref = fieldName_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          fieldName_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getFieldNameBytes() {
+      java.lang.Object ref = fieldName_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        fieldName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // repeated string field_fragments = 2;
+    public static final int FIELD_FRAGMENTS_FIELD_NUMBER = 2;
+    private com.google.protobuf.LazyStringList fieldFragments_;
+    public java.util.List<String>
+        getFieldFragmentsList() {
+      return fieldFragments_;
+    }
+    public int getFieldFragmentsCount() {
+      return fieldFragments_.size();
+    }
+    public String getFieldFragments(int index) {
+      return fieldFragments_.get(index);
+    }
+    
+    private void initFields() {
+      fieldName_ = "";
+      fieldFragments_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getFieldNameBytes());
+      }
+      for (int i = 0; i < fieldFragments_.size(); i++) {
+        output.writeBytes(2, fieldFragments_.getByteString(i));
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getFieldNameBytes());
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < fieldFragments_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(fieldFragments_.getByteString(i));
+        }
+        size += dataSize;
+        size += 1 * getFieldFragmentsList().size();
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.HighlightFieldOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightField_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightField_fieldAccessorTable;
+      }
+      
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        fieldName_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        fieldFragments_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.getDescriptor();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.getDefaultInstance();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField result = new com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.fieldName_ = fieldName_;
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          fieldFragments_ = new com.google.protobuf.UnmodifiableLazyStringList(
+              fieldFragments_);
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.fieldFragments_ = fieldFragments_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.getDefaultInstance()) return this;
+        if (other.hasFieldName()) {
+          setFieldName(other.getFieldName());
+        }
+        if (!other.fieldFragments_.isEmpty()) {
+          if (fieldFragments_.isEmpty()) {
+            fieldFragments_ = other.fieldFragments_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensureFieldFragmentsIsMutable();
+            fieldFragments_.addAll(other.fieldFragments_);
+          }
+          onChanged();
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              fieldName_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              ensureFieldFragmentsIsMutable();
+              fieldFragments_.add(input.readBytes());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional string field_name = 1;
+      private java.lang.Object fieldName_ = "";
+      public boolean hasFieldName() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getFieldName() {
+        java.lang.Object ref = fieldName_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          fieldName_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setFieldName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        fieldName_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearFieldName() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        fieldName_ = getDefaultInstance().getFieldName();
+        onChanged();
+        return this;
+      }
+      void setFieldName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        fieldName_ = value;
+        onChanged();
+      }
+      
+      // repeated string field_fragments = 2;
+      private com.google.protobuf.LazyStringList fieldFragments_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensureFieldFragmentsIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          fieldFragments_ = new com.google.protobuf.LazyStringArrayList(fieldFragments_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      public java.util.List<String>
+          getFieldFragmentsList() {
+        return java.util.Collections.unmodifiableList(fieldFragments_);
+      }
+      public int getFieldFragmentsCount() {
+        return fieldFragments_.size();
+      }
+      public String getFieldFragments(int index) {
+        return fieldFragments_.get(index);
+      }
+      public Builder setFieldFragments(
+          int index, String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureFieldFragmentsIsMutable();
+        fieldFragments_.set(index, value);
+        onChanged();
+        return this;
+      }
+      public Builder addFieldFragments(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureFieldFragmentsIsMutable();
+        fieldFragments_.add(value);
+        onChanged();
+        return this;
+      }
+      public Builder addAllFieldFragments(
+          java.lang.Iterable<String> values) {
+        ensureFieldFragmentsIsMutable();
+        super.addAll(values, fieldFragments_);
+        onChanged();
+        return this;
+      }
+      public Builder clearFieldFragments() {
+        fieldFragments_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        onChanged();
+        return this;
+      }
+      void addFieldFragments(com.google.protobuf.ByteString value) {
+        ensureFieldFragmentsIsMutable();
+        fieldFragments_.add(value);
+        onChanged();
+      }
+      
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.HighlightField)
+    }
+    
+    static {
+      defaultInstance = new HighlightField(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.HighlightField)
+  }
+  
+  public interface DateTimeValueOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional int32 value = 1;
+    boolean hasValue();
+    int getValue();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.DateTimeUnit unit = 2;
+    boolean hasUnit();
+    com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit getUnit();
+  }
+  public static final class DateTimeValue extends
+      com.google.protobuf.GeneratedMessage
+      implements DateTimeValueOrBuilder {
+    // Use DateTimeValue.newBuilder() to construct.
+    private DateTimeValue(Builder builder) {
+      super(builder);
+    }
+    private DateTimeValue(boolean noInit) {}
+    
+    private static final DateTimeValue defaultInstance;
+    public static DateTimeValue getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public DateTimeValue getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_DateTimeValue_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_DateTimeValue_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional int32 value = 1;
+    public static final int VALUE_FIELD_NUMBER = 1;
+    private int value_;
+    public boolean hasValue() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public int getValue() {
+      return value_;
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.DateTimeUnit unit = 2;
+    public static final int UNIT_FIELD_NUMBER = 2;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit unit_;
+    public boolean hasUnit() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit getUnit() {
+      return unit_;
+    }
+    
+    private void initFields() {
+      value_ = 0;
+      unit_ = com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit.YEAR;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeInt32(1, value_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeEnum(2, unit_.getNumber());
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(1, value_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, unit_.getNumber());
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValueOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_DateTimeValue_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_DateTimeValue_fieldAccessorTable;
+      }
+      
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        value_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        unit_ = com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit.YEAR;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.getDescriptor();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.getDefaultInstance();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue result = new com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.value_ = value_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.unit_ = unit_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.getDefaultInstance()) return this;
+        if (other.hasValue()) {
+          setValue(other.getValue());
+        }
+        if (other.hasUnit()) {
+          setUnit(other.getUnit());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              value_ = input.readInt32();
+              break;
+            }
+            case 16: {
+              int rawValue = input.readEnum();
+              com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit value = com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(2, rawValue);
+              } else {
+                bitField0_ |= 0x00000002;
+                unit_ = value;
+              }
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional int32 value = 1;
+      private int value_ ;
+      public boolean hasValue() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public int getValue() {
+        return value_;
+      }
+      public Builder setValue(int value) {
+        bitField0_ |= 0x00000001;
+        value_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearValue() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        value_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.DateTimeUnit unit = 2;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit unit_ = com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit.YEAR;
+      public boolean hasUnit() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit getUnit() {
+        return unit_;
+      }
+      public Builder setUnit(com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000002;
+        unit_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearUnit() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        unit_ = com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeUnit.YEAR;
+        onChanged();
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.DateTimeValue)
+    }
+    
+    static {
+      defaultInstance = new DateTimeValue(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.DateTimeValue)
+  }
+  
+  public interface SingleWordAnalyzerParameterOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional bool case_sensitive = 1;
+    boolean hasCaseSensitive();
+    boolean getCaseSensitive();
+    
+    // optional bool delimit_word = 2;
+    boolean hasDelimitWord();
+    boolean getDelimitWord();
+  }
+  public static final class SingleWordAnalyzerParameter extends
+      com.google.protobuf.GeneratedMessage
+      implements SingleWordAnalyzerParameterOrBuilder {
+    // Use SingleWordAnalyzerParameter.newBuilder() to construct.
+    private SingleWordAnalyzerParameter(Builder builder) {
+      super(builder);
+    }
+    private SingleWordAnalyzerParameter(boolean noInit) {}
+    
+    private static final SingleWordAnalyzerParameter defaultInstance;
+    public static SingleWordAnalyzerParameter getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public SingleWordAnalyzerParameter getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SingleWordAnalyzerParameter_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SingleWordAnalyzerParameter_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional bool case_sensitive = 1;
+    public static final int CASE_SENSITIVE_FIELD_NUMBER = 1;
+    private boolean caseSensitive_;
+    public boolean hasCaseSensitive() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public boolean getCaseSensitive() {
+      return caseSensitive_;
+    }
+    
+    // optional bool delimit_word = 2;
+    public static final int DELIMIT_WORD_FIELD_NUMBER = 2;
+    private boolean delimitWord_;
+    public boolean hasDelimitWord() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public boolean getDelimitWord() {
+      return delimitWord_;
+    }
+    
+    private void initFields() {
+      caseSensitive_ = false;
+      delimitWord_ = false;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBool(1, caseSensitive_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBool(2, delimitWord_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(1, caseSensitive_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(2, delimitWord_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameterOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SingleWordAnalyzerParameter_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SingleWordAnalyzerParameter_fieldAccessorTable;
+      }
+      
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        caseSensitive_ = false;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        delimitWord_ = false;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter.getDescriptor();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter.getDefaultInstance();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter result = new com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.caseSensitive_ = caseSensitive_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.delimitWord_ = delimitWord_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter.getDefaultInstance()) return this;
+        if (other.hasCaseSensitive()) {
+          setCaseSensitive(other.getCaseSensitive());
+        }
+        if (other.hasDelimitWord()) {
+          setDelimitWord(other.getDelimitWord());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              caseSensitive_ = input.readBool();
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              delimitWord_ = input.readBool();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional bool case_sensitive = 1;
+      private boolean caseSensitive_ ;
+      public boolean hasCaseSensitive() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public boolean getCaseSensitive() {
+        return caseSensitive_;
+      }
+      public Builder setCaseSensitive(boolean value) {
+        bitField0_ |= 0x00000001;
+        caseSensitive_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearCaseSensitive() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        caseSensitive_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // optional bool delimit_word = 2;
+      private boolean delimitWord_ ;
+      public boolean hasDelimitWord() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public boolean getDelimitWord() {
+        return delimitWord_;
+      }
+      public Builder setDelimitWord(boolean value) {
+        bitField0_ |= 0x00000002;
+        delimitWord_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearDelimitWord() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        delimitWord_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.SingleWordAnalyzerParameter)
+    }
+    
+    static {
+      defaultInstance = new SingleWordAnalyzerParameter(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.SingleWordAnalyzerParameter)
+  }
+  
+  public interface SplitAnalyzerParameterOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional string delimiter = 1;
+    boolean hasDelimiter();
+    String getDelimiter();
+  }
+  public static final class SplitAnalyzerParameter extends
+      com.google.protobuf.GeneratedMessage
+      implements SplitAnalyzerParameterOrBuilder {
+    // Use SplitAnalyzerParameter.newBuilder() to construct.
+    private SplitAnalyzerParameter(Builder builder) {
+      super(builder);
+    }
+    private SplitAnalyzerParameter(boolean noInit) {}
+    
+    private static final SplitAnalyzerParameter defaultInstance;
+    public static SplitAnalyzerParameter getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public SplitAnalyzerParameter getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SplitAnalyzerParameter_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SplitAnalyzerParameter_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional string delimiter = 1;
+    public static final int DELIMITER_FIELD_NUMBER = 1;
+    private java.lang.Object delimiter_;
+    public boolean hasDelimiter() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getDelimiter() {
+      java.lang.Object ref = delimiter_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          delimiter_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getDelimiterBytes() {
+      java.lang.Object ref = delimiter_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        delimiter_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    private void initFields() {
+      delimiter_ = "";
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getDelimiterBytes());
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getDelimiterBytes());
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameterOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SplitAnalyzerParameter_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_SplitAnalyzerParameter_fieldAccessorTable;
+      }
+      
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        delimiter_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter.getDescriptor();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter.getDefaultInstance();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter result = new com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.delimiter_ = delimiter_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter.getDefaultInstance()) return this;
+        if (other.hasDelimiter()) {
+          setDelimiter(other.getDelimiter());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              delimiter_ = input.readBytes();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional string delimiter = 1;
+      private java.lang.Object delimiter_ = "";
+      public boolean hasDelimiter() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getDelimiter() {
+        java.lang.Object ref = delimiter_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          delimiter_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setDelimiter(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        delimiter_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearDelimiter() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        delimiter_ = getDefaultInstance().getDelimiter();
+        onChanged();
+        return this;
+      }
+      void setDelimiter(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        delimiter_ = value;
+        onChanged();
+      }
+      
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.SplitAnalyzerParameter)
+    }
+    
+    static {
+      defaultInstance = new SplitAnalyzerParameter(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.SplitAnalyzerParameter)
+  }
+  
+  public interface FuzzyAnalyzerParameterOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional int32 min_chars = 1;
+    boolean hasMinChars();
+    int getMinChars();
+    
+    // optional int32 max_chars = 2;
+    boolean hasMaxChars();
+    int getMaxChars();
+  }
+  public static final class FuzzyAnalyzerParameter extends
+      com.google.protobuf.GeneratedMessage
+      implements FuzzyAnalyzerParameterOrBuilder {
+    // Use FuzzyAnalyzerParameter.newBuilder() to construct.
+    private FuzzyAnalyzerParameter(Builder builder) {
+      super(builder);
+    }
+    private FuzzyAnalyzerParameter(boolean noInit) {}
+    
+    private static final FuzzyAnalyzerParameter defaultInstance;
+    public static FuzzyAnalyzerParameter getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public FuzzyAnalyzerParameter getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FuzzyAnalyzerParameter_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FuzzyAnalyzerParameter_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional int32 min_chars = 1;
+    public static final int MIN_CHARS_FIELD_NUMBER = 1;
+    private int minChars_;
+    public boolean hasMinChars() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public int getMinChars() {
+      return minChars_;
+    }
+    
+    // optional int32 max_chars = 2;
+    public static final int MAX_CHARS_FIELD_NUMBER = 2;
+    private int maxChars_;
+    public boolean hasMaxChars() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public int getMaxChars() {
+      return maxChars_;
+    }
+    
+    private void initFields() {
+      minChars_ = 0;
+      maxChars_ = 0;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeInt32(1, minChars_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeInt32(2, maxChars_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(1, minChars_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(2, maxChars_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameterOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FuzzyAnalyzerParameter_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FuzzyAnalyzerParameter_fieldAccessorTable;
+      }
+      
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        minChars_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        maxChars_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter.getDescriptor();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter.getDefaultInstance();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter result = new com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.minChars_ = minChars_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.maxChars_ = maxChars_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter.getDefaultInstance()) return this;
+        if (other.hasMinChars()) {
+          setMinChars(other.getMinChars());
+        }
+        if (other.hasMaxChars()) {
+          setMaxChars(other.getMaxChars());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              minChars_ = input.readInt32();
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              maxChars_ = input.readInt32();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional int32 min_chars = 1;
+      private int minChars_ ;
+      public boolean hasMinChars() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public int getMinChars() {
+        return minChars_;
+      }
+      public Builder setMinChars(int value) {
+        bitField0_ |= 0x00000001;
+        minChars_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearMinChars() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        minChars_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // optional int32 max_chars = 2;
+      private int maxChars_ ;
+      public boolean hasMaxChars() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public int getMaxChars() {
+        return maxChars_;
+      }
+      public Builder setMaxChars(int value) {
+        bitField0_ |= 0x00000002;
+        maxChars_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearMaxChars() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        maxChars_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.FuzzyAnalyzerParameter)
+    }
+    
+    static {
+      defaultInstance = new FuzzyAnalyzerParameter(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.FuzzyAnalyzerParameter)
+  }
+  
+  public interface FieldSchemaOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional string field_name = 1;
+    boolean hasFieldName();
+    String getFieldName();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.FieldType field_type = 2;
+    boolean hasFieldType();
+    com.alicloud.openservices.tablestore.core.protocol.Search.FieldType getFieldType();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.IndexOptions index_options = 3;
+    boolean hasIndexOptions();
+    com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions getIndexOptions();
+    
+    // optional string analyzer = 4;
+    boolean hasAnalyzer();
+    String getAnalyzer();
+    
+    // optional bool index = 5;
+    boolean hasIndex();
+    boolean getIndex();
+    
+    // optional bool sort_and_agg = 6;
+    boolean hasSortAndAgg();
+    boolean getSortAndAgg();
+    
+    // optional bool store = 7;
+    boolean hasStore();
+    boolean getStore();
+    
+    // repeated .com.alicloud.openservices.tablestore.core.protocol.FieldSchema field_schemas = 8;
+    java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema> 
+        getFieldSchemasList();
+    com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema getFieldSchemas(int index);
+    int getFieldSchemasCount();
+    java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder> 
+        getFieldSchemasOrBuilderList();
+    com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder getFieldSchemasOrBuilder(
+        int index);
+    
+    // optional bool is_array = 9;
+    boolean hasIsArray();
+    boolean getIsArray();
+    
+    // optional bytes analyzer_parameter = 10;
+    boolean hasAnalyzerParameter();
+    com.google.protobuf.ByteString getAnalyzerParameter();
+    
+    // optional bool is_virtual_field = 11;
+    boolean hasIsVirtualField();
+    boolean getIsVirtualField();
+    
+    // repeated string source_field_names = 12;
+    java.util.List<String> getSourceFieldNamesList();
+    int getSourceFieldNamesCount();
+    String getSourceFieldNames(int index);
+    
+    // repeated string date_formats = 13;
+    java.util.List<String> getDateFormatsList();
+    int getDateFormatsCount();
+    String getDateFormats(int index);
+    
+    // optional bool enable_highlighting = 14;
+    boolean hasEnableHighlighting();
+    boolean getEnableHighlighting();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.VectorOptions vector_options = 15;
+    boolean hasVectorOptions();
+    com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions getVectorOptions();
+    com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptionsOrBuilder getVectorOptionsOrBuilder();
+  }
+  public static final class FieldSchema extends
+      com.google.protobuf.GeneratedMessage
+      implements FieldSchemaOrBuilder {
+    // Use FieldSchema.newBuilder() to construct.
+    private FieldSchema(Builder builder) {
+      super(builder);
+    }
+    private FieldSchema(boolean noInit) {}
+    
+    private static final FieldSchema defaultInstance;
+    public static FieldSchema getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public FieldSchema getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSchema_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSchema_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional string field_name = 1;
+    public static final int FIELD_NAME_FIELD_NUMBER = 1;
+    private java.lang.Object fieldName_;
+    public boolean hasFieldName() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getFieldName() {
+      java.lang.Object ref = fieldName_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          fieldName_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getFieldNameBytes() {
+      java.lang.Object ref = fieldName_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        fieldName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.FieldType field_type = 2;
+    public static final int FIELD_TYPE_FIELD_NUMBER = 2;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.FieldType fieldType_;
+    public boolean hasFieldType() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.FieldType getFieldType() {
+      return fieldType_;
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.IndexOptions index_options = 3;
+    public static final int INDEX_OPTIONS_FIELD_NUMBER = 3;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions indexOptions_;
+    public boolean hasIndexOptions() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions getIndexOptions() {
+      return indexOptions_;
+    }
+    
+    // optional string analyzer = 4;
+    public static final int ANALYZER_FIELD_NUMBER = 4;
+    private java.lang.Object analyzer_;
+    public boolean hasAnalyzer() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public String getAnalyzer() {
+      java.lang.Object ref = analyzer_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          analyzer_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getAnalyzerBytes() {
+      java.lang.Object ref = analyzer_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        analyzer_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional bool index = 5;
+    public static final int INDEX_FIELD_NUMBER = 5;
+    private boolean index_;
+    public boolean hasIndex() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    public boolean getIndex() {
+      return index_;
+    }
+    
+    // optional bool sort_and_agg = 6;
+    public static final int SORT_AND_AGG_FIELD_NUMBER = 6;
+    private boolean sortAndAgg_;
+    public boolean hasSortAndAgg() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
+    }
+    public boolean getSortAndAgg() {
+      return sortAndAgg_;
+    }
+    
+    // optional bool store = 7;
+    public static final int STORE_FIELD_NUMBER = 7;
+    private boolean store_;
+    public boolean hasStore() {
+      return ((bitField0_ & 0x00000040) == 0x00000040);
+    }
+    public boolean getStore() {
+      return store_;
+    }
+    
+    // repeated .com.alicloud.openservices.tablestore.core.protocol.FieldSchema field_schemas = 8;
+    public static final int FIELD_SCHEMAS_FIELD_NUMBER = 8;
+    private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema> fieldSchemas_;
+    public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema> getFieldSchemasList() {
+      return fieldSchemas_;
+    }
+    public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder> 
+        getFieldSchemasOrBuilderList() {
+      return fieldSchemas_;
+    }
+    public int getFieldSchemasCount() {
+      return fieldSchemas_.size();
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema getFieldSchemas(int index) {
+      return fieldSchemas_.get(index);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder getFieldSchemasOrBuilder(
+        int index) {
+      return fieldSchemas_.get(index);
+    }
+    
+    // optional bool is_array = 9;
+    public static final int IS_ARRAY_FIELD_NUMBER = 9;
+    private boolean isArray_;
+    public boolean hasIsArray() {
+      return ((bitField0_ & 0x00000080) == 0x00000080);
+    }
+    public boolean getIsArray() {
+      return isArray_;
+    }
+    
+    // optional bytes analyzer_parameter = 10;
+    public static final int ANALYZER_PARAMETER_FIELD_NUMBER = 10;
+    private com.google.protobuf.ByteString analyzerParameter_;
+    public boolean hasAnalyzerParameter() {
+      return ((bitField0_ & 0x00000100) == 0x00000100);
+    }
+    public com.google.protobuf.ByteString getAnalyzerParameter() {
+      return analyzerParameter_;
+    }
+    
+    // optional bool is_virtual_field = 11;
+    public static final int IS_VIRTUAL_FIELD_FIELD_NUMBER = 11;
+    private boolean isVirtualField_;
+    public boolean hasIsVirtualField() {
+      return ((bitField0_ & 0x00000200) == 0x00000200);
+    }
+    public boolean getIsVirtualField() {
+      return isVirtualField_;
+    }
+    
+    // repeated string source_field_names = 12;
+    public static final int SOURCE_FIELD_NAMES_FIELD_NUMBER = 12;
+    private com.google.protobuf.LazyStringList sourceFieldNames_;
+    public java.util.List<String>
+        getSourceFieldNamesList() {
+      return sourceFieldNames_;
+    }
+    public int getSourceFieldNamesCount() {
+      return sourceFieldNames_.size();
+    }
+    public String getSourceFieldNames(int index) {
+      return sourceFieldNames_.get(index);
+    }
+    
+    // repeated string date_formats = 13;
+    public static final int DATE_FORMATS_FIELD_NUMBER = 13;
+    private com.google.protobuf.LazyStringList dateFormats_;
+    public java.util.List<String>
+        getDateFormatsList() {
+      return dateFormats_;
+    }
+    public int getDateFormatsCount() {
+      return dateFormats_.size();
+    }
+    public String getDateFormats(int index) {
+      return dateFormats_.get(index);
+    }
+    
+    // optional bool enable_highlighting = 14;
+    public static final int ENABLE_HIGHLIGHTING_FIELD_NUMBER = 14;
+    private boolean enableHighlighting_;
+    public boolean hasEnableHighlighting() {
+      return ((bitField0_ & 0x00000400) == 0x00000400);
+    }
+    public boolean getEnableHighlighting() {
+      return enableHighlighting_;
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.VectorOptions vector_options = 15;
+    public static final int VECTOR_OPTIONS_FIELD_NUMBER = 15;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions vectorOptions_;
+    public boolean hasVectorOptions() {
+      return ((bitField0_ & 0x00000800) == 0x00000800);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions getVectorOptions() {
+      return vectorOptions_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptionsOrBuilder getVectorOptionsOrBuilder() {
+      return vectorOptions_;
+    }
+    
+    private void initFields() {
+      fieldName_ = "";
+      fieldType_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldType.LONG;
+      indexOptions_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions.DOCS;
+      analyzer_ = "";
+      index_ = false;
+      sortAndAgg_ = false;
+      store_ = false;
+      fieldSchemas_ = java.util.Collections.emptyList();
+      isArray_ = false;
+      analyzerParameter_ = com.google.protobuf.ByteString.EMPTY;
+      isVirtualField_ = false;
+      sourceFieldNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      dateFormats_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      enableHighlighting_ = false;
+      vectorOptions_ = com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.getDefaultInstance();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getFieldNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeEnum(2, fieldType_.getNumber());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeEnum(3, indexOptions_.getNumber());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeBytes(4, getAnalyzerBytes());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeBool(5, index_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeBool(6, sortAndAgg_);
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        output.writeBool(7, store_);
+      }
+      for (int i = 0; i < fieldSchemas_.size(); i++) {
+        output.writeMessage(8, fieldSchemas_.get(i));
+      }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        output.writeBool(9, isArray_);
+      }
+      if (((bitField0_ & 0x00000100) == 0x00000100)) {
+        output.writeBytes(10, analyzerParameter_);
+      }
+      if (((bitField0_ & 0x00000200) == 0x00000200)) {
+        output.writeBool(11, isVirtualField_);
+      }
+      for (int i = 0; i < sourceFieldNames_.size(); i++) {
+        output.writeBytes(12, sourceFieldNames_.getByteString(i));
+      }
+      for (int i = 0; i < dateFormats_.size(); i++) {
+        output.writeBytes(13, dateFormats_.getByteString(i));
+      }
+      if (((bitField0_ & 0x00000400) == 0x00000400)) {
+        output.writeBool(14, enableHighlighting_);
+      }
+      if (((bitField0_ & 0x00000800) == 0x00000800)) {
+        output.writeMessage(15, vectorOptions_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getFieldNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, fieldType_.getNumber());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(3, indexOptions_.getNumber());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(4, getAnalyzerBytes());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(5, index_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(6, sortAndAgg_);
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(7, store_);
+      }
+      for (int i = 0; i < fieldSchemas_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, fieldSchemas_.get(i));
+      }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(9, isArray_);
+      }
+      if (((bitField0_ & 0x00000100) == 0x00000100)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(10, analyzerParameter_);
+      }
+      if (((bitField0_ & 0x00000200) == 0x00000200)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(11, isVirtualField_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < sourceFieldNames_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(sourceFieldNames_.getByteString(i));
+        }
+        size += dataSize;
+        size += 1 * getSourceFieldNamesList().size();
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < dateFormats_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(dateFormats_.getByteString(i));
+        }
+        size += dataSize;
+        size += 1 * getDateFormatsList().size();
+      }
+      if (((bitField0_ & 0x00000400) == 0x00000400)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(14, enableHighlighting_);
+      }
+      if (((bitField0_ & 0x00000800) == 0x00000800)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(15, vectorOptions_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSchema_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSchema_fieldAccessorTable;
+      }
+      
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getFieldSchemasFieldBuilder();
+          getVectorOptionsFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        fieldName_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        fieldType_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldType.LONG;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        indexOptions_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions.DOCS;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        analyzer_ = "";
+        bitField0_ = (bitField0_ & ~0x00000008);
+        index_ = false;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        sortAndAgg_ = false;
+        bitField0_ = (bitField0_ & ~0x00000020);
+        store_ = false;
+        bitField0_ = (bitField0_ & ~0x00000040);
+        if (fieldSchemasBuilder_ == null) {
+          fieldSchemas_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000080);
+        } else {
+          fieldSchemasBuilder_.clear();
+        }
+        isArray_ = false;
+        bitField0_ = (bitField0_ & ~0x00000100);
+        analyzerParameter_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000200);
+        isVirtualField_ = false;
+        bitField0_ = (bitField0_ & ~0x00000400);
+        sourceFieldNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000800);
+        dateFormats_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00001000);
+        enableHighlighting_ = false;
+        bitField0_ = (bitField0_ & ~0x00002000);
+        if (vectorOptionsBuilder_ == null) {
+          vectorOptions_ = com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.getDefaultInstance();
+        } else {
+          vectorOptionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00004000);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.getDescriptor();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.getDefaultInstance();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema result = new com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.fieldName_ = fieldName_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.fieldType_ = fieldType_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.indexOptions_ = indexOptions_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.analyzer_ = analyzer_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.index_ = index_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        result.sortAndAgg_ = sortAndAgg_;
+        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
+          to_bitField0_ |= 0x00000040;
+        }
+        result.store_ = store_;
+        if (fieldSchemasBuilder_ == null) {
+          if (((bitField0_ & 0x00000080) == 0x00000080)) {
+            fieldSchemas_ = java.util.Collections.unmodifiableList(fieldSchemas_);
+            bitField0_ = (bitField0_ & ~0x00000080);
+          }
+          result.fieldSchemas_ = fieldSchemas_;
+        } else {
+          result.fieldSchemas_ = fieldSchemasBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
+          to_bitField0_ |= 0x00000080;
+        }
+        result.isArray_ = isArray_;
+        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
+          to_bitField0_ |= 0x00000100;
+        }
+        result.analyzerParameter_ = analyzerParameter_;
+        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
+          to_bitField0_ |= 0x00000200;
+        }
+        result.isVirtualField_ = isVirtualField_;
+        if (((bitField0_ & 0x00000800) == 0x00000800)) {
+          sourceFieldNames_ = new com.google.protobuf.UnmodifiableLazyStringList(
+              sourceFieldNames_);
+          bitField0_ = (bitField0_ & ~0x00000800);
+        }
+        result.sourceFieldNames_ = sourceFieldNames_;
+        if (((bitField0_ & 0x00001000) == 0x00001000)) {
+          dateFormats_ = new com.google.protobuf.UnmodifiableLazyStringList(
+              dateFormats_);
+          bitField0_ = (bitField0_ & ~0x00001000);
+        }
+        result.dateFormats_ = dateFormats_;
+        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
+          to_bitField0_ |= 0x00000400;
+        }
+        result.enableHighlighting_ = enableHighlighting_;
+        if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
+          to_bitField0_ |= 0x00000800;
+        }
+        if (vectorOptionsBuilder_ == null) {
+          result.vectorOptions_ = vectorOptions_;
+        } else {
+          result.vectorOptions_ = vectorOptionsBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.getDefaultInstance()) return this;
+        if (other.hasFieldName()) {
+          setFieldName(other.getFieldName());
+        }
+        if (other.hasFieldType()) {
+          setFieldType(other.getFieldType());
+        }
+        if (other.hasIndexOptions()) {
+          setIndexOptions(other.getIndexOptions());
+        }
+        if (other.hasAnalyzer()) {
+          setAnalyzer(other.getAnalyzer());
+        }
+        if (other.hasIndex()) {
+          setIndex(other.getIndex());
+        }
+        if (other.hasSortAndAgg()) {
+          setSortAndAgg(other.getSortAndAgg());
+        }
+        if (other.hasStore()) {
+          setStore(other.getStore());
+        }
+        if (fieldSchemasBuilder_ == null) {
+          if (!other.fieldSchemas_.isEmpty()) {
+            if (fieldSchemas_.isEmpty()) {
+              fieldSchemas_ = other.fieldSchemas_;
+              bitField0_ = (bitField0_ & ~0x00000080);
+            } else {
+              ensureFieldSchemasIsMutable();
+              fieldSchemas_.addAll(other.fieldSchemas_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.fieldSchemas_.isEmpty()) {
+            if (fieldSchemasBuilder_.isEmpty()) {
+              fieldSchemasBuilder_.dispose();
+              fieldSchemasBuilder_ = null;
+              fieldSchemas_ = other.fieldSchemas_;
+              bitField0_ = (bitField0_ & ~0x00000080);
+              fieldSchemasBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getFieldSchemasFieldBuilder() : null;
+            } else {
+              fieldSchemasBuilder_.addAllMessages(other.fieldSchemas_);
+            }
+          }
+        }
+        if (other.hasIsArray()) {
+          setIsArray(other.getIsArray());
+        }
+        if (other.hasAnalyzerParameter()) {
+          setAnalyzerParameter(other.getAnalyzerParameter());
+        }
+        if (other.hasIsVirtualField()) {
+          setIsVirtualField(other.getIsVirtualField());
+        }
+        if (!other.sourceFieldNames_.isEmpty()) {
+          if (sourceFieldNames_.isEmpty()) {
+            sourceFieldNames_ = other.sourceFieldNames_;
+            bitField0_ = (bitField0_ & ~0x00000800);
+          } else {
+            ensureSourceFieldNamesIsMutable();
+            sourceFieldNames_.addAll(other.sourceFieldNames_);
+          }
+          onChanged();
+        }
+        if (!other.dateFormats_.isEmpty()) {
+          if (dateFormats_.isEmpty()) {
+            dateFormats_ = other.dateFormats_;
+            bitField0_ = (bitField0_ & ~0x00001000);
+          } else {
+            ensureDateFormatsIsMutable();
+            dateFormats_.addAll(other.dateFormats_);
+          }
+          onChanged();
+        }
+        if (other.hasEnableHighlighting()) {
+          setEnableHighlighting(other.getEnableHighlighting());
+        }
+        if (other.hasVectorOptions()) {
+          mergeVectorOptions(other.getVectorOptions());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              fieldName_ = input.readBytes();
+              break;
+            }
+            case 16: {
+              int rawValue = input.readEnum();
+              com.alicloud.openservices.tablestore.core.protocol.Search.FieldType value = com.alicloud.openservices.tablestore.core.protocol.Search.FieldType.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(2, rawValue);
+              } else {
+                bitField0_ |= 0x00000002;
+                fieldType_ = value;
+              }
+              break;
+            }
+            case 24: {
+              int rawValue = input.readEnum();
+              com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions value = com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(3, rawValue);
+              } else {
+                bitField0_ |= 0x00000004;
+                indexOptions_ = value;
+              }
+              break;
+            }
+            case 34: {
+              bitField0_ |= 0x00000008;
+              analyzer_ = input.readBytes();
+              break;
+            }
+            case 40: {
+              bitField0_ |= 0x00000010;
+              index_ = input.readBool();
+              break;
+            }
+            case 48: {
+              bitField0_ |= 0x00000020;
+              sortAndAgg_ = input.readBool();
+              break;
+            }
+            case 56: {
+              bitField0_ |= 0x00000040;
+              store_ = input.readBool();
+              break;
+            }
+            case 66: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addFieldSchemas(subBuilder.buildPartial());
+              break;
+            }
+            case 72: {
+              bitField0_ |= 0x00000100;
+              isArray_ = input.readBool();
+              break;
+            }
+            case 82: {
+              bitField0_ |= 0x00000200;
+              analyzerParameter_ = input.readBytes();
+              break;
+            }
+            case 88: {
+              bitField0_ |= 0x00000400;
+              isVirtualField_ = input.readBool();
+              break;
+            }
+            case 98: {
+              ensureSourceFieldNamesIsMutable();
+              sourceFieldNames_.add(input.readBytes());
+              break;
+            }
+            case 106: {
+              ensureDateFormatsIsMutable();
+              dateFormats_.add(input.readBytes());
+              break;
+            }
+            case 112: {
+              bitField0_ |= 0x00002000;
+              enableHighlighting_ = input.readBool();
+              break;
+            }
+            case 122: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.newBuilder();
+              if (hasVectorOptions()) {
+                subBuilder.mergeFrom(getVectorOptions());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setVectorOptions(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional string field_name = 1;
+      private java.lang.Object fieldName_ = "";
+      public boolean hasFieldName() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getFieldName() {
+        java.lang.Object ref = fieldName_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          fieldName_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setFieldName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        fieldName_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearFieldName() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        fieldName_ = getDefaultInstance().getFieldName();
+        onChanged();
+        return this;
+      }
+      void setFieldName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        fieldName_ = value;
+        onChanged();
+      }
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.FieldType field_type = 2;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.FieldType fieldType_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldType.LONG;
+      public boolean hasFieldType() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldType getFieldType() {
+        return fieldType_;
+      }
+      public Builder setFieldType(com.alicloud.openservices.tablestore.core.protocol.Search.FieldType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000002;
+        fieldType_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearFieldType() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        fieldType_ = com.alicloud.openservices.tablestore.core.protocol.Search.FieldType.LONG;
+        onChanged();
+        return this;
+      }
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.IndexOptions index_options = 3;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions indexOptions_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions.DOCS;
+      public boolean hasIndexOptions() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions getIndexOptions() {
+        return indexOptions_;
+      }
+      public Builder setIndexOptions(com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000004;
+        indexOptions_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearIndexOptions() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        indexOptions_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexOptions.DOCS;
+        onChanged();
+        return this;
+      }
+      
+      // optional string analyzer = 4;
+      private java.lang.Object analyzer_ = "";
+      public boolean hasAnalyzer() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public String getAnalyzer() {
+        java.lang.Object ref = analyzer_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          analyzer_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setAnalyzer(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000008;
+        analyzer_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearAnalyzer() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        analyzer_ = getDefaultInstance().getAnalyzer();
+        onChanged();
+        return this;
+      }
+      void setAnalyzer(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000008;
+        analyzer_ = value;
+        onChanged();
+      }
+      
+      // optional bool index = 5;
+      private boolean index_ ;
+      public boolean hasIndex() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public boolean getIndex() {
+        return index_;
+      }
+      public Builder setIndex(boolean value) {
+        bitField0_ |= 0x00000010;
+        index_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearIndex() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        index_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // optional bool sort_and_agg = 6;
+      private boolean sortAndAgg_ ;
+      public boolean hasSortAndAgg() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public boolean getSortAndAgg() {
+        return sortAndAgg_;
+      }
+      public Builder setSortAndAgg(boolean value) {
+        bitField0_ |= 0x00000020;
+        sortAndAgg_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearSortAndAgg() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        sortAndAgg_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // optional bool store = 7;
+      private boolean store_ ;
+      public boolean hasStore() {
+        return ((bitField0_ & 0x00000040) == 0x00000040);
+      }
+      public boolean getStore() {
+        return store_;
+      }
+      public Builder setStore(boolean value) {
+        bitField0_ |= 0x00000040;
+        store_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearStore() {
+        bitField0_ = (bitField0_ & ~0x00000040);
+        store_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // repeated .com.alicloud.openservices.tablestore.core.protocol.FieldSchema field_schemas = 8;
+      private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema> fieldSchemas_ =
+        java.util.Collections.emptyList();
+      private void ensureFieldSchemasIsMutable() {
+        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
+          fieldSchemas_ = new java.util.ArrayList<com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema>(fieldSchemas_);
+          bitField0_ |= 0x00000080;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder> fieldSchemasBuilder_;
+      
+      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema> getFieldSchemasList() {
+        if (fieldSchemasBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(fieldSchemas_);
+        } else {
+          return fieldSchemasBuilder_.getMessageList();
+        }
+      }
+      public int getFieldSchemasCount() {
+        if (fieldSchemasBuilder_ == null) {
+          return fieldSchemas_.size();
+        } else {
+          return fieldSchemasBuilder_.getCount();
+        }
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema getFieldSchemas(int index) {
+        if (fieldSchemasBuilder_ == null) {
+          return fieldSchemas_.get(index);
+        } else {
+          return fieldSchemasBuilder_.getMessage(index);
+        }
+      }
+      public Builder setFieldSchemas(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema value) {
+        if (fieldSchemasBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureFieldSchemasIsMutable();
+          fieldSchemas_.set(index, value);
+          onChanged();
+        } else {
+          fieldSchemasBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setFieldSchemas(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder builderForValue) {
+        if (fieldSchemasBuilder_ == null) {
+          ensureFieldSchemasIsMutable();
+          fieldSchemas_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          fieldSchemasBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addFieldSchemas(com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema value) {
+        if (fieldSchemasBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureFieldSchemasIsMutable();
+          fieldSchemas_.add(value);
+          onChanged();
+        } else {
+          fieldSchemasBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addFieldSchemas(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema value) {
+        if (fieldSchemasBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureFieldSchemasIsMutable();
+          fieldSchemas_.add(index, value);
+          onChanged();
+        } else {
+          fieldSchemasBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addFieldSchemas(
+          com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder builderForValue) {
+        if (fieldSchemasBuilder_ == null) {
+          ensureFieldSchemasIsMutable();
+          fieldSchemas_.add(builderForValue.build());
+          onChanged();
+        } else {
+          fieldSchemasBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addFieldSchemas(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder builderForValue) {
+        if (fieldSchemasBuilder_ == null) {
+          ensureFieldSchemasIsMutable();
+          fieldSchemas_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          fieldSchemasBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllFieldSchemas(
+          java.lang.Iterable<? extends com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema> values) {
+        if (fieldSchemasBuilder_ == null) {
+          ensureFieldSchemasIsMutable();
+          super.addAll(values, fieldSchemas_);
+          onChanged();
+        } else {
+          fieldSchemasBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearFieldSchemas() {
+        if (fieldSchemasBuilder_ == null) {
+          fieldSchemas_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000080);
+          onChanged();
+        } else {
+          fieldSchemasBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeFieldSchemas(int index) {
+        if (fieldSchemasBuilder_ == null) {
+          ensureFieldSchemasIsMutable();
+          fieldSchemas_.remove(index);
+          onChanged();
+        } else {
+          fieldSchemasBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder getFieldSchemasBuilder(
+          int index) {
+        return getFieldSchemasFieldBuilder().getBuilder(index);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder getFieldSchemasOrBuilder(
+          int index) {
+        if (fieldSchemasBuilder_ == null) {
+          return fieldSchemas_.get(index);  } else {
+          return fieldSchemasBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder> 
+           getFieldSchemasOrBuilderList() {
+        if (fieldSchemasBuilder_ != null) {
+          return fieldSchemasBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(fieldSchemas_);
+        }
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder addFieldSchemasBuilder() {
+        return getFieldSchemasFieldBuilder().addBuilder(
+            com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.getDefaultInstance());
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder addFieldSchemasBuilder(
+          int index) {
+        return getFieldSchemasFieldBuilder().addBuilder(
+            index, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.getDefaultInstance());
+      }
+      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder> 
+           getFieldSchemasBuilderList() {
+        return getFieldSchemasFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder> 
+          getFieldSchemasFieldBuilder() {
+        if (fieldSchemasBuilder_ == null) {
+          fieldSchemasBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchemaOrBuilder>(
+                  fieldSchemas_,
+                  ((bitField0_ & 0x00000080) == 0x00000080),
+                  getParentForChildren(),
+                  isClean());
+          fieldSchemas_ = null;
+        }
+        return fieldSchemasBuilder_;
+      }
+      
+      // optional bool is_array = 9;
+      private boolean isArray_ ;
+      public boolean hasIsArray() {
+        return ((bitField0_ & 0x00000100) == 0x00000100);
+      }
+      public boolean getIsArray() {
+        return isArray_;
+      }
+      public Builder setIsArray(boolean value) {
+        bitField0_ |= 0x00000100;
+        isArray_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearIsArray() {
+        bitField0_ = (bitField0_ & ~0x00000100);
+        isArray_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // optional bytes analyzer_parameter = 10;
+      private com.google.protobuf.ByteString analyzerParameter_ = com.google.protobuf.ByteString.EMPTY;
+      public boolean hasAnalyzerParameter() {
+        return ((bitField0_ & 0x00000200) == 0x00000200);
+      }
+      public com.google.protobuf.ByteString getAnalyzerParameter() {
+        return analyzerParameter_;
+      }
+      public Builder setAnalyzerParameter(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000200;
+        analyzerParameter_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearAnalyzerParameter() {
+        bitField0_ = (bitField0_ & ~0x00000200);
+        analyzerParameter_ = getDefaultInstance().getAnalyzerParameter();
+        onChanged();
+        return this;
+      }
+      
+      // optional bool is_virtual_field = 11;
+      private boolean isVirtualField_ ;
+      public boolean hasIsVirtualField() {
+        return ((bitField0_ & 0x00000400) == 0x00000400);
+      }
+      public boolean getIsVirtualField() {
+        return isVirtualField_;
+      }
+      public Builder setIsVirtualField(boolean value) {
+        bitField0_ |= 0x00000400;
+        isVirtualField_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearIsVirtualField() {
+        bitField0_ = (bitField0_ & ~0x00000400);
+        isVirtualField_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // repeated string source_field_names = 12;
+      private com.google.protobuf.LazyStringList sourceFieldNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensureSourceFieldNamesIsMutable() {
+        if (!((bitField0_ & 0x00000800) == 0x00000800)) {
+          sourceFieldNames_ = new com.google.protobuf.LazyStringArrayList(sourceFieldNames_);
+          bitField0_ |= 0x00000800;
+         }
+      }
+      public java.util.List<String>
+          getSourceFieldNamesList() {
+        return java.util.Collections.unmodifiableList(sourceFieldNames_);
+      }
+      public int getSourceFieldNamesCount() {
+        return sourceFieldNames_.size();
+      }
+      public String getSourceFieldNames(int index) {
+        return sourceFieldNames_.get(index);
+      }
+      public Builder setSourceFieldNames(
+          int index, String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureSourceFieldNamesIsMutable();
+        sourceFieldNames_.set(index, value);
+        onChanged();
+        return this;
+      }
+      public Builder addSourceFieldNames(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureSourceFieldNamesIsMutable();
+        sourceFieldNames_.add(value);
+        onChanged();
+        return this;
+      }
+      public Builder addAllSourceFieldNames(
+          java.lang.Iterable<String> values) {
+        ensureSourceFieldNamesIsMutable();
+        super.addAll(values, sourceFieldNames_);
+        onChanged();
+        return this;
+      }
+      public Builder clearSourceFieldNames() {
+        sourceFieldNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000800);
+        onChanged();
+        return this;
+      }
+      void addSourceFieldNames(com.google.protobuf.ByteString value) {
+        ensureSourceFieldNamesIsMutable();
+        sourceFieldNames_.add(value);
+        onChanged();
+      }
+      
+      // repeated string date_formats = 13;
+      private com.google.protobuf.LazyStringList dateFormats_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensureDateFormatsIsMutable() {
+        if (!((bitField0_ & 0x00001000) == 0x00001000)) {
+          dateFormats_ = new com.google.protobuf.LazyStringArrayList(dateFormats_);
+          bitField0_ |= 0x00001000;
+         }
+      }
+      public java.util.List<String>
+          getDateFormatsList() {
+        return java.util.Collections.unmodifiableList(dateFormats_);
+      }
+      public int getDateFormatsCount() {
+        return dateFormats_.size();
+      }
+      public String getDateFormats(int index) {
+        return dateFormats_.get(index);
+      }
+      public Builder setDateFormats(
+          int index, String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureDateFormatsIsMutable();
+        dateFormats_.set(index, value);
+        onChanged();
+        return this;
+      }
+      public Builder addDateFormats(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureDateFormatsIsMutable();
+        dateFormats_.add(value);
+        onChanged();
+        return this;
+      }
+      public Builder addAllDateFormats(
+          java.lang.Iterable<String> values) {
+        ensureDateFormatsIsMutable();
+        super.addAll(values, dateFormats_);
+        onChanged();
+        return this;
+      }
+      public Builder clearDateFormats() {
+        dateFormats_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00001000);
+        onChanged();
+        return this;
+      }
+      void addDateFormats(com.google.protobuf.ByteString value) {
+        ensureDateFormatsIsMutable();
+        dateFormats_.add(value);
+        onChanged();
+      }
+      
+      // optional bool enable_highlighting = 14;
+      private boolean enableHighlighting_ ;
+      public boolean hasEnableHighlighting() {
+        return ((bitField0_ & 0x00002000) == 0x00002000);
+      }
+      public boolean getEnableHighlighting() {
+        return enableHighlighting_;
+      }
+      public Builder setEnableHighlighting(boolean value) {
+        bitField0_ |= 0x00002000;
+        enableHighlighting_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearEnableHighlighting() {
+        bitField0_ = (bitField0_ & ~0x00002000);
+        enableHighlighting_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.VectorOptions vector_options = 15;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions vectorOptions_ = com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions, com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptionsOrBuilder> vectorOptionsBuilder_;
+      public boolean hasVectorOptions() {
+        return ((bitField0_ & 0x00004000) == 0x00004000);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions getVectorOptions() {
+        if (vectorOptionsBuilder_ == null) {
+          return vectorOptions_;
+        } else {
+          return vectorOptionsBuilder_.getMessage();
+        }
+      }
+      public Builder setVectorOptions(com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions value) {
+        if (vectorOptionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          vectorOptions_ = value;
+          onChanged();
+        } else {
+          vectorOptionsBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00004000;
+        return this;
+      }
+      public Builder setVectorOptions(
+          com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.Builder builderForValue) {
+        if (vectorOptionsBuilder_ == null) {
+          vectorOptions_ = builderForValue.build();
+          onChanged();
+        } else {
+          vectorOptionsBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00004000;
+        return this;
+      }
+      public Builder mergeVectorOptions(com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions value) {
+        if (vectorOptionsBuilder_ == null) {
+          if (((bitField0_ & 0x00004000) == 0x00004000) &&
+              vectorOptions_ != com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.getDefaultInstance()) {
+            vectorOptions_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.newBuilder(vectorOptions_).mergeFrom(value).buildPartial();
+          } else {
+            vectorOptions_ = value;
+          }
+          onChanged();
+        } else {
+          vectorOptionsBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00004000;
+        return this;
+      }
+      public Builder clearVectorOptions() {
+        if (vectorOptionsBuilder_ == null) {
+          vectorOptions_ = com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.getDefaultInstance();
+          onChanged();
+        } else {
+          vectorOptionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00004000);
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.Builder getVectorOptionsBuilder() {
+        bitField0_ |= 0x00004000;
+        onChanged();
+        return getVectorOptionsFieldBuilder().getBuilder();
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptionsOrBuilder getVectorOptionsOrBuilder() {
+        if (vectorOptionsBuilder_ != null) {
+          return vectorOptionsBuilder_.getMessageOrBuilder();
+        } else {
+          return vectorOptions_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions, com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptionsOrBuilder> 
+          getVectorOptionsFieldBuilder() {
+        if (vectorOptionsBuilder_ == null) {
+          vectorOptionsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions, com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptionsOrBuilder>(
+                  vectorOptions_,
+                  getParentForChildren(),
+                  isClean());
+          vectorOptions_ = null;
+        }
+        return vectorOptionsBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.FieldSchema)
+    }
+    
+    static {
+      defaultInstance = new FieldSchema(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.FieldSchema)
+  }
+  
+  public interface VectorOptionsOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.VectorDataType data_type = 1;
+    boolean hasDataType();
+    com.alicloud.openservices.tablestore.core.protocol.Search.VectorDataType getDataType();
+    
+    // optional int32 dimension = 2;
+    boolean hasDimension();
+    int getDimension();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.VectorMetricType metric_type = 3;
+    boolean hasMetricType();
+    com.alicloud.openservices.tablestore.core.protocol.Search.VectorMetricType getMetricType();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.VectorIndexType index_type = 4;
+    boolean hasIndexType();
+    com.alicloud.openservices.tablestore.core.protocol.Search.VectorIndexType getIndexType();
+    
+    // optional bytes index_parameter = 5;
+    boolean hasIndexParameter();
+    com.google.protobuf.ByteString getIndexParameter();
+  }
+  public static final class VectorOptions extends
+      com.google.protobuf.GeneratedMessage
+      implements VectorOptionsOrBuilder {
+    // Use VectorOptions.newBuilder() to construct.
+    private VectorOptions(Builder builder) {
+      super(builder);
+    }
+    private VectorOptions(boolean noInit) {}
+    
+    private static final VectorOptions defaultInstance;
+    public static VectorOptions getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public VectorOptions getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_VectorOptions_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_VectorOptions_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional .com.alicloud.openservices.tablestore.core.protocol.VectorDataType data_type = 1;
+    public static final int DATA_TYPE_FIELD_NUMBER = 1;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.VectorDataType dataType_;
+    public boolean hasDataType() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.VectorDataType getDataType() {
+      return dataType_;
+    }
+    
+    // optional int32 dimension = 2;
+    public static final int DIMENSION_FIELD_NUMBER = 2;
+    private int dimension_;
+    public boolean hasDimension() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public int getDimension() {
+      return dimension_;
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.VectorMetricType metric_type = 3;
+    public static final int METRIC_TYPE_FIELD_NUMBER = 3;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.VectorMetricType metricType_;
+    public boolean hasMetricType() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.VectorMetricType getMetricType() {
+      return metricType_;
+    }
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.VectorIndexType index_type = 4;
+    public static final int INDEX_TYPE_FIELD_NUMBER = 4;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.VectorIndexType indexType_;
+    public boolean hasIndexType() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.VectorIndexType getIndexType() {
+      return indexType_;
+    }
+    
+    // optional bytes index_parameter = 5;
+    public static final int INDEX_PARAMETER_FIELD_NUMBER = 5;
+    private com.google.protobuf.ByteString indexParameter_;
+    public boolean hasIndexParameter() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    public com.google.protobuf.ByteString getIndexParameter() {
+      return indexParameter_;
+    }
+    
+    private void initFields() {
+      dataType_ = com.alicloud.openservices.tablestore.core.protocol.Search.VectorDataType.VD_FLOAT_32;
+      dimension_ = 0;
+      metricType_ = com.alicloud.openservices.tablestore.core.protocol.Search.VectorMetricType.VM_EUCLIDEAN;
+      indexType_ = com.alicloud.openservices.tablestore.core.protocol.Search.VectorIndexType.VI_HNSW;
+      indexParameter_ = com.google.protobuf.ByteString.EMPTY;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeEnum(1, dataType_.getNumber());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeInt32(2, dimension_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeEnum(3, metricType_.getNumber());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeEnum(4, indexType_.getNumber());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeBytes(5, indexParameter_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(1, dataType_.getNumber());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(2, dimension_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(3, metricType_.getNumber());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(4, indexType_.getNumber());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(5, indexParameter_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptionsOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_VectorOptions_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_VectorOptions_fieldAccessorTable;
+      }
+      
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        dataType_ = com.alicloud.openservices.tablestore.core.protocol.Search.VectorDataType.VD_FLOAT_32;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        dimension_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        metricType_ = com.alicloud.openservices.tablestore.core.protocol.Search.VectorMetricType.VM_EUCLIDEAN;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        indexType_ = com.alicloud.openservices.tablestore.core.protocol.Search.VectorIndexType.VI_HNSW;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        indexParameter_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.getDescriptor();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.getDefaultInstance();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
       }
-      public Builder setSourceFieldNames(
-          int index, String value) {
+      
+      private com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions result = new com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.dataType_ = dataType_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.dimension_ = dimension_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.metricType_ = metricType_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.indexType_ = indexType_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.indexParameter_ = indexParameter_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.getDefaultInstance()) return this;
+        if (other.hasDataType()) {
+          setDataType(other.getDataType());
+        }
+        if (other.hasDimension()) {
+          setDimension(other.getDimension());
+        }
+        if (other.hasMetricType()) {
+          setMetricType(other.getMetricType());
+        }
+        if (other.hasIndexType()) {
+          setIndexType(other.getIndexType());
+        }
+        if (other.hasIndexParameter()) {
+          setIndexParameter(other.getIndexParameter());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              int rawValue = input.readEnum();
+              com.alicloud.openservices.tablestore.core.protocol.Search.VectorDataType value = com.alicloud.openservices.tablestore.core.protocol.Search.VectorDataType.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(1, rawValue);
+              } else {
+                bitField0_ |= 0x00000001;
+                dataType_ = value;
+              }
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              dimension_ = input.readInt32();
+              break;
+            }
+            case 24: {
+              int rawValue = input.readEnum();
+              com.alicloud.openservices.tablestore.core.protocol.Search.VectorMetricType value = com.alicloud.openservices.tablestore.core.protocol.Search.VectorMetricType.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(3, rawValue);
+              } else {
+                bitField0_ |= 0x00000004;
+                metricType_ = value;
+              }
+              break;
+            }
+            case 32: {
+              int rawValue = input.readEnum();
+              com.alicloud.openservices.tablestore.core.protocol.Search.VectorIndexType value = com.alicloud.openservices.tablestore.core.protocol.Search.VectorIndexType.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(4, rawValue);
+              } else {
+                bitField0_ |= 0x00000008;
+                indexType_ = value;
+              }
+              break;
+            }
+            case 42: {
+              bitField0_ |= 0x00000010;
+              indexParameter_ = input.readBytes();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.VectorDataType data_type = 1;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.VectorDataType dataType_ = com.alicloud.openservices.tablestore.core.protocol.Search.VectorDataType.VD_FLOAT_32;
+      public boolean hasDataType() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.VectorDataType getDataType() {
+        return dataType_;
+      }
+      public Builder setDataType(com.alicloud.openservices.tablestore.core.protocol.Search.VectorDataType value) {
         if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureSourceFieldNamesIsMutable();
-        sourceFieldNames_.set(index, value);
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000001;
+        dataType_ = value;
         onChanged();
         return this;
       }
-      public Builder addSourceFieldNames(String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  ensureSourceFieldNamesIsMutable();
-        sourceFieldNames_.add(value);
+      public Builder clearDataType() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        dataType_ = com.alicloud.openservices.tablestore.core.protocol.Search.VectorDataType.VD_FLOAT_32;
         onChanged();
         return this;
       }
-      public Builder addAllSourceFieldNames(
-          java.lang.Iterable<String> values) {
-        ensureSourceFieldNamesIsMutable();
-        super.addAll(values, sourceFieldNames_);
+      
+      // optional int32 dimension = 2;
+      private int dimension_ ;
+      public boolean hasDimension() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public int getDimension() {
+        return dimension_;
+      }
+      public Builder setDimension(int value) {
+        bitField0_ |= 0x00000002;
+        dimension_ = value;
         onChanged();
         return this;
       }
-      public Builder clearSourceFieldNames() {
-        sourceFieldNames_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000800);
+      public Builder clearDimension() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        dimension_ = 0;
         onChanged();
         return this;
       }
-      void addSourceFieldNames(com.google.protobuf.ByteString value) {
-        ensureSourceFieldNamesIsMutable();
-        sourceFieldNames_.add(value);
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.VectorMetricType metric_type = 3;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.VectorMetricType metricType_ = com.alicloud.openservices.tablestore.core.protocol.Search.VectorMetricType.VM_EUCLIDEAN;
+      public boolean hasMetricType() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.VectorMetricType getMetricType() {
+        return metricType_;
+      }
+      public Builder setMetricType(com.alicloud.openservices.tablestore.core.protocol.Search.VectorMetricType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000004;
+        metricType_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearMetricType() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        metricType_ = com.alicloud.openservices.tablestore.core.protocol.Search.VectorMetricType.VM_EUCLIDEAN;
         onChanged();
+        return this;
       }
       
-      // repeated string date_formats = 13;
-      private com.google.protobuf.LazyStringList dateFormats_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      private void ensureDateFormatsIsMutable() {
-        if (!((bitField0_ & 0x00001000) == 0x00001000)) {
-          dateFormats_ = new com.google.protobuf.LazyStringArrayList(dateFormats_);
-          bitField0_ |= 0x00001000;
-         }
+      // optional .com.alicloud.openservices.tablestore.core.protocol.VectorIndexType index_type = 4;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.VectorIndexType indexType_ = com.alicloud.openservices.tablestore.core.protocol.Search.VectorIndexType.VI_HNSW;
+      public boolean hasIndexType() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
       }
-      public java.util.List<String>
-          getDateFormatsList() {
-        return java.util.Collections.unmodifiableList(dateFormats_);
+      public com.alicloud.openservices.tablestore.core.protocol.Search.VectorIndexType getIndexType() {
+        return indexType_;
       }
-      public int getDateFormatsCount() {
-        return dateFormats_.size();
+      public Builder setIndexType(com.alicloud.openservices.tablestore.core.protocol.Search.VectorIndexType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000008;
+        indexType_ = value;
+        onChanged();
+        return this;
       }
-      public String getDateFormats(int index) {
-        return dateFormats_.get(index);
+      public Builder clearIndexType() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        indexType_ = com.alicloud.openservices.tablestore.core.protocol.Search.VectorIndexType.VI_HNSW;
+        onChanged();
+        return this;
       }
-      public Builder setDateFormats(
-          int index, String value) {
+      
+      // optional bytes index_parameter = 5;
+      private com.google.protobuf.ByteString indexParameter_ = com.google.protobuf.ByteString.EMPTY;
+      public boolean hasIndexParameter() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public com.google.protobuf.ByteString getIndexParameter() {
+        return indexParameter_;
+      }
+      public Builder setIndexParameter(com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
-  ensureDateFormatsIsMutable();
-        dateFormats_.set(index, value);
+  bitField0_ |= 0x00000010;
+        indexParameter_ = value;
         onChanged();
         return this;
       }
-      public Builder addDateFormats(String value) {
-        if (value == null) {
-    throw new NullPointerException();
+      public Builder clearIndexParameter() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        indexParameter_ = getDefaultInstance().getIndexParameter();
+        onChanged();
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.VectorOptions)
+    }
+    
+    static {
+      defaultInstance = new VectorOptions(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.VectorOptions)
   }
-  ensureDateFormatsIsMutable();
-        dateFormats_.add(value);
+  
+  public interface HNSWIndexParameterOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional int32 m = 1;
+    boolean hasM();
+    int getM();
+    
+    // optional int32 ef_construction = 2;
+    boolean hasEfConstruction();
+    int getEfConstruction();
+  }
+  public static final class HNSWIndexParameter extends
+      com.google.protobuf.GeneratedMessage
+      implements HNSWIndexParameterOrBuilder {
+    // Use HNSWIndexParameter.newBuilder() to construct.
+    private HNSWIndexParameter(Builder builder) {
+      super(builder);
+    }
+    private HNSWIndexParameter(boolean noInit) {}
+    
+    private static final HNSWIndexParameter defaultInstance;
+    public static HNSWIndexParameter getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public HNSWIndexParameter getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_HNSWIndexParameter_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_HNSWIndexParameter_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional int32 m = 1;
+    public static final int M_FIELD_NUMBER = 1;
+    private int m_;
+    public boolean hasM() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public int getM() {
+      return m_;
+    }
+    
+    // optional int32 ef_construction = 2;
+    public static final int EF_CONSTRUCTION_FIELD_NUMBER = 2;
+    private int efConstruction_;
+    public boolean hasEfConstruction() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public int getEfConstruction() {
+      return efConstruction_;
+    }
+    
+    private void initFields() {
+      m_ = 0;
+      efConstruction_ = 0;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeInt32(1, m_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeInt32(2, efConstruction_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(1, m_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(2, efConstruction_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameterOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_HNSWIndexParameter_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_HNSWIndexParameter_fieldAccessorTable;
+      }
+      
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        m_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        efConstruction_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter.getDescriptor();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter.getDefaultInstance();
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter result = new com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.m_ = m_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.efConstruction_ = efConstruction_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter.getDefaultInstance()) return this;
+        if (other.hasM()) {
+          setM(other.getM());
+        }
+        if (other.hasEfConstruction()) {
+          setEfConstruction(other.getEfConstruction());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              m_ = input.readInt32();
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              efConstruction_ = input.readInt32();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional int32 m = 1;
+      private int m_ ;
+      public boolean hasM() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public int getM() {
+        return m_;
+      }
+      public Builder setM(int value) {
+        bitField0_ |= 0x00000001;
+        m_ = value;
         onChanged();
         return this;
       }
-      public Builder addAllDateFormats(
-          java.lang.Iterable<String> values) {
-        ensureDateFormatsIsMutable();
-        super.addAll(values, dateFormats_);
+      public Builder clearM() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        m_ = 0;
         onChanged();
         return this;
       }
-      public Builder clearDateFormats() {
-        dateFormats_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00001000);
+      
+      // optional int32 ef_construction = 2;
+      private int efConstruction_ ;
+      public boolean hasEfConstruction() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public int getEfConstruction() {
+        return efConstruction_;
+      }
+      public Builder setEfConstruction(int value) {
+        bitField0_ |= 0x00000002;
+        efConstruction_ = value;
         onChanged();
         return this;
       }
-      void addDateFormats(com.google.protobuf.ByteString value) {
-        ensureDateFormatsIsMutable();
-        dateFormats_.add(value);
+      public Builder clearEfConstruction() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        efConstruction_ = 0;
         onChanged();
+        return this;
       }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.FieldSchema)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.HNSWIndexParameter)
     }
     
     static {
-      defaultInstance = new FieldSchema(true);
+      defaultInstance = new HNSWIndexParameter(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.FieldSchema)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.HNSWIndexParameter)
   }
   
   public interface IndexSchemaOrBuilder
@@ -76985,6 +85438,11 @@ com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeightOrBuild
     // optional int32 time_to_live = 7;
     boolean hasTimeToLive();
     int getTimeToLive();
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.IndexStatus index_status = 8;
+    boolean hasIndexStatus();
+    com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus getIndexStatus();
+    com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusOrBuilder getIndexStatusOrBuilder();
   }
   public static final class DescribeSearchIndexResponse extends
       com.google.protobuf.GeneratedMessage
@@ -77127,6 +85585,19 @@ public int getTimeToLive() {
       return timeToLive_;
     }
     
+    // optional .com.alicloud.openservices.tablestore.core.protocol.IndexStatus index_status = 8;
+    public static final int INDEX_STATUS_FIELD_NUMBER = 8;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus indexStatus_;
+    public boolean hasIndexStatus() {
+      return ((bitField0_ & 0x00000040) == 0x00000040);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus getIndexStatus() {
+      return indexStatus_;
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusOrBuilder getIndexStatusOrBuilder() {
+      return indexStatus_;
+    }
+    
     private void initFields() {
       schema_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexSchema.getDefaultInstance();
       syncStat_ = com.alicloud.openservices.tablestore.core.protocol.Search.SyncStat.getDefaultInstance();
@@ -77135,6 +85606,7 @@ private void initFields() {
       queryFlowWeight_ = java.util.Collections.emptyList();
       createTime_ = 0L;
       timeToLive_ = 0;
+      indexStatus_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.getDefaultInstance();
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -77169,6 +85641,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (((bitField0_ & 0x00000020) == 0x00000020)) {
         output.writeInt32(7, timeToLive_);
       }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        output.writeMessage(8, indexStatus_);
+      }
       getUnknownFields().writeTo(output);
     }
     
@@ -77206,6 +85681,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt32Size(7, timeToLive_);
       }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, indexStatus_);
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -77326,6 +85805,7 @@ private void maybeForceBuilderInitialization() {
           getSyncStatFieldBuilder();
           getMeteringInfoFieldBuilder();
           getQueryFlowWeightFieldBuilder();
+          getIndexStatusFieldBuilder();
         }
       }
       private static Builder create() {
@@ -77364,6 +85844,12 @@ public Builder clear() {
         bitField0_ = (bitField0_ & ~0x00000020);
         timeToLive_ = 0;
         bitField0_ = (bitField0_ & ~0x00000040);
+        if (indexStatusBuilder_ == null) {
+          indexStatus_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.getDefaultInstance();
+        } else {
+          indexStatusBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000080);
         return this;
       }
       
@@ -77447,6 +85933,14 @@ public com.alicloud.openservices.tablestore.core.protocol.Search.DescribeSearchI
           to_bitField0_ |= 0x00000020;
         }
         result.timeToLive_ = timeToLive_;
+        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
+          to_bitField0_ |= 0x00000040;
+        }
+        if (indexStatusBuilder_ == null) {
+          result.indexStatus_ = indexStatus_;
+        } else {
+          result.indexStatus_ = indexStatusBuilder_.build();
+        }
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -77507,6 +86001,9 @@ public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Sear
         if (other.hasTimeToLive()) {
           setTimeToLive(other.getTimeToLive());
         }
+        if (other.hasIndexStatus()) {
+          mergeIndexStatus(other.getIndexStatus());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -77586,6 +86083,15 @@ public Builder mergeFrom(
               timeToLive_ = input.readInt32();
               break;
             }
+            case 66: {
+              com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.Builder subBuilder = com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.newBuilder();
+              if (hasIndexStatus()) {
+                subBuilder.mergeFrom(getIndexStatus());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setIndexStatus(subBuilder.buildPartial());
+              break;
+            }
           }
         }
       }
@@ -77898,243 +86404,774 @@ void setBrotherIndexName(com.google.protobuf.ByteString value) {
         onChanged();
       }
       
-      // repeated .com.alicloud.openservices.tablestore.core.protocol.QueryFlowWeight query_flow_weight = 5;
-      private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight> queryFlowWeight_ =
-        java.util.Collections.emptyList();
-      private void ensureQueryFlowWeightIsMutable() {
-        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
-          queryFlowWeight_ = new java.util.ArrayList<com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight>(queryFlowWeight_);
-          bitField0_ |= 0x00000010;
-         }
+      // repeated .com.alicloud.openservices.tablestore.core.protocol.QueryFlowWeight query_flow_weight = 5;
+      private java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight> queryFlowWeight_ =
+        java.util.Collections.emptyList();
+      private void ensureQueryFlowWeightIsMutable() {
+        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
+          queryFlowWeight_ = new java.util.ArrayList<com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight>(queryFlowWeight_);
+          bitField0_ |= 0x00000010;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeightOrBuilder> queryFlowWeightBuilder_;
+      
+      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight> getQueryFlowWeightList() {
+        if (queryFlowWeightBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(queryFlowWeight_);
+        } else {
+          return queryFlowWeightBuilder_.getMessageList();
+        }
+      }
+      public int getQueryFlowWeightCount() {
+        if (queryFlowWeightBuilder_ == null) {
+          return queryFlowWeight_.size();
+        } else {
+          return queryFlowWeightBuilder_.getCount();
+        }
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight getQueryFlowWeight(int index) {
+        if (queryFlowWeightBuilder_ == null) {
+          return queryFlowWeight_.get(index);
+        } else {
+          return queryFlowWeightBuilder_.getMessage(index);
+        }
+      }
+      public Builder setQueryFlowWeight(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight value) {
+        if (queryFlowWeightBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureQueryFlowWeightIsMutable();
+          queryFlowWeight_.set(index, value);
+          onChanged();
+        } else {
+          queryFlowWeightBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setQueryFlowWeight(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder builderForValue) {
+        if (queryFlowWeightBuilder_ == null) {
+          ensureQueryFlowWeightIsMutable();
+          queryFlowWeight_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          queryFlowWeightBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addQueryFlowWeight(com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight value) {
+        if (queryFlowWeightBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureQueryFlowWeightIsMutable();
+          queryFlowWeight_.add(value);
+          onChanged();
+        } else {
+          queryFlowWeightBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addQueryFlowWeight(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight value) {
+        if (queryFlowWeightBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureQueryFlowWeightIsMutable();
+          queryFlowWeight_.add(index, value);
+          onChanged();
+        } else {
+          queryFlowWeightBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addQueryFlowWeight(
+          com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder builderForValue) {
+        if (queryFlowWeightBuilder_ == null) {
+          ensureQueryFlowWeightIsMutable();
+          queryFlowWeight_.add(builderForValue.build());
+          onChanged();
+        } else {
+          queryFlowWeightBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addQueryFlowWeight(
+          int index, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder builderForValue) {
+        if (queryFlowWeightBuilder_ == null) {
+          ensureQueryFlowWeightIsMutable();
+          queryFlowWeight_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          queryFlowWeightBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllQueryFlowWeight(
+          java.lang.Iterable<? extends com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight> values) {
+        if (queryFlowWeightBuilder_ == null) {
+          ensureQueryFlowWeightIsMutable();
+          super.addAll(values, queryFlowWeight_);
+          onChanged();
+        } else {
+          queryFlowWeightBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearQueryFlowWeight() {
+        if (queryFlowWeightBuilder_ == null) {
+          queryFlowWeight_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000010);
+          onChanged();
+        } else {
+          queryFlowWeightBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeQueryFlowWeight(int index) {
+        if (queryFlowWeightBuilder_ == null) {
+          ensureQueryFlowWeightIsMutable();
+          queryFlowWeight_.remove(index);
+          onChanged();
+        } else {
+          queryFlowWeightBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder getQueryFlowWeightBuilder(
+          int index) {
+        return getQueryFlowWeightFieldBuilder().getBuilder(index);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeightOrBuilder getQueryFlowWeightOrBuilder(
+          int index) {
+        if (queryFlowWeightBuilder_ == null) {
+          return queryFlowWeight_.get(index);  } else {
+          return queryFlowWeightBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeightOrBuilder> 
+           getQueryFlowWeightOrBuilderList() {
+        if (queryFlowWeightBuilder_ != null) {
+          return queryFlowWeightBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(queryFlowWeight_);
+        }
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder addQueryFlowWeightBuilder() {
+        return getQueryFlowWeightFieldBuilder().addBuilder(
+            com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.getDefaultInstance());
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder addQueryFlowWeightBuilder(
+          int index) {
+        return getQueryFlowWeightFieldBuilder().addBuilder(
+            index, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.getDefaultInstance());
+      }
+      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder> 
+           getQueryFlowWeightBuilderList() {
+        return getQueryFlowWeightFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeightOrBuilder> 
+          getQueryFlowWeightFieldBuilder() {
+        if (queryFlowWeightBuilder_ == null) {
+          queryFlowWeightBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeightOrBuilder>(
+                  queryFlowWeight_,
+                  ((bitField0_ & 0x00000010) == 0x00000010),
+                  getParentForChildren(),
+                  isClean());
+          queryFlowWeight_ = null;
+        }
+        return queryFlowWeightBuilder_;
+      }
+      
+      // optional int64 create_time = 6;
+      private long createTime_ ;
+      public boolean hasCreateTime() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public long getCreateTime() {
+        return createTime_;
+      }
+      public Builder setCreateTime(long value) {
+        bitField0_ |= 0x00000020;
+        createTime_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearCreateTime() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        createTime_ = 0L;
+        onChanged();
+        return this;
+      }
+      
+      // optional int32 time_to_live = 7;
+      private int timeToLive_ ;
+      public boolean hasTimeToLive() {
+        return ((bitField0_ & 0x00000040) == 0x00000040);
+      }
+      public int getTimeToLive() {
+        return timeToLive_;
+      }
+      public Builder setTimeToLive(int value) {
+        bitField0_ |= 0x00000040;
+        timeToLive_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearTimeToLive() {
+        bitField0_ = (bitField0_ & ~0x00000040);
+        timeToLive_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.IndexStatus index_status = 8;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus indexStatus_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus, com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusOrBuilder> indexStatusBuilder_;
+      public boolean hasIndexStatus() {
+        return ((bitField0_ & 0x00000080) == 0x00000080);
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus getIndexStatus() {
+        if (indexStatusBuilder_ == null) {
+          return indexStatus_;
+        } else {
+          return indexStatusBuilder_.getMessage();
+        }
+      }
+      public Builder setIndexStatus(com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus value) {
+        if (indexStatusBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          indexStatus_ = value;
+          onChanged();
+        } else {
+          indexStatusBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000080;
+        return this;
+      }
+      public Builder setIndexStatus(
+          com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.Builder builderForValue) {
+        if (indexStatusBuilder_ == null) {
+          indexStatus_ = builderForValue.build();
+          onChanged();
+        } else {
+          indexStatusBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000080;
+        return this;
+      }
+      public Builder mergeIndexStatus(com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus value) {
+        if (indexStatusBuilder_ == null) {
+          if (((bitField0_ & 0x00000080) == 0x00000080) &&
+              indexStatus_ != com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.getDefaultInstance()) {
+            indexStatus_ =
+              com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.newBuilder(indexStatus_).mergeFrom(value).buildPartial();
+          } else {
+            indexStatus_ = value;
+          }
+          onChanged();
+        } else {
+          indexStatusBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000080;
+        return this;
+      }
+      public Builder clearIndexStatus() {
+        if (indexStatusBuilder_ == null) {
+          indexStatus_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.getDefaultInstance();
+          onChanged();
+        } else {
+          indexStatusBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000080);
+        return this;
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.Builder getIndexStatusBuilder() {
+        bitField0_ |= 0x00000080;
+        onChanged();
+        return getIndexStatusFieldBuilder().getBuilder();
+      }
+      public com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusOrBuilder getIndexStatusOrBuilder() {
+        if (indexStatusBuilder_ != null) {
+          return indexStatusBuilder_.getMessageOrBuilder();
+        } else {
+          return indexStatus_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus, com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusOrBuilder> 
+          getIndexStatusFieldBuilder() {
+        if (indexStatusBuilder_ == null) {
+          indexStatusBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus, com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusOrBuilder>(
+                  indexStatus_,
+                  getParentForChildren(),
+                  isClean());
+          indexStatus_ = null;
+        }
+        return indexStatusBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.DescribeSearchIndexResponse)
+    }
+    
+    static {
+      defaultInstance = new DescribeSearchIndexResponse(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.DescribeSearchIndexResponse)
+  }
+  
+  public interface IndexStatusOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional .com.alicloud.openservices.tablestore.core.protocol.IndexStatusEnum status = 1;
+    boolean hasStatus();
+    com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusEnum getStatus();
+    
+    // optional string status_description = 2;
+    boolean hasStatusDescription();
+    String getStatusDescription();
+  }
+  public static final class IndexStatus extends
+      com.google.protobuf.GeneratedMessage
+      implements IndexStatusOrBuilder {
+    // Use IndexStatus.newBuilder() to construct.
+    private IndexStatus(Builder builder) {
+      super(builder);
+    }
+    private IndexStatus(boolean noInit) {}
+    
+    private static final IndexStatus defaultInstance;
+    public static IndexStatus getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public IndexStatus getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexStatus_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexStatus_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional .com.alicloud.openservices.tablestore.core.protocol.IndexStatusEnum status = 1;
+    public static final int STATUS_FIELD_NUMBER = 1;
+    private com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusEnum status_;
+    public boolean hasStatus() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusEnum getStatus() {
+      return status_;
+    }
+    
+    // optional string status_description = 2;
+    public static final int STATUS_DESCRIPTION_FIELD_NUMBER = 2;
+    private java.lang.Object statusDescription_;
+    public boolean hasStatusDescription() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public String getStatusDescription() {
+      java.lang.Object ref = statusDescription_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          statusDescription_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getStatusDescriptionBytes() {
+      java.lang.Object ref = statusDescription_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        statusDescription_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    private void initFields() {
+      status_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusEnum.PENDING;
+      statusDescription_ = "";
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeEnum(1, status_.getNumber());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBytes(2, getStatusDescriptionBytes());
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(1, status_.getNumber());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(2, getStatusDescriptionBytes());
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexStatus_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexStatus_fieldAccessorTable;
       }
       
-      private com.google.protobuf.RepeatedFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeightOrBuilder> queryFlowWeightBuilder_;
+      // Construct using com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
       
-      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight> getQueryFlowWeightList() {
-        if (queryFlowWeightBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(queryFlowWeight_);
-        } else {
-          return queryFlowWeightBuilder_.getMessageList();
-        }
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      public int getQueryFlowWeightCount() {
-        if (queryFlowWeightBuilder_ == null) {
-          return queryFlowWeight_.size();
-        } else {
-          return queryFlowWeightBuilder_.getCount();
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
         }
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight getQueryFlowWeight(int index) {
-        if (queryFlowWeightBuilder_ == null) {
-          return queryFlowWeight_.get(index);
-        } else {
-          return queryFlowWeightBuilder_.getMessage(index);
-        }
+      private static Builder create() {
+        return new Builder();
       }
-      public Builder setQueryFlowWeight(
-          int index, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight value) {
-        if (queryFlowWeightBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureQueryFlowWeightIsMutable();
-          queryFlowWeight_.set(index, value);
-          onChanged();
-        } else {
-          queryFlowWeightBuilder_.setMessage(index, value);
-        }
+      
+      public Builder clear() {
+        super.clear();
+        status_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusEnum.PENDING;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        statusDescription_ = "";
+        bitField0_ = (bitField0_ & ~0x00000002);
         return this;
       }
-      public Builder setQueryFlowWeight(
-          int index, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder builderForValue) {
-        if (queryFlowWeightBuilder_ == null) {
-          ensureQueryFlowWeightIsMutable();
-          queryFlowWeight_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          queryFlowWeightBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
       }
-      public Builder addQueryFlowWeight(com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight value) {
-        if (queryFlowWeightBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureQueryFlowWeightIsMutable();
-          queryFlowWeight_.add(value);
-          onChanged();
-        } else {
-          queryFlowWeightBuilder_.addMessage(value);
-        }
-        return this;
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.getDescriptor();
       }
-      public Builder addQueryFlowWeight(
-          int index, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight value) {
-        if (queryFlowWeightBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureQueryFlowWeightIsMutable();
-          queryFlowWeight_.add(index, value);
-          onChanged();
-        } else {
-          queryFlowWeightBuilder_.addMessage(index, value);
-        }
-        return this;
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus getDefaultInstanceForType() {
+        return com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.getDefaultInstance();
       }
-      public Builder addQueryFlowWeight(
-          com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder builderForValue) {
-        if (queryFlowWeightBuilder_ == null) {
-          ensureQueryFlowWeightIsMutable();
-          queryFlowWeight_.add(builderForValue.build());
-          onChanged();
-        } else {
-          queryFlowWeightBuilder_.addMessage(builderForValue.build());
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus build() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
-        return this;
+        return result;
       }
-      public Builder addQueryFlowWeight(
-          int index, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder builderForValue) {
-        if (queryFlowWeightBuilder_ == null) {
-          ensureQueryFlowWeightIsMutable();
-          queryFlowWeight_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          queryFlowWeightBuilder_.addMessage(index, builderForValue.build());
+      
+      private com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
         }
-        return this;
+        return result;
       }
-      public Builder addAllQueryFlowWeight(
-          java.lang.Iterable<? extends com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight> values) {
-        if (queryFlowWeightBuilder_ == null) {
-          ensureQueryFlowWeightIsMutable();
-          super.addAll(values, queryFlowWeight_);
-          onChanged();
-        } else {
-          queryFlowWeightBuilder_.addAllMessages(values);
+      
+      public com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus buildPartial() {
+        com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus result = new com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
         }
-        return this;
-      }
-      public Builder clearQueryFlowWeight() {
-        if (queryFlowWeightBuilder_ == null) {
-          queryFlowWeight_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000010);
-          onChanged();
-        } else {
-          queryFlowWeightBuilder_.clear();
+        result.status_ = status_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
         }
-        return this;
+        result.statusDescription_ = statusDescription_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
       }
-      public Builder removeQueryFlowWeight(int index) {
-        if (queryFlowWeightBuilder_ == null) {
-          ensureQueryFlowWeightIsMutable();
-          queryFlowWeight_.remove(index);
-          onChanged();
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus) {
+          return mergeFrom((com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus)other);
         } else {
-          queryFlowWeightBuilder_.remove(index);
+          super.mergeFrom(other);
+          return this;
         }
-        return this;
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder getQueryFlowWeightBuilder(
-          int index) {
-        return getQueryFlowWeightFieldBuilder().getBuilder(index);
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeightOrBuilder getQueryFlowWeightOrBuilder(
-          int index) {
-        if (queryFlowWeightBuilder_ == null) {
-          return queryFlowWeight_.get(index);  } else {
-          return queryFlowWeightBuilder_.getMessageOrBuilder(index);
+      
+      public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus other) {
+        if (other == com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.getDefaultInstance()) return this;
+        if (other.hasStatus()) {
+          setStatus(other.getStatus());
         }
-      }
-      public java.util.List<? extends com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeightOrBuilder> 
-           getQueryFlowWeightOrBuilderList() {
-        if (queryFlowWeightBuilder_ != null) {
-          return queryFlowWeightBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(queryFlowWeight_);
+        if (other.hasStatusDescription()) {
+          setStatusDescription(other.getStatusDescription());
         }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
       }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder addQueryFlowWeightBuilder() {
-        return getQueryFlowWeightFieldBuilder().addBuilder(
-            com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.getDefaultInstance());
-      }
-      public com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder addQueryFlowWeightBuilder(
-          int index) {
-        return getQueryFlowWeightFieldBuilder().addBuilder(
-            index, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.getDefaultInstance());
-      }
-      public java.util.List<com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder> 
-           getQueryFlowWeightBuilderList() {
-        return getQueryFlowWeightFieldBuilder().getBuilderList();
+      
+      public final boolean isInitialized() {
+        return true;
       }
-      private com.google.protobuf.RepeatedFieldBuilder<
-          com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeightOrBuilder> 
-          getQueryFlowWeightFieldBuilder() {
-        if (queryFlowWeightBuilder_ == null) {
-          queryFlowWeightBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
-              com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder, com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeightOrBuilder>(
-                  queryFlowWeight_,
-                  ((bitField0_ & 0x00000010) == 0x00000010),
-                  getParentForChildren(),
-                  isClean());
-          queryFlowWeight_ = null;
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              int rawValue = input.readEnum();
+              com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusEnum value = com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusEnum.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(1, rawValue);
+              } else {
+                bitField0_ |= 0x00000001;
+                status_ = value;
+              }
+              break;
+            }
+            case 18: {
+              bitField0_ |= 0x00000002;
+              statusDescription_ = input.readBytes();
+              break;
+            }
+          }
         }
-        return queryFlowWeightBuilder_;
       }
       
-      // optional int64 create_time = 6;
-      private long createTime_ ;
-      public boolean hasCreateTime() {
-        return ((bitField0_ & 0x00000020) == 0x00000020);
+      private int bitField0_;
+      
+      // optional .com.alicloud.openservices.tablestore.core.protocol.IndexStatusEnum status = 1;
+      private com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusEnum status_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusEnum.PENDING;
+      public boolean hasStatus() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
       }
-      public long getCreateTime() {
-        return createTime_;
+      public com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusEnum getStatus() {
+        return status_;
       }
-      public Builder setCreateTime(long value) {
-        bitField0_ |= 0x00000020;
-        createTime_ = value;
+      public Builder setStatus(com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000001;
+        status_ = value;
         onChanged();
         return this;
       }
-      public Builder clearCreateTime() {
-        bitField0_ = (bitField0_ & ~0x00000020);
-        createTime_ = 0L;
+      public Builder clearStatus() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        status_ = com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatusEnum.PENDING;
         onChanged();
         return this;
       }
       
-      // optional int32 time_to_live = 7;
-      private int timeToLive_ ;
-      public boolean hasTimeToLive() {
-        return ((bitField0_ & 0x00000040) == 0x00000040);
+      // optional string status_description = 2;
+      private java.lang.Object statusDescription_ = "";
+      public boolean hasStatusDescription() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
       }
-      public int getTimeToLive() {
-        return timeToLive_;
+      public String getStatusDescription() {
+        java.lang.Object ref = statusDescription_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          statusDescription_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
       }
-      public Builder setTimeToLive(int value) {
-        bitField0_ |= 0x00000040;
-        timeToLive_ = value;
+      public Builder setStatusDescription(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000002;
+        statusDescription_ = value;
         onChanged();
         return this;
       }
-      public Builder clearTimeToLive() {
-        bitField0_ = (bitField0_ & ~0x00000040);
-        timeToLive_ = 0;
+      public Builder clearStatusDescription() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        statusDescription_ = getDefaultInstance().getStatusDescription();
         onChanged();
         return this;
       }
+      void setStatusDescription(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000002;
+        statusDescription_ = value;
+        onChanged();
+      }
       
-      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.DescribeSearchIndexResponse)
+      // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.IndexStatus)
     }
     
     static {
-      defaultInstance = new DescribeSearchIndexResponse(true);
+      defaultInstance = new IndexStatus(true);
       defaultInstance.initFields();
     }
     
-    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.DescribeSearchIndexResponse)
+    // @@protoc_insertion_point(class_scope:com.alicloud.openservices.tablestore.core.protocol.IndexStatus)
   }
   
   public interface ScanQueryOrBuilder
@@ -80682,6 +89719,11 @@ public Builder clearNextToken() {
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_com_alicloud_openservices_tablestore_core_protocol_NestedQuery_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_com_alicloud_openservices_tablestore_core_protocol_InnerHits_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_com_alicloud_openservices_tablestore_core_protocol_InnerHits_fieldAccessorTable;
   private static com.google.protobuf.Descriptors.Descriptor
     internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoBoundingBoxQuery_descriptor;
   private static
@@ -80702,6 +89744,11 @@ public Builder clearNextToken() {
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_com_alicloud_openservices_tablestore_core_protocol_ExistsQuery_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_com_alicloud_openservices_tablestore_core_protocol_KnnVectorQuery_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_com_alicloud_openservices_tablestore_core_protocol_KnnVectorQuery_fieldAccessorTable;
   private static com.google.protobuf.Descriptors.Descriptor
     internal_static_com_alicloud_openservices_tablestore_core_protocol_Query_descriptor;
   private static
@@ -80732,6 +89779,11 @@ public Builder clearNextToken() {
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSort_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_com_alicloud_openservices_tablestore_core_protocol_DocSort_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_com_alicloud_openservices_tablestore_core_protocol_DocSort_fieldAccessorTable;
   private static com.google.protobuf.Descriptors.Descriptor
     internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceSort_descriptor;
   private static
@@ -80752,6 +89804,16 @@ public Builder clearNextToken() {
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchQuery_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_com_alicloud_openservices_tablestore_core_protocol_Highlight_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_com_alicloud_openservices_tablestore_core_protocol_Highlight_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightParameter_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightParameter_fieldAccessorTable;
   private static com.google.protobuf.Descriptors.Descriptor
     internal_static_com_alicloud_openservices_tablestore_core_protocol_ColumnsToGet_descriptor;
   private static
@@ -80767,6 +89829,26 @@ public Builder clearNextToken() {
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchResponse_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchHit_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchHit_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchInnerHit_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchInnerHit_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightResult_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightResult_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightField_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightField_fieldAccessorTable;
   private static com.google.protobuf.Descriptors.Descriptor
     internal_static_com_alicloud_openservices_tablestore_core_protocol_DateTimeValue_descriptor;
   private static
@@ -80792,6 +89874,16 @@ public Builder clearNextToken() {
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSchema_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_com_alicloud_openservices_tablestore_core_protocol_VectorOptions_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_com_alicloud_openservices_tablestore_core_protocol_VectorOptions_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_com_alicloud_openservices_tablestore_core_protocol_HNSWIndexParameter_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_com_alicloud_openservices_tablestore_core_protocol_HNSWIndexParameter_fieldAccessorTable;
   private static com.google.protobuf.Descriptors.Descriptor
     internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexSchema_descriptor;
   private static
@@ -80872,6 +89964,11 @@ public Builder clearNextToken() {
   private static
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_com_alicloud_openservices_tablestore_core_protocol_DescribeSearchIndexResponse_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexStatus_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexStatus_fieldAccessorTable;
   private static com.google.protobuf.Descriptors.Descriptor
     internal_static_com_alicloud_openservices_tablestore_core_protocol_ScanQuery_descriptor;
   private static
@@ -80897,507 +89994,587 @@ public Builder clearNextToken() {
   static {
     java.lang.String[] descriptorData = {
       "\n\014search.proto\0222com.alicloud.openservice" +
-      "s.tablestore.core.protocol\"-\n\006AvgAgg\022\022\n\n" +
-      "field_name\030\001 \001(\t\022\017\n\007missing\030\002 \001(\014\"$\n\016Car" +
-      "dinalityAgg\022\022\n\nfield_name\030\001 \001(\t\"-\n\006MaxAg" +
-      "g\022\022\n\nfield_name\030\001 \001(\t\022\017\n\007missing\030\002 \001(\014\"-" +
-      "\n\006MinAgg\022\022\n\nfield_name\030\001 \001(\t\022\017\n\007missing\030" +
-      "\002 \001(\014\"-\n\006SumAgg\022\022\n\nfield_name\030\001 \001(\t\022\017\n\007m" +
-      "issing\030\002 \001(\014\"r\n\010TermsAgg\022\022\n\nfield_name\030\001" +
-      " \001(\t\022\014\n\004size\030\002 \001(\005\022D\n\003agg\030\003 \001(\01327.com.al" +
-      "icloud.openservices.tablestore.core.prot",
-      "ocol.Agg\"\234\001\n\tFilterAgg\022I\n\006filter\030\001 \001(\01329" +
-      ".com.alicloud.openservices.tablestore.co" +
-      "re.protocol.Query\022D\n\003agg\030\002 \001(\01327.com.ali" +
-      "cloud.openservices.tablestore.core.proto" +
-      "col.Agg\"\032\n\nNestedPath\022\014\n\004path\030\001 \001(\t\"\246\001\n\t" +
-      "NestedAgg\022S\n\013nested_path\030\001 \001(\0132>.com.ali" +
+      "s.tablestore.core.protocol\032\026ots_internal" +
+      "_api.proto\"-\n\006AvgAgg\022\022\n\nfield_name\030\001 \001(\t" +
+      "\022\017\n\007missing\030\002 \001(\014\"$\n\016CardinalityAgg\022\022\n\nf" +
+      "ield_name\030\001 \001(\t\"-\n\006MaxAgg\022\022\n\nfield_name\030" +
+      "\001 \001(\t\022\017\n\007missing\030\002 \001(\014\"-\n\006MinAgg\022\022\n\nfiel" +
+      "d_name\030\001 \001(\t\022\017\n\007missing\030\002 \001(\014\"-\n\006SumAgg\022" +
+      "\022\n\nfield_name\030\001 \001(\t\022\017\n\007missing\030\002 \001(\014\"r\n\010" +
+      "TermsAgg\022\022\n\nfield_name\030\001 \001(\t\022\014\n\004size\030\002 \001" +
+      "(\005\022D\n\003agg\030\003 \001(\01327.com.alicloud.openservi",
+      "ces.tablestore.core.protocol.Agg\"\234\001\n\tFil" +
+      "terAgg\022I\n\006filter\030\001 \001(\01329.com.alicloud.op" +
+      "enservices.tablestore.core.protocol.Quer" +
+      "y\022D\n\003agg\030\002 \001(\01327.com.alicloud.openservic" +
+      "es.tablestore.core.protocol.Agg\"\032\n\nNeste" +
+      "dPath\022\014\n\004path\030\001 \001(\t\"\246\001\n\tNestedAgg\022S\n\013nes" +
+      "ted_path\030\001 \001(\0132>.com.alicloud.openservic" +
+      "es.tablestore.core.protocol.NestedPath\022D" +
+      "\n\003agg\030\002 \001(\01327.com.alicloud.openservices." +
+      "tablestore.core.protocol.Agg\":\n\014GeoBound",
+      "sAgg\022\022\n\nfield_name\030\001 \001(\t\022\026\n\016wrap_longitu" +
+      "de\030\002 \001(\010\"H\n\023GeoDistanceAggRange\022\013\n\003key\030\001" +
+      " \001(\t\022\022\n\nrange_from\030\002 \001(\001\022\020\n\010range_to\030\003 \001" +
+      "(\001\"\215\001\n\016GeoDistanceAgg\022\022\n\nfield_name\030\001 \001(" +
+      "\t\022\016\n\006origin\030\002 \001(\t\022W\n\006ranges\030\003 \003(\0132G.com." +
+      "alicloud.openservices.tablestore.core.pr" +
+      "otocol.GeoDistanceAggRange\"/\n\010StatsAgg\022\022" +
+      "\n\nfield_name\030\001 \001(\t\022\017\n\007missing\030\002 \001(\014\"7\n\020E" +
+      "xtendedStatsAgg\022\022\n\nfield_name\030\001 \001(\t\022\017\n\007m" +
+      "issing\030\002 \001(\014\"G\n\016PercentilesAgg\022\022\n\nfield_",
+      "name\030\001 \001(\t\022\020\n\010percents\030\002 \003(\001\022\017\n\007missing\030" +
+      "\003 \001(\014\"I\n\022PercentileRanksAgg\022\022\n\nfield_nam" +
+      "e\030\001 \001(\t\022\016\n\006values\030\002 \003(\001\022\017\n\007missing\030\003 \001(\014" +
+      "\"#\n\rValueCountAgg\022\022\n\nfield_name\030\001 \001(\t\"~\n" +
+      "\tAggClause\022\020\n\010agg_name\030\001 \001(\t\022M\n\010agg_type" +
+      "\030\002 \001(\0162;.com.alicloud.openservices.table" +
+      "store.core.protocol.AggType\022\020\n\010agg_body\030" +
+      "\003 \001(\014\"X\n\003Agg\022Q\n\nagg_clause\030\001 \003(\0132=.com.a" +
+      "licloud.openservices.tablestore.core.pro" +
+      "tocol.AggClause\"\035\n\014AvgAggResult\022\r\n\005value",
+      "\030\001 \001(\001\"\035\n\014MaxAggResult\022\r\n\005value\030\001 \001(\001\"\035\n" +
+      "\014MinAggResult\022\r\n\005value\030\001 \001(\001\"\035\n\014SumAggRe" +
+      "sult\022\r\n\005value\030\001 \001(\001\"%\n\024CardinalityAggRes" +
+      "ult\022\r\n\005value\030\001 \001(\003\"{\n\006Bucket\022\013\n\003key\030\001 \001(" +
+      "\t\022\021\n\tdoc_count\030\002 \001(\003\022Q\n\nagg_result\030\003 \001(\013" +
+      "2=.com.alicloud.openservices.tablestore." +
+      "core.protocol.AggResult\"\241\001\n\016TermsAggResu" +
+      "lt\022#\n\033doc_count_error_upper_bound\030\001 \001(\003\022" +
+      "\036\n\026sum_of_other_doc_count\030\002 \001(\003\022J\n\006bucke" +
+      "t\030\003 \003(\0132:.com.alicloud.openservices.tabl",
+      "estore.core.protocol.Bucket\"w\n\017FilterAgg" +
+      "Result\022\021\n\tdoc_count\030\001 \001(\003\022Q\n\nagg_result\030" +
+      "\002 \001(\0132=.com.alicloud.openservices.tables" +
+      "tore.core.protocol.AggResult\"w\n\017NestedAg" +
+      "gResult\022\021\n\tdoc_count\030\001 \001(\003\022Q\n\nagg_result" +
+      "\030\002 \001(\0132=.com.alicloud.openservices.table" +
+      "store.core.protocol.AggResult\"$\n\010GeoPoin" +
+      "t\022\013\n\003lat\030\001 \001(\001\022\013\n\003lon\030\002 \001(\001\"\270\001\n\022GeoBound" +
+      "sAggResult\022N\n\010top_left\030\001 \001(\0132<.com.alicl" +
+      "oud.openservices.tablestore.core.protoco",
+      "l.GeoPoint\022R\n\014bottom_right\030\002 \001(\0132<.com.a" +
+      "licloud.openservices.tablestore.core.pro" +
+      "tocol.GeoPoint\"S\n\013RangeBucket\022\013\n\003key\030\001 \001" +
+      "(\t\022\022\n\nrange_from\030\002 \001(\001\022\020\n\010range_to\030\003 \001(\001" +
+      "\022\021\n\tdoc_count\030\004 \001(\003\"g\n\024GeoDistanceAggRes" +
+      "ult\022O\n\006bucket\030\001 \003(\0132?.com.alicloud.opens" +
+      "ervices.tablestore.core.protocol.RangeBu" +
+      "cket\"S\n\016StatsAggResult\022\r\n\005count\030\001 \001(\003\022\013\n" +
+      "\003min\030\002 \001(\001\022\013\n\003max\030\003 \001(\001\022\013\n\003avg\030\004 \001(\001\022\013\n\003" +
+      "sum\030\005 \001(\001\"\344\001\n\026ExtendedStatsAggResult\022\r\n\005",
+      "count\030\001 \001(\003\022\013\n\003min\030\002 \001(\001\022\013\n\003max\030\003 \001(\001\022\013\n" +
+      "\003avg\030\004 \001(\001\022\013\n\003sum\030\005 \001(\001\022\026\n\016sum_of_square" +
+      "s\030\006 \001(\001\022\020\n\010variance\030\007 \001(\001\022\025\n\rstd_deviati" +
+      "on\030\010 \001(\001\022\"\n\032std_deviation_bounds_upper\030\t" +
+      " \001(\001\022\"\n\032std_deviation_bounds_lower\030\n \001(\001" +
+      "\",\n\nPercentile\022\017\n\007percent\030\001 \001(\001\022\r\n\005value" +
+      "\030\002 \001(\001\"k\n\024PercentilesAggResult\022S\n\013percen" +
+      "tiles\030\001 \003(\0132>.com.alicloud.openservices." +
+      "tablestore.core.protocol.Percentile\"o\n\030P" +
+      "ercentileRanksAggResult\022S\n\013percentiles\030\001",
+      " \003(\0132>.com.alicloud.openservices.tablest" +
+      "ore.core.protocol.Percentile\"$\n\023ValueCou" +
+      "ntAggResult\022\r\n\005count\030\001 \001(\003\"{\n\014SubAggResu" +
+      "lt\022\014\n\004name\030\001 \001(\t\022I\n\004type\030\002 \001(\0162;.com.ali" +
       "cloud.openservices.tablestore.core.proto" +
-      "col.NestedPath\022D\n\003agg\030\002 \001(\01327.com.aliclo" +
-      "ud.openservices.tablestore.core.protocol" +
-      ".Agg\":\n\014GeoBoundsAgg\022\022\n\nfield_name\030\001 \001(\t",
-      "\022\026\n\016wrap_longitude\030\002 \001(\010\"H\n\023GeoDistanceA" +
-      "ggRange\022\013\n\003key\030\001 \001(\t\022\022\n\nrange_from\030\002 \001(\001" +
-      "\022\020\n\010range_to\030\003 \001(\001\"\215\001\n\016GeoDistanceAgg\022\022\n" +
-      "\nfield_name\030\001 \001(\t\022\016\n\006origin\030\002 \001(\t\022W\n\006ran" +
-      "ges\030\003 \003(\0132G.com.alicloud.openservices.ta" +
-      "blestore.core.protocol.GeoDistanceAggRan" +
-      "ge\"/\n\010StatsAgg\022\022\n\nfield_name\030\001 \001(\t\022\017\n\007mi" +
-      "ssing\030\002 \001(\014\"7\n\020ExtendedStatsAgg\022\022\n\nfield" +
-      "_name\030\001 \001(\t\022\017\n\007missing\030\002 \001(\014\"G\n\016Percenti" +
-      "lesAgg\022\022\n\nfield_name\030\001 \001(\t\022\020\n\010percents\030\002",
-      " \003(\001\022\017\n\007missing\030\003 \001(\014\"I\n\022PercentileRanks" +
-      "Agg\022\022\n\nfield_name\030\001 \001(\t\022\016\n\006values\030\002 \003(\001\022" +
-      "\017\n\007missing\030\003 \001(\014\"#\n\rValueCountAgg\022\022\n\nfie" +
-      "ld_name\030\001 \001(\t\"~\n\tAggClause\022\020\n\010agg_name\030\001" +
-      " \001(\t\022M\n\010agg_type\030\002 \001(\0162;.com.alicloud.op" +
-      "enservices.tablestore.core.protocol.AggT" +
-      "ype\022\020\n\010agg_body\030\003 \001(\014\"X\n\003Agg\022Q\n\nagg_clau" +
-      "se\030\001 \003(\0132=.com.alicloud.openservices.tab" +
-      "lestore.core.protocol.AggClause\"\035\n\014AvgAg" +
-      "gResult\022\r\n\005value\030\001 \001(\001\"\035\n\014MaxAggResult\022\r",
-      "\n\005value\030\001 \001(\001\"\035\n\014MinAggResult\022\r\n\005value\030\001" +
-      " \001(\001\"\035\n\014SumAggResult\022\r\n\005value\030\001 \001(\001\"%\n\024C" +
-      "ardinalityAggResult\022\r\n\005value\030\001 \001(\003\"{\n\006Bu" +
-      "cket\022\013\n\003key\030\001 \001(\t\022\021\n\tdoc_count\030\002 \001(\003\022Q\n\n" +
-      "agg_result\030\003 \001(\0132=.com.alicloud.openserv" +
-      "ices.tablestore.core.protocol.AggResult\"" +
-      "\241\001\n\016TermsAggResult\022#\n\033doc_count_error_up" +
-      "per_bound\030\001 \001(\003\022\036\n\026sum_of_other_doc_coun" +
-      "t\030\002 \001(\003\022J\n\006bucket\030\003 \003(\0132:.com.alicloud.o" +
-      "penservices.tablestore.core.protocol.Buc",
-      "ket\"w\n\017FilterAggResult\022\021\n\tdoc_count\030\001 \001(" +
-      "\003\022Q\n\nagg_result\030\002 \001(\0132=.com.alicloud.ope" +
-      "nservices.tablestore.core.protocol.AggRe" +
-      "sult\"w\n\017NestedAggResult\022\021\n\tdoc_count\030\001 \001" +
-      "(\003\022Q\n\nagg_result\030\002 \001(\0132=.com.alicloud.op" +
-      "enservices.tablestore.core.protocol.AggR" +
-      "esult\"$\n\010GeoPoint\022\013\n\003lat\030\001 \001(\001\022\013\n\003lon\030\002 " +
-      "\001(\001\"\270\001\n\022GeoBoundsAggResult\022N\n\010top_left\030\001" +
-      " \001(\0132<.com.alicloud.openservices.tablest" +
-      "ore.core.protocol.GeoPoint\022R\n\014bottom_rig",
-      "ht\030\002 \001(\0132<.com.alicloud.openservices.tab" +
-      "lestore.core.protocol.GeoPoint\"S\n\013RangeB" +
-      "ucket\022\013\n\003key\030\001 \001(\t\022\022\n\nrange_from\030\002 \001(\001\022\020" +
-      "\n\010range_to\030\003 \001(\001\022\021\n\tdoc_count\030\004 \001(\003\"g\n\024G" +
-      "eoDistanceAggResult\022O\n\006bucket\030\001 \003(\0132?.co" +
+      "col.AggType\022\022\n\nagg_result\030\003 \001(\014\"f\n\tAggRe" +
+      "sult\022Y\n\017sub_agg_results\030\001 \003(\0132@.com.alic" +
+      "loud.openservices.tablestore.core.protoc" +
+      "ol.SubAggResult\"|\n\013Aggregation\022\014\n\004name\030\001" +
+      " \001(\t\022Q\n\004type\030\002 \001(\0162C.com.alicloud.opense",
+      "rvices.tablestore.core.protocol.Aggregat" +
+      "ionType\022\014\n\004body\030\003 \001(\014\"]\n\014Aggregations\022M\n" +
+      "\004aggs\030\001 \003(\0132?.com.alicloud.openservices." +
+      "tablestore.core.protocol.Aggregation\"t\n\007" +
+      "GroupBy\022\014\n\004name\030\001 \001(\t\022M\n\004type\030\002 \001(\0162?.co" +
       "m.alicloud.openservices.tablestore.core." +
-      "protocol.RangeBucket\"S\n\016StatsAggResult\022\r" +
-      "\n\005count\030\001 \001(\003\022\013\n\003min\030\002 \001(\001\022\013\n\003max\030\003 \001(\001\022" +
-      "\013\n\003avg\030\004 \001(\001\022\013\n\003sum\030\005 \001(\001\"\344\001\n\026ExtendedSt" +
-      "atsAggResult\022\r\n\005count\030\001 \001(\003\022\013\n\003min\030\002 \001(\001",
-      "\022\013\n\003max\030\003 \001(\001\022\013\n\003avg\030\004 \001(\001\022\013\n\003sum\030\005 \001(\001\022" +
-      "\026\n\016sum_of_squares\030\006 \001(\001\022\020\n\010variance\030\007 \001(" +
-      "\001\022\025\n\rstd_deviation\030\010 \001(\001\022\"\n\032std_deviatio" +
-      "n_bounds_upper\030\t \001(\001\022\"\n\032std_deviation_bo" +
-      "unds_lower\030\n \001(\001\",\n\nPercentile\022\017\n\007percen" +
-      "t\030\001 \001(\001\022\r\n\005value\030\002 \001(\001\"k\n\024PercentilesAgg" +
-      "Result\022S\n\013percentiles\030\001 \003(\0132>.com.aliclo" +
-      "ud.openservices.tablestore.core.protocol" +
-      ".Percentile\"o\n\030PercentileRanksAggResult\022" +
-      "S\n\013percentiles\030\001 \003(\0132>.com.alicloud.open",
-      "services.tablestore.core.protocol.Percen" +
-      "tile\"$\n\023ValueCountAggResult\022\r\n\005count\030\001 \001" +
-      "(\003\"{\n\014SubAggResult\022\014\n\004name\030\001 \001(\t\022I\n\004type" +
-      "\030\002 \001(\0162;.com.alicloud.openservices.table" +
-      "store.core.protocol.AggType\022\022\n\nagg_resul" +
-      "t\030\003 \001(\014\"f\n\tAggResult\022Y\n\017sub_agg_results\030" +
-      "\001 \003(\0132@.com.alicloud.openservices.tables" +
-      "tore.core.protocol.SubAggResult\"|\n\013Aggre" +
-      "gation\022\014\n\004name\030\001 \001(\t\022Q\n\004type\030\002 \001(\0162C.com" +
-      ".alicloud.openservices.tablestore.core.p",
-      "rotocol.AggregationType\022\014\n\004body\030\003 \001(\014\"]\n" +
-      "\014Aggregations\022M\n\004aggs\030\001 \003(\0132?.com.aliclo" +
+      "protocol.GroupByType\022\014\n\004body\030\003 \001(\014\"Z\n\010Gr" +
+      "oupBys\022N\n\tgroup_bys\030\001 \003(\0132;.com.alicloud" +
+      ".openservices.tablestore.core.protocol.G" +
+      "roupBy\"5\n\016AvgAggregation\022\022\n\nfield_name\030\001",
+      " \001(\t\022\017\n\007missing\030\002 \001(\014\"5\n\016MaxAggregation\022" +
+      "\022\n\nfield_name\030\001 \001(\t\022\017\n\007missing\030\002 \001(\014\"5\n\016" +
+      "MinAggregation\022\022\n\nfield_name\030\001 \001(\t\022\017\n\007mi" +
+      "ssing\030\002 \001(\014\"5\n\016SumAggregation\022\022\n\nfield_n" +
+      "ame\030\001 \001(\t\022\017\n\007missing\030\002 \001(\014\"&\n\020CountAggre" +
+      "gation\022\022\n\nfield_name\030\001 \001(\t\"?\n\030DistinctCo" +
+      "untAggregation\022\022\n\nfield_name\030\001 \001(\t\022\017\n\007mi" +
+      "ssing\030\002 \001(\014\"k\n\022TopRowsAggregation\022\r\n\005lim" +
+      "it\030\001 \001(\005\022F\n\004sort\030\002 \001(\01328.com.alicloud.op" +
+      "enservices.tablestore.core.protocol.Sort",
+      "\"R\n\026PercentilesAggregation\022\022\n\nfield_name" +
+      "\030\001 \001(\t\022\023\n\013percentiles\030\002 \003(\001\022\017\n\007missing\030\003" +
+      " \001(\014\"&\n\nFieldRange\022\013\n\003min\030\001 \001(\014\022\013\n\003max\030\002" +
+      " \001(\014\"\332\004\n\024GroupByDateHistogram\022\022\n\nfield_n" +
+      "ame\030\001 \001(\t\022S\n\010interval\030\002 \001(\0132A.com.aliclo" +
       "ud.openservices.tablestore.core.protocol" +
-      ".Aggregation\"t\n\007GroupBy\022\014\n\004name\030\001 \001(\t\022M\n" +
-      "\004type\030\002 \001(\0162?.com.alicloud.openservices." +
-      "tablestore.core.protocol.GroupByType\022\014\n\004" +
-      "body\030\003 \001(\014\"Z\n\010GroupBys\022N\n\tgroup_bys\030\001 \003(" +
-      "\0132;.com.alicloud.openservices.tablestore" +
-      ".core.protocol.GroupBy\"5\n\016AvgAggregation" +
-      "\022\022\n\nfield_name\030\001 \001(\t\022\017\n\007missing\030\002 \001(\014\"5\n",
-      "\016MaxAggregation\022\022\n\nfield_name\030\001 \001(\t\022\017\n\007m" +
-      "issing\030\002 \001(\014\"5\n\016MinAggregation\022\022\n\nfield_" +
-      "name\030\001 \001(\t\022\017\n\007missing\030\002 \001(\014\"5\n\016SumAggreg" +
-      "ation\022\022\n\nfield_name\030\001 \001(\t\022\017\n\007missing\030\002 \001" +
-      "(\014\"&\n\020CountAggregation\022\022\n\nfield_name\030\001 \001" +
-      "(\t\"?\n\030DistinctCountAggregation\022\022\n\nfield_" +
-      "name\030\001 \001(\t\022\017\n\007missing\030\002 \001(\014\"k\n\022TopRowsAg" +
-      "gregation\022\r\n\005limit\030\001 \001(\005\022F\n\004sort\030\002 \001(\01328" +
-      ".com.alicloud.openservices.tablestore.co" +
-      "re.protocol.Sort\"R\n\026PercentilesAggregati",
-      "on\022\022\n\nfield_name\030\001 \001(\t\022\023\n\013percentiles\030\002 " +
-      "\003(\001\022\017\n\007missing\030\003 \001(\014\"&\n\nFieldRange\022\013\n\003mi" +
-      "n\030\001 \001(\014\022\013\n\003max\030\002 \001(\014\"\207\004\n\024GroupByDateHist" +
-      "ogram\022\022\n\nfield_name\030\001 \001(\t\022S\n\010interval\030\002 " +
-      "\001(\0132A.com.alicloud.openservices.tablesto" +
-      "re.core.protocol.DateTimeValue\022S\n\013field_" +
-      "range\030\003 \001(\0132>.com.alicloud.openservices." +
-      "tablestore.core.protocol.FieldRange\022\017\n\007m" +
-      "issing\030\004 \001(\014\022\025\n\rmin_doc_count\030\005 \001(\003\022\021\n\tt" +
-      "ime_zone\030\006 \001(\t\022M\n\004sort\030\007 \001(\0132?.com.alicl",
-      "oud.openservices.tablestore.core.protoco" +
-      "l.GroupBySort\022R\n\010sub_aggs\030\010 \001(\0132@.com.al" +
-      "icloud.openservices.tablestore.core.prot" +
-      "ocol.Aggregations\022S\n\rsub_group_bys\030\t \001(\013" +
-      "2<.com.alicloud.openservices.tablestore." +
-      "core.protocol.GroupBys\"\255\003\n\020GroupByHistog" +
-      "ram\022\022\n\nfield_name\030\001 \001(\t\022\020\n\010interval\030\002 \001(" +
-      "\014\022\017\n\007missing\030\003 \001(\014\022\025\n\rmin_doc_count\030\004 \001(" +
-      "\003\022M\n\004sort\030\005 \001(\0132?.com.alicloud.openservi" +
-      "ces.tablestore.core.protocol.GroupBySort",
-      "\022S\n\013field_range\030\006 \001(\0132>.com.alicloud.ope" +
-      "nservices.tablestore.core.protocol.Field" +
-      "Range\022R\n\010sub_aggs\030\007 \001(\0132@.com.alicloud.o" +
-      "penservices.tablestore.core.protocol.Agg" +
-      "regations\022S\n\rsub_group_bys\030\010 \001(\0132<.com.a" +
+      ".DateTimeValue\022S\n\013field_range\030\003 \001(\0132>.co" +
+      "m.alicloud.openservices.tablestore.core." +
+      "protocol.FieldRange\022\017\n\007missing\030\004 \001(\014\022\025\n\r" +
+      "min_doc_count\030\005 \001(\003\022\021\n\ttime_zone\030\006 \001(\t\022M",
+      "\n\004sort\030\007 \001(\0132?.com.alicloud.openservices" +
+      ".tablestore.core.protocol.GroupBySort\022R\n" +
+      "\010sub_aggs\030\010 \001(\0132@.com.alicloud.openservi" +
+      "ces.tablestore.core.protocol.Aggregation" +
+      "s\022S\n\rsub_group_bys\030\t \001(\0132<.com.alicloud." +
+      "openservices.tablestore.core.protocol.Gr" +
+      "oupBys\022Q\n\006offset\030\n \001(\0132A.com.alicloud.op" +
+      "enservices.tablestore.core.protocol.Date" +
+      "TimeValue\"\275\003\n\020GroupByHistogram\022\022\n\nfield_" +
+      "name\030\001 \001(\t\022\020\n\010interval\030\002 \001(\014\022\017\n\007missing\030",
+      "\003 \001(\014\022\025\n\rmin_doc_count\030\004 \001(\003\022M\n\004sort\030\005 \001" +
+      "(\0132?.com.alicloud.openservices.tablestor" +
+      "e.core.protocol.GroupBySort\022S\n\013field_ran" +
+      "ge\030\006 \001(\0132>.com.alicloud.openservices.tab" +
+      "lestore.core.protocol.FieldRange\022R\n\010sub_" +
+      "aggs\030\007 \001(\0132@.com.alicloud.openservices.t" +
+      "ablestore.core.protocol.Aggregations\022S\n\r" +
+      "sub_group_bys\030\010 \001(\0132<.com.alicloud.opens" +
+      "ervices.tablestore.core.protocol.GroupBy" +
+      "s\022\016\n\006offset\030\t \001(\014\"\\\n\014GroupKeySort\022L\n\005ord",
+      "er\030\001 \001(\0162=.com.alicloud.openservices.tab" +
+      "lestore.core.protocol.SortOrder\"\\\n\014RowCo" +
+      "untSort\022L\n\005order\030\001 \001(\0162=.com.alicloud.op" +
+      "enservices.tablestore.core.protocol.Sort" +
+      "Order\"p\n\nSubAggSort\022\024\n\014sub_agg_name\030\001 \001(" +
+      "\t\022L\n\005order\030\002 \001(\0162=.com.alicloud.openserv" +
+      "ices.tablestore.core.protocol.SortOrder\"" +
+      "\231\002\n\rGroupBySorter\022X\n\016group_key_sort\030\001 \001(" +
+      "\0132@.com.alicloud.openservices.tablestore" +
+      ".core.protocol.GroupKeySort\022X\n\016row_count",
+      "_sort\030\002 \001(\0132@.com.alicloud.openservices." +
+      "tablestore.core.protocol.RowCountSort\022T\n" +
+      "\014sub_agg_sort\030\003 \001(\0132>.com.alicloud.opens" +
+      "ervices.tablestore.core.protocol.SubAggS" +
+      "ort\"a\n\013GroupBySort\022R\n\007sorters\030\001 \003(\0132A.co" +
+      "m.alicloud.openservices.tablestore.core." +
+      "protocol.GroupBySorter\"\277\002\n\014GroupByField\022" +
+      "\022\n\nfield_name\030\001 \001(\t\022\014\n\004size\030\002 \001(\005\022M\n\004sor" +
+      "t\030\003 \001(\0132?.com.alicloud.openservices.tabl" +
+      "estore.core.protocol.GroupBySort\022R\n\010sub_",
+      "aggs\030\004 \001(\0132@.com.alicloud.openservices.t" +
+      "ablestore.core.protocol.Aggregations\022S\n\r" +
+      "sub_group_bys\030\005 \001(\0132<.com.alicloud.opens" +
+      "ervices.tablestore.core.protocol.GroupBy" +
+      "s\022\025\n\rmin_doc_count\030\006 \001(\003\"!\n\005Range\022\014\n\004fro" +
+      "m\030\001 \001(\001\022\n\n\002to\030\002 \001(\001\"\226\002\n\014GroupByRange\022\022\n\n" +
+      "field_name\030\001 \001(\t\022I\n\006ranges\030\002 \003(\01329.com.a" +
       "licloud.openservices.tablestore.core.pro" +
-      "tocol.GroupBys\"\\\n\014GroupKeySort\022L\n\005order\030" +
-      "\001 \001(\0162=.com.alicloud.openservices.tables" +
-      "tore.core.protocol.SortOrder\"\\\n\014RowCount" +
-      "Sort\022L\n\005order\030\001 \001(\0162=.com.alicloud.opens",
-      "ervices.tablestore.core.protocol.SortOrd" +
-      "er\"p\n\nSubAggSort\022\024\n\014sub_agg_name\030\001 \001(\t\022L" +
-      "\n\005order\030\002 \001(\0162=.com.alicloud.openservice" +
-      "s.tablestore.core.protocol.SortOrder\"\231\002\n" +
-      "\rGroupBySorter\022X\n\016group_key_sort\030\001 \001(\0132@" +
+      "tocol.Range\022R\n\010sub_aggs\030\003 \001(\0132@.com.alic" +
+      "loud.openservices.tablestore.core.protoc",
+      "ol.Aggregations\022S\n\rsub_group_bys\030\004 \001(\0132<" +
       ".com.alicloud.openservices.tablestore.co" +
-      "re.protocol.GroupKeySort\022X\n\016row_count_so" +
-      "rt\030\002 \001(\0132@.com.alicloud.openservices.tab" +
-      "lestore.core.protocol.RowCountSort\022T\n\014su" +
-      "b_agg_sort\030\003 \001(\0132>.com.alicloud.openserv",
-      "ices.tablestore.core.protocol.SubAggSort" +
-      "\"a\n\013GroupBySort\022R\n\007sorters\030\001 \003(\0132A.com.a" +
-      "licloud.openservices.tablestore.core.pro" +
-      "tocol.GroupBySorter\"\277\002\n\014GroupByField\022\022\n\n" +
-      "field_name\030\001 \001(\t\022\014\n\004size\030\002 \001(\005\022M\n\004sort\030\003" +
-      " \001(\0132?.com.alicloud.openservices.tablest" +
-      "ore.core.protocol.GroupBySort\022R\n\010sub_agg" +
-      "s\030\004 \001(\0132@.com.alicloud.openservices.tabl" +
-      "estore.core.protocol.Aggregations\022S\n\rsub" +
-      "_group_bys\030\005 \001(\0132<.com.alicloud.openserv",
-      "ices.tablestore.core.protocol.GroupBys\022\025" +
-      "\n\rmin_doc_count\030\006 \001(\003\"!\n\005Range\022\014\n\004from\030\001" +
-      " \001(\001\022\n\n\002to\030\002 \001(\001\"\226\002\n\014GroupByRange\022\022\n\nfie" +
-      "ld_name\030\001 \001(\t\022I\n\006ranges\030\002 \003(\01329.com.alic" +
-      "loud.openservices.tablestore.core.protoc" +
-      "ol.Range\022R\n\010sub_aggs\030\003 \001(\0132@.com.aliclou" +
+      "re.protocol.GroupBys\"\204\002\n\rGroupByFilter\022J" +
+      "\n\007filters\030\001 \003(\01329.com.alicloud.openservi" +
+      "ces.tablestore.core.protocol.Query\022R\n\010su" +
+      "b_aggs\030\002 \001(\0132@.com.alicloud.openservices" +
+      ".tablestore.core.protocol.Aggregations\022S" +
+      "\n\rsub_group_bys\030\003 \001(\0132<.com.alicloud.ope" +
+      "nservices.tablestore.core.protocol.Group" +
+      "Bys\"\352\002\n\022GroupByGeoDistance\022\022\n\nfield_name",
+      "\030\001 \001(\t\022L\n\006origin\030\002 \001(\0132<.com.alicloud.op" +
+      "enservices.tablestore.core.protocol.GeoP" +
+      "oint\022I\n\006ranges\030\003 \003(\01329.com.alicloud.open" +
+      "services.tablestore.core.protocol.Range\022" +
+      "R\n\010sub_aggs\030\004 \001(\0132@.com.alicloud.openser" +
+      "vices.tablestore.core.protocol.Aggregati" +
+      "ons\022S\n\rsub_group_bys\030\005 \001(\0132<.com.aliclou" +
       "d.openservices.tablestore.core.protocol." +
-      "Aggregations\022S\n\rsub_group_bys\030\004 \001(\0132<.co" +
-      "m.alicloud.openservices.tablestore.core." +
-      "protocol.GroupBys\"\204\002\n\rGroupByFilter\022J\n\007f",
-      "ilters\030\001 \003(\01329.com.alicloud.openservices" +
-      ".tablestore.core.protocol.Query\022R\n\010sub_a" +
-      "ggs\030\002 \001(\0132@.com.alicloud.openservices.ta" +
-      "blestore.core.protocol.Aggregations\022S\n\rs" +
-      "ub_group_bys\030\003 \001(\0132<.com.alicloud.opense" +
-      "rvices.tablestore.core.protocol.GroupBys" +
-      "\"\352\002\n\022GroupByGeoDistance\022\022\n\nfield_name\030\001 " +
-      "\001(\t\022L\n\006origin\030\002 \001(\0132<.com.alicloud.opens" +
-      "ervices.tablestore.core.protocol.GeoPoin" +
-      "t\022I\n\006ranges\030\003 \003(\01329.com.alicloud.openser",
-      "vices.tablestore.core.protocol.Range\022R\n\010" +
-      "sub_aggs\030\004 \001(\0132@.com.alicloud.openservic" +
-      "es.tablestore.core.protocol.Aggregations" +
-      "\022S\n\rsub_group_bys\030\005 \001(\0132<.com.alicloud.o" +
-      "penservices.tablestore.core.protocol.Gro" +
-      "upBys\"%\n\024AvgAggregationResult\022\r\n\005value\030\001" +
-      " \001(\001\"(\n\030TopRowsAggregationResult\022\014\n\004rows" +
-      "\030\001 \003(\014\"8\n\032PercentilesAggregationItem\022\013\n\003" +
-      "key\030\001 \001(\001\022\r\n\005value\030\002 \001(\014\"\225\001\n\034Percentiles" +
-      "AggregationResult\022u\n\035percentiles_aggrega",
-      "tion_items\030\001 \003(\0132N.com.alicloud.openserv" +
-      "ices.tablestore.core.protocol.Percentile" +
-      "sAggregationItem\"/\n\036DistinctCountAggrega" +
-      "tionResult\022\r\n\005value\030\001 \001(\003\"%\n\024MaxAggregat" +
-      "ionResult\022\r\n\005value\030\001 \001(\001\"%\n\024MinAggregati" +
-      "onResult\022\r\n\005value\030\001 \001(\001\"%\n\024SumAggregatio" +
-      "nResult\022\r\n\005value\030\001 \001(\001\"\'\n\026CountAggregati" +
-      "onResult\022\r\n\005value\030\001 \001(\003\"\210\001\n\021AggregationR" +
-      "esult\022\014\n\004name\030\001 \001(\t\022Q\n\004type\030\002 \001(\0162C.com." +
-      "alicloud.openservices.tablestore.core.pr",
-      "otocol.AggregationType\022\022\n\nagg_result\030\003 \001" +
-      "(\014\"p\n\022AggregationsResult\022Z\n\013agg_results\030" +
-      "\001 \003(\0132E.com.alicloud.openservices.tables" +
-      "tore.core.protocol.AggregationResult\"\373\001\n" +
-      "\026GroupByFieldResultItem\022\013\n\003key\030\001 \001(\t\022\021\n\t" +
-      "row_count\030\002 \001(\003\022_\n\017sub_aggs_result\030\003 \001(\013" +
-      "2F.com.alicloud.openservices.tablestore." +
-      "core.protocol.AggregationsResult\022`\n\024sub_" +
-      "group_bys_result\030\004 \001(\0132B.com.alicloud.op" +
-      "enservices.tablestore.core.protocol.Grou",
-      "pBysResult\"\205\001\n\022GroupByFieldResult\022o\n\033gro" +
-      "up_by_field_result_items\030\001 \003(\0132J.com.ali" +
-      "cloud.openservices.tablestore.core.proto" +
-      "col.GroupByFieldResultItem\"\210\002\n\026GroupByRa" +
-      "ngeResultItem\022\014\n\004from\030\001 \001(\001\022\n\n\002to\030\002 \001(\001\022" +
-      "\021\n\trow_count\030\003 \001(\003\022_\n\017sub_aggs_result\030\004 " +
-      "\001(\0132F.com.alicloud.openservices.tablesto" +
-      "re.core.protocol.AggregationsResult\022`\n\024s" +
-      "ub_group_bys_result\030\005 \001(\0132B.com.alicloud" +
-      ".openservices.tablestore.core.protocol.G",
-      "roupBysResult\"\205\001\n\022GroupByRangeResult\022o\n\033" +
-      "group_by_range_result_items\030\001 \003(\0132J.com." +
-      "alicloud.openservices.tablestore.core.pr" +
-      "otocol.GroupByRangeResultItem\"\216\002\n\034GroupB" +
-      "yGeoDistanceResultItem\022\014\n\004from\030\001 \001(\001\022\n\n\002" +
-      "to\030\002 \001(\001\022\021\n\trow_count\030\003 \001(\003\022_\n\017sub_aggs_" +
-      "result\030\004 \001(\0132F.com.alicloud.openservices" +
-      ".tablestore.core.protocol.AggregationsRe" +
-      "sult\022`\n\024sub_group_bys_result\030\005 \001(\0132B.com" +
-      ".alicloud.openservices.tablestore.core.p",
-      "rotocol.GroupBysResult\"\230\001\n\030GroupByGeoDis" +
-      "tanceResult\022|\n\"group_by_geo_distance_res" +
-      "ult_items\030\001 \003(\0132P.com.alicloud.openservi" +
-      "ces.tablestore.core.protocol.GroupByGeoD" +
-      "istanceResultItem\"\357\001\n\027GroupByFilterResul" +
-      "tItem\022\021\n\trow_count\030\001 \001(\003\022_\n\017sub_aggs_res" +
-      "ult\030\002 \001(\0132F.com.alicloud.openservices.ta" +
-      "blestore.core.protocol.AggregationsResul" +
-      "t\022`\n\024sub_group_bys_result\030\003 \001(\0132B.com.al" +
-      "icloud.openservices.tablestore.core.prot",
-      "ocol.GroupBysResult\"\210\001\n\023GroupByFilterRes" +
-      "ult\022q\n\034group_by_filter_result_items\030\001 \003(" +
-      "\0132K.com.alicloud.openservices.tablestore" +
-      ".core.protocol.GroupByFilterResultItem\"\205" +
-      "\001\n\rGroupByResult\022\014\n\004name\030\001 \001(\t\022M\n\004type\030\002" +
-      " \001(\0162?.com.alicloud.openservices.tablest" +
-      "ore.core.protocol.GroupByType\022\027\n\017group_b" +
-      "y_result\030\003 \001(\014\"m\n\016GroupBysResult\022[\n\020grou" +
-      "p_by_results\030\001 \003(\0132A.com.alicloud.opense" +
-      "rvices.tablestore.core.protocol.GroupByR",
-      "esult\"\365\001\n\024GroupByHistogramItem\022\013\n\003key\030\001 " +
-      "\001(\014\022\r\n\005value\030\002 \001(\003\022_\n\017sub_aggs_result\030\003 " +
-      "\001(\0132F.com.alicloud.openservices.tablesto" +
+      "GroupBys\"%\n\024AvgAggregationResult\022\r\n\005valu" +
+      "e\030\001 \001(\001\"(\n\030TopRowsAggregationResult\022\014\n\004r",
+      "ows\030\001 \003(\014\"8\n\032PercentilesAggregationItem\022" +
+      "\013\n\003key\030\001 \001(\001\022\r\n\005value\030\002 \001(\014\"\225\001\n\034Percenti" +
+      "lesAggregationResult\022u\n\035percentiles_aggr" +
+      "egation_items\030\001 \003(\0132N.com.alicloud.opens" +
+      "ervices.tablestore.core.protocol.Percent" +
+      "ilesAggregationItem\"/\n\036DistinctCountAggr" +
+      "egationResult\022\r\n\005value\030\001 \001(\003\"%\n\024MaxAggre" +
+      "gationResult\022\r\n\005value\030\001 \001(\001\"%\n\024MinAggreg" +
+      "ationResult\022\r\n\005value\030\001 \001(\001\"%\n\024SumAggrega" +
+      "tionResult\022\r\n\005value\030\001 \001(\001\"\'\n\026CountAggreg",
+      "ationResult\022\r\n\005value\030\001 \001(\003\"\210\001\n\021Aggregati" +
+      "onResult\022\014\n\004name\030\001 \001(\t\022Q\n\004type\030\002 \001(\0162C.c" +
+      "om.alicloud.openservices.tablestore.core" +
+      ".protocol.AggregationType\022\022\n\nagg_result\030" +
+      "\003 \001(\014\"p\n\022AggregationsResult\022Z\n\013agg_resul" +
+      "ts\030\001 \003(\0132E.com.alicloud.openservices.tab" +
+      "lestore.core.protocol.AggregationResult\"" +
+      "\373\001\n\026GroupByFieldResultItem\022\013\n\003key\030\001 \001(\t\022" +
+      "\021\n\trow_count\030\002 \001(\003\022_\n\017sub_aggs_result\030\003 " +
+      "\001(\0132F.com.alicloud.openservices.tablesto",
       "re.core.protocol.AggregationsResult\022`\n\024s" +
       "ub_group_bys_result\030\004 \001(\0132B.com.alicloud" +
       ".openservices.tablestore.core.protocol.G" +
-      "roupBysResult\"\203\001\n\026GroupByHistogramResult" +
-      "\022i\n\027group_by_histogra_items\030\001 \003(\0132H.com." +
+      "roupBysResult\"\205\001\n\022GroupByFieldResult\022o\n\033" +
+      "group_by_field_result_items\030\001 \003(\0132J.com." +
       "alicloud.openservices.tablestore.core.pr" +
-      "otocol.GroupByHistogramItem\"\203\002\n\030GroupByD",
-      "ateHistogramItem\022\021\n\ttimestamp\030\001 \001(\003\022\021\n\tr" +
-      "ow_count\030\002 \001(\003\022_\n\017sub_aggs_result\030\003 \001(\0132" +
-      "F.com.alicloud.openservices.tablestore.c" +
-      "ore.protocol.AggregationsResult\022`\n\024sub_g" +
-      "roup_bys_result\030\004 \001(\0132B.com.alicloud.ope" +
+      "otocol.GroupByFieldResultItem\"\210\002\n\026GroupB" +
+      "yRangeResultItem\022\014\n\004from\030\001 \001(\001\022\n\n\002to\030\002 \001" +
+      "(\001\022\021\n\trow_count\030\003 \001(\003\022_\n\017sub_aggs_result" +
+      "\030\004 \001(\0132F.com.alicloud.openservices.table",
+      "store.core.protocol.AggregationsResult\022`" +
+      "\n\024sub_group_bys_result\030\005 \001(\0132B.com.alicl" +
+      "oud.openservices.tablestore.core.protoco" +
+      "l.GroupBysResult\"\205\001\n\022GroupByRangeResult\022" +
+      "o\n\033group_by_range_result_items\030\001 \003(\0132J.c" +
+      "om.alicloud.openservices.tablestore.core" +
+      ".protocol.GroupByRangeResultItem\"\216\002\n\034Gro" +
+      "upByGeoDistanceResultItem\022\014\n\004from\030\001 \001(\001\022" +
+      "\n\n\002to\030\002 \001(\001\022\021\n\trow_count\030\003 \001(\003\022_\n\017sub_ag" +
+      "gs_result\030\004 \001(\0132F.com.alicloud.openservi",
+      "ces.tablestore.core.protocol.Aggregation" +
+      "sResult\022`\n\024sub_group_bys_result\030\005 \001(\0132B." +
+      "com.alicloud.openservices.tablestore.cor" +
+      "e.protocol.GroupBysResult\"\230\001\n\030GroupByGeo" +
+      "DistanceResult\022|\n\"group_by_geo_distance_" +
+      "result_items\030\001 \003(\0132P.com.alicloud.opense" +
+      "rvices.tablestore.core.protocol.GroupByG" +
+      "eoDistanceResultItem\"\357\001\n\027GroupByFilterRe" +
+      "sultItem\022\021\n\trow_count\030\001 \001(\003\022_\n\017sub_aggs_" +
+      "result\030\002 \001(\0132F.com.alicloud.openservices",
+      ".tablestore.core.protocol.AggregationsRe" +
+      "sult\022`\n\024sub_group_bys_result\030\003 \001(\0132B.com" +
+      ".alicloud.openservices.tablestore.core.p" +
+      "rotocol.GroupBysResult\"\210\001\n\023GroupByFilter" +
+      "Result\022q\n\034group_by_filter_result_items\030\001" +
+      " \003(\0132K.com.alicloud.openservices.tablest" +
+      "ore.core.protocol.GroupByFilterResultIte" +
+      "m\"\205\001\n\rGroupByResult\022\014\n\004name\030\001 \001(\t\022M\n\004typ" +
+      "e\030\002 \001(\0162?.com.alicloud.openservices.tabl" +
+      "estore.core.protocol.GroupByType\022\027\n\017grou",
+      "p_by_result\030\003 \001(\014\"m\n\016GroupBysResult\022[\n\020g" +
+      "roup_by_results\030\001 \003(\0132A.com.alicloud.ope" +
       "nservices.tablestore.core.protocol.Group" +
-      "BysResult\"\221\001\n\032GroupByDateHistogramResult" +
-      "\022s\n\035group_by_date_histogram_items\030\001 \003(\0132" +
-      "L.com.alicloud.openservices.tablestore.c" +
-      "ore.protocol.GroupByDateHistogramItem\"\261\001",
-      "\n\nMatchQuery\022\022\n\nfield_name\030\001 \001(\t\022\014\n\004text" +
-      "\030\002 \001(\t\022\034\n\024minimum_should_match\030\003 \001(\005\022S\n\010" +
-      "operator\030\004 \001(\0162A.com.alicloud.openservic" +
-      "es.tablestore.core.protocol.QueryOperato" +
-      "r\022\016\n\006weight\030\005 \001(\002\"D\n\020MatchPhraseQuery\022\022\n" +
-      "\nfield_name\030\001 \001(\t\022\014\n\004text\030\002 \001(\t\022\016\n\006weigh" +
-      "t\030\003 \001(\002\"\017\n\rMatchAllQuery\"=\n\tTermQuery\022\022\n" +
-      "\nfield_name\030\001 \001(\t\022\014\n\004term\030\002 \001(\014\022\016\n\006weigh" +
-      "t\030\003 \001(\002\"?\n\nTermsQuery\022\022\n\nfield_name\030\001 \001(" +
-      "\t\022\r\n\005terms\030\002 \003(\014\022\016\n\006weight\030\003 \001(\002\"t\n\nRang",
-      "eQuery\022\022\n\nfield_name\030\001 \001(\t\022\022\n\nrange_from" +
-      "\030\002 \001(\014\022\020\n\010range_to\030\003 \001(\014\022\025\n\rinclude_lowe" +
-      "r\030\004 \001(\010\022\025\n\rinclude_upper\030\005 \001(\010\"A\n\013Prefix" +
-      "Query\022\022\n\nfield_name\030\001 \001(\t\022\016\n\006prefix\030\002 \001(" +
-      "\t\022\016\n\006weight\030\003 \001(\002\"B\n\rWildcardQuery\022\022\n\nfi" +
-      "eld_name\030\001 \001(\t\022\r\n\005value\030\002 \001(\t\022\016\n\006weight\030" +
-      "\003 \001(\002\"\365\002\n\tBoolQuery\022O\n\014must_queries\030\001 \003(" +
-      "\01329.com.alicloud.openservices.tablestore" +
-      ".core.protocol.Query\022S\n\020must_not_queries" +
-      "\030\002 \003(\01329.com.alicloud.openservices.table",
-      "store.core.protocol.Query\022Q\n\016filter_quer" +
-      "ies\030\003 \003(\01329.com.alicloud.openservices.ta" +
-      "blestore.core.protocol.Query\022Q\n\016should_q" +
-      "ueries\030\004 \003(\01329.com.alicloud.openservices" +
-      ".tablestore.core.protocol.Query\022\034\n\024minim" +
-      "um_should_match\030\005 \001(\005\"\\\n\017ConstScoreQuery" +
-      "\022I\n\006filter\030\001 \001(\01329.com.alicloud.openserv" +
-      "ices.tablestore.core.protocol.Query\"&\n\020F" +
-      "ieldValueFactor\022\022\n\nfield_name\030\001 \001(\t\"\300\001\n\022" +
-      "FunctionScoreQuery\022H\n\005query\030\001 \001(\01329.com.",
-      "alicloud.openservices.tablestore.core.pr" +
-      "otocol.Query\022`\n\022field_value_factor\030\002 \001(\013" +
-      "2D.com.alicloud.openservices.tablestore." +
-      "core.protocol.FieldValueFactor\"\310\001\n\013Neste" +
-      "dQuery\022\014\n\004path\030\001 \001(\t\022H\n\005query\030\002 \001(\01329.co" +
+      "ByResult\"\365\001\n\024GroupByHistogramItem\022\013\n\003key" +
+      "\030\001 \001(\014\022\r\n\005value\030\002 \001(\003\022_\n\017sub_aggs_result" +
+      "\030\003 \001(\0132F.com.alicloud.openservices.table" +
+      "store.core.protocol.AggregationsResult\022`" +
+      "\n\024sub_group_bys_result\030\004 \001(\0132B.com.alicl" +
+      "oud.openservices.tablestore.core.protoco" +
+      "l.GroupBysResult\"\203\001\n\026GroupByHistogramRes",
+      "ult\022i\n\027group_by_histogra_items\030\001 \003(\0132H.c" +
+      "om.alicloud.openservices.tablestore.core" +
+      ".protocol.GroupByHistogramItem\"\203\002\n\030Group" +
+      "ByDateHistogramItem\022\021\n\ttimestamp\030\001 \001(\003\022\021" +
+      "\n\trow_count\030\002 \001(\003\022_\n\017sub_aggs_result\030\003 \001" +
+      "(\0132F.com.alicloud.openservices.tablestor" +
+      "e.core.protocol.AggregationsResult\022`\n\024su" +
+      "b_group_bys_result\030\004 \001(\0132B.com.alicloud." +
+      "openservices.tablestore.core.protocol.Gr" +
+      "oupBysResult\"\221\001\n\032GroupByDateHistogramRes",
+      "ult\022s\n\035group_by_date_histogram_items\030\001 \003" +
+      "(\0132L.com.alicloud.openservices.tablestor" +
+      "e.core.protocol.GroupByDateHistogramItem" +
+      "\"\261\001\n\nMatchQuery\022\022\n\nfield_name\030\001 \001(\t\022\014\n\004t" +
+      "ext\030\002 \001(\t\022\034\n\024minimum_should_match\030\003 \001(\005\022" +
+      "S\n\010operator\030\004 \001(\0162A.com.alicloud.openser" +
+      "vices.tablestore.core.protocol.QueryOper" +
+      "ator\022\016\n\006weight\030\005 \001(\002\"D\n\020MatchPhraseQuery" +
+      "\022\022\n\nfield_name\030\001 \001(\t\022\014\n\004text\030\002 \001(\t\022\016\n\006we" +
+      "ight\030\003 \001(\002\"\017\n\rMatchAllQuery\"=\n\tTermQuery",
+      "\022\022\n\nfield_name\030\001 \001(\t\022\014\n\004term\030\002 \001(\014\022\016\n\006we" +
+      "ight\030\003 \001(\002\"?\n\nTermsQuery\022\022\n\nfield_name\030\001" +
+      " \001(\t\022\r\n\005terms\030\002 \003(\014\022\016\n\006weight\030\003 \001(\002\"t\n\nR" +
+      "angeQuery\022\022\n\nfield_name\030\001 \001(\t\022\022\n\nrange_f" +
+      "rom\030\002 \001(\014\022\020\n\010range_to\030\003 \001(\014\022\025\n\rinclude_l" +
+      "ower\030\004 \001(\010\022\025\n\rinclude_upper\030\005 \001(\010\"A\n\013Pre" +
+      "fixQuery\022\022\n\nfield_name\030\001 \001(\t\022\016\n\006prefix\030\002" +
+      " \001(\t\022\016\n\006weight\030\003 \001(\002\"B\n\rWildcardQuery\022\022\n" +
+      "\nfield_name\030\001 \001(\t\022\r\n\005value\030\002 \001(\t\022\016\n\006weig" +
+      "ht\030\003 \001(\002\"\365\002\n\tBoolQuery\022O\n\014must_queries\030\001",
+      " \003(\01329.com.alicloud.openservices.tablest" +
+      "ore.core.protocol.Query\022S\n\020must_not_quer" +
+      "ies\030\002 \003(\01329.com.alicloud.openservices.ta" +
+      "blestore.core.protocol.Query\022Q\n\016filter_q" +
+      "ueries\030\003 \003(\01329.com.alicloud.openservices" +
+      ".tablestore.core.protocol.Query\022Q\n\016shoul" +
+      "d_queries\030\004 \003(\01329.com.alicloud.openservi" +
+      "ces.tablestore.core.protocol.Query\022\034\n\024mi" +
+      "nimum_should_match\030\005 \001(\005\"\\\n\017ConstScoreQu" +
+      "ery\022I\n\006filter\030\001 \001(\01329.com.alicloud.opens",
+      "ervices.tablestore.core.protocol.Query\"&" +
+      "\n\020FieldValueFactor\022\022\n\nfield_name\030\001 \001(\t\"\300" +
+      "\001\n\022FunctionScoreQuery\022H\n\005query\030\001 \001(\01329.c" +
+      "om.alicloud.openservices.tablestore.core" +
+      ".protocol.Query\022`\n\022field_value_factor\030\002 " +
+      "\001(\0132D.com.alicloud.openservices.tablesto" +
+      "re.core.protocol.FieldValueFactor\"\233\002\n\013Ne" +
+      "stedQuery\022\014\n\004path\030\001 \001(\t\022H\n\005query\030\002 \001(\01329" +
+      ".com.alicloud.openservices.tablestore.co" +
+      "re.protocol.Query\022Q\n\nscore_mode\030\003 \001(\0162=.",
+      "com.alicloud.openservices.tablestore.cor" +
+      "e.protocol.ScoreMode\022\016\n\006weight\030\004 \001(\002\022Q\n\n" +
+      "inner_hits\030\005 \001(\0132=.com.alicloud.openserv" +
+      "ices.tablestore.core.protocol.InnerHits\"" +
+      "\304\001\n\tInnerHits\022F\n\004sort\030\001 \001(\01328.com.aliclo" +
+      "ud.openservices.tablestore.core.protocol" +
+      ".Sort\022\016\n\006offset\030\002 \001(\005\022\r\n\005limit\030\003 \001(\005\022P\n\t" +
+      "highlight\030\004 \001(\0132=.com.alicloud.openservi" +
+      "ces.tablestore.core.protocol.Highlight\"Q" +
+      "\n\023GeoBoundingBoxQuery\022\022\n\nfield_name\030\001 \001(",
+      "\t\022\020\n\010top_left\030\002 \001(\t\022\024\n\014bottom_right\030\003 \001(" +
+      "\t\"N\n\020GeoDistanceQuery\022\022\n\nfield_name\030\001 \001(" +
+      "\t\022\024\n\014center_point\030\002 \001(\t\022\020\n\010distance\030\003 \001(" +
+      "\001\"5\n\017GeoPolygonQuery\022\022\n\nfield_name\030\001 \001(\t" +
+      "\022\016\n\006points\030\002 \003(\t\"!\n\013ExistsQuery\022\022\n\nfield" +
+      "_name\030\001 \001(\t\"\254\001\n\016KnnVectorQuery\022\022\n\nfield_" +
+      "name\030\001 \001(\t\022\r\n\005top_k\030\002 \001(\005\022\034\n\024float32_que" +
+      "ry_vector\030\004 \003(\002\022I\n\006filter\030\005 \001(\01329.com.al" +
+      "icloud.openservices.tablestore.core.prot" +
+      "ocol.Query\022\016\n\006weight\030\006 \001(\002\"c\n\005Query\022K\n\004t",
+      "ype\030\001 \001(\0162=.com.alicloud.openservices.ta" +
+      "blestore.core.protocol.QueryType\022\r\n\005quer" +
+      "y\030\002 \001(\014\"\036\n\010Collapse\022\022\n\nfield_name\030\001 \001(\t\"" +
+      "g\n\014NestedFilter\022\014\n\004path\030\001 \001(\t\022I\n\006filter\030" +
+      "\002 \001(\01329.com.alicloud.openservices.tables" +
+      "tore.core.protocol.Query\"Y\n\tScoreSort\022L\n" +
+      "\005order\030\001 \001(\0162=.com.alicloud.openservices" +
+      ".tablestore.core.protocol.SortOrder\"^\n\016P" +
+      "rimaryKeySort\022L\n\005order\030\001 \001(\0162=.com.alicl" +
+      "oud.openservices.tablestore.core.protoco",
+      "l.SortOrder\"\300\002\n\tFieldSort\022\022\n\nfield_name\030" +
+      "\001 \001(\t\022L\n\005order\030\002 \001(\0162=.com.alicloud.open" +
+      "services.tablestore.core.protocol.SortOr" +
+      "der\022J\n\004mode\030\003 \001(\0162<.com.alicloud.openser" +
+      "vices.tablestore.core.protocol.SortMode\022" +
+      "W\n\rnested_filter\030\004 \001(\0132@.com.alicloud.op" +
+      "enservices.tablestore.core.protocol.Nest" +
+      "edFilter\022\025\n\rmissing_value\030\005 \001(\014\022\025\n\rmissi" +
+      "ng_field\030\006 \001(\t\"W\n\007DocSort\022L\n\005order\030\001 \001(\016" +
+      "2=.com.alicloud.openservices.tablestore.",
+      "core.protocol.SortOrder\"\204\003\n\017GeoDistanceS" +
+      "ort\022\022\n\nfield_name\030\001 \001(\t\022\016\n\006points\030\002 \003(\t\022" +
+      "L\n\005order\030\003 \001(\0162=.com.alicloud.openservic" +
+      "es.tablestore.core.protocol.SortOrder\022J\n" +
+      "\004mode\030\004 \001(\0162<.com.alicloud.openservices." +
+      "tablestore.core.protocol.SortMode\022Z\n\rdis" +
+      "tance_type\030\005 \001(\0162C.com.alicloud.openserv" +
+      "ices.tablestore.core.protocol.GeoDistanc" +
+      "eType\022W\n\rnested_filter\030\006 \001(\0132@.com.alicl" +
+      "oud.openservices.tablestore.core.protoco",
+      "l.NestedFilter\"\262\003\n\006Sorter\022Q\n\nfield_sort\030" +
+      "\001 \001(\0132=.com.alicloud.openservices.tables" +
+      "tore.core.protocol.FieldSort\022^\n\021geo_dist" +
+      "ance_sort\030\002 \001(\0132C.com.alicloud.openservi" +
+      "ces.tablestore.core.protocol.GeoDistance" +
+      "Sort\022Q\n\nscore_sort\030\003 \001(\0132=.com.alicloud." +
+      "openservices.tablestore.core.protocol.Sc" +
+      "oreSort\022S\n\007pk_sort\030\004 \001(\0132B.com.alicloud." +
+      "openservices.tablestore.core.protocol.Pr" +
+      "imaryKeySort\022M\n\010doc_sort\030\005 \001(\0132;.com.ali",
+      "cloud.openservices.tablestore.core.proto" +
+      "col.DocSort\"R\n\004Sort\022J\n\006sorter\030\001 \003(\0132:.co" +
       "m.alicloud.openservices.tablestore.core." +
-      "protocol.Query\022Q\n\nscore_mode\030\003 \001(\0162=.com" +
+      "protocol.Sorter\"\247\004\n\013SearchQuery\022\016\n\006offse" +
+      "t\030\001 \001(\005\022\r\n\005limit\030\002 \001(\005\022H\n\005query\030\004 \001(\01329." +
+      "com.alicloud.openservices.tablestore.cor" +
+      "e.protocol.Query\022N\n\010collapse\030\005 \001(\0132<.com" +
       ".alicloud.openservices.tablestore.core.p" +
-      "rotocol.ScoreMode\022\016\n\006weight\030\004 \001(\002\"Q\n\023Geo" +
-      "BoundingBoxQuery\022\022\n\nfield_name\030\001 \001(\t\022\020\n\010",
-      "top_left\030\002 \001(\t\022\024\n\014bottom_right\030\003 \001(\t\"N\n\020" +
-      "GeoDistanceQuery\022\022\n\nfield_name\030\001 \001(\t\022\024\n\014" +
-      "center_point\030\002 \001(\t\022\020\n\010distance\030\003 \001(\001\"5\n\017" +
-      "GeoPolygonQuery\022\022\n\nfield_name\030\001 \001(\t\022\016\n\006p" +
-      "oints\030\002 \003(\t\"!\n\013ExistsQuery\022\022\n\nfield_name" +
-      "\030\001 \001(\t\"c\n\005Query\022K\n\004type\030\001 \001(\0162=.com.alic" +
-      "loud.openservices.tablestore.core.protoc" +
-      "ol.QueryType\022\r\n\005query\030\002 \001(\014\"\036\n\010Collapse\022" +
-      "\022\n\nfield_name\030\001 \001(\t\"g\n\014NestedFilter\022\014\n\004p" +
-      "ath\030\001 \001(\t\022I\n\006filter\030\002 \001(\01329.com.alicloud",
-      ".openservices.tablestore.core.protocol.Q" +
-      "uery\"Y\n\tScoreSort\022L\n\005order\030\001 \001(\0162=.com.a" +
-      "licloud.openservices.tablestore.core.pro" +
-      "tocol.SortOrder\"^\n\016PrimaryKeySort\022L\n\005ord" +
-      "er\030\001 \001(\0162=.com.alicloud.openservices.tab" +
-      "lestore.core.protocol.SortOrder\"\300\002\n\tFiel" +
-      "dSort\022\022\n\nfield_name\030\001 \001(\t\022L\n\005order\030\002 \001(\016" +
-      "2=.com.alicloud.openservices.tablestore." +
-      "core.protocol.SortOrder\022J\n\004mode\030\003 \001(\0162<." +
-      "com.alicloud.openservices.tablestore.cor",
-      "e.protocol.SortMode\022W\n\rnested_filter\030\004 \001" +
-      "(\0132@.com.alicloud.openservices.tablestor" +
-      "e.core.protocol.NestedFilter\022\025\n\rmissing_" +
-      "value\030\005 \001(\014\022\025\n\rmissing_field\030\006 \001(\t\"\204\003\n\017G" +
-      "eoDistanceSort\022\022\n\nfield_name\030\001 \001(\t\022\016\n\006po" +
-      "ints\030\002 \003(\t\022L\n\005order\030\003 \001(\0162=.com.alicloud" +
-      ".openservices.tablestore.core.protocol.S" +
-      "ortOrder\022J\n\004mode\030\004 \001(\0162<.com.alicloud.op" +
-      "enservices.tablestore.core.protocol.Sort" +
-      "Mode\022Z\n\rdistance_type\030\005 \001(\0162C.com.aliclo",
-      "ud.openservices.tablestore.core.protocol" +
-      ".GeoDistanceType\022W\n\rnested_filter\030\006 \001(\0132" +
-      "@.com.alicloud.openservices.tablestore.c" +
-      "ore.protocol.NestedFilter\"\343\002\n\006Sorter\022Q\n\n" +
-      "field_sort\030\001 \001(\0132=.com.alicloud.openserv" +
-      "ices.tablestore.core.protocol.FieldSort\022" +
-      "^\n\021geo_distance_sort\030\002 \001(\0132C.com.aliclou" +
+      "rotocol.Collapse\022F\n\004sort\030\006 \001(\01328.com.ali" +
+      "cloud.openservices.tablestore.core.proto",
+      "col.Sort\022\025\n\rgetTotalCount\030\010 \001(\010\022\r\n\005token" +
+      "\030\t \001(\014\022N\n\004aggs\030\n \001(\0132@.com.alicloud.open" +
+      "services.tablestore.core.protocol.Aggreg" +
+      "ations\022O\n\tgroup_bys\030\013 \001(\0132<.com.alicloud" +
+      ".openservices.tablestore.core.protocol.G" +
+      "roupBys\022P\n\thighlight\030\014 \001(\0132=.com.aliclou" +
       "d.openservices.tablestore.core.protocol." +
-      "GeoDistanceSort\022Q\n\nscore_sort\030\003 \001(\0132=.co" +
-      "m.alicloud.openservices.tablestore.core.",
-      "protocol.ScoreSort\022S\n\007pk_sort\030\004 \001(\0132B.co" +
-      "m.alicloud.openservices.tablestore.core." +
-      "protocol.PrimaryKeySort\"R\n\004Sort\022J\n\006sorte" +
-      "r\030\001 \003(\0132:.com.alicloud.openservices.tabl" +
-      "estore.core.protocol.Sorter\"\325\003\n\013SearchQu" +
-      "ery\022\016\n\006offset\030\001 \001(\005\022\r\n\005limit\030\002 \001(\005\022H\n\005qu" +
-      "ery\030\004 \001(\01329.com.alicloud.openservices.ta" +
-      "blestore.core.protocol.Query\022N\n\010collapse" +
-      "\030\005 \001(\0132<.com.alicloud.openservices.table" +
-      "store.core.protocol.Collapse\022F\n\004sort\030\006 \001",
-      "(\01328.com.alicloud.openservices.tablestor" +
-      "e.core.protocol.Sort\022\025\n\rgetTotalCount\030\010 " +
-      "\001(\010\022\r\n\005token\030\t \001(\014\022N\n\004aggs\030\n \001(\0132@.com.a" +
+      "Highlight\"\336\001\n\tHighlight\022d\n\024highlight_par" +
+      "ameters\030\001 \003(\0132F.com.alicloud.openservice" +
+      "s.tablestore.core.protocol.HighlightPara",
+      "meter\022k\n\021highlight_encoder\030\002 \001(\0162D.com.a" +
       "licloud.openservices.tablestore.core.pro" +
-      "tocol.Aggregations\022O\n\tgroup_bys\030\013 \001(\0132<." +
+      "tocol.HighlightEncoder:\nPLAIN_MODE\"\363\001\n\022H" +
+      "ighlightParameter\022\022\n\nfield_name\030\001 \001(\t\022\033\n" +
+      "\023number_of_fragments\030\002 \001(\005\022\025\n\rfragment_s" +
+      "ize\030\003 \001(\005\022\017\n\007pre_tag\030\004 \001(\t\022\020\n\010post_tag\030\005" +
+      " \001(\t\022r\n\017fragments_order\030\006 \001(\0162J.com.alic" +
+      "loud.openservices.tablestore.core.protoc" +
+      "ol.HighlightFragmentOrder:\rTEXT_SEQUENCE" +
+      "\"\177\n\014ColumnsToGet\022Y\n\013return_type\030\001 \001(\0162D.",
       "com.alicloud.openservices.tablestore.cor" +
-      "e.protocol.GroupBys\"\177\n\014ColumnsToGet\022Y\n\013r" +
-      "eturn_type\030\001 \001(\0162D.com.alicloud.openserv" +
-      "ices.tablestore.core.protocol.ColumnRetu" +
-      "rnType\022\024\n\014column_names\030\002 \003(\t\"\323\001\n\rSearchR",
-      "equest\022\022\n\ntable_name\030\001 \001(\t\022\022\n\nindex_name" +
-      "\030\002 \001(\t\022X\n\016columns_to_get\030\003 \001(\0132@.com.ali" +
-      "cloud.openservices.tablestore.core.proto" +
-      "col.ColumnsToGet\022\024\n\014search_query\030\004 \001(\014\022\026" +
-      "\n\016routing_values\030\005 \003(\014\022\022\n\ntimeout_ms\030\006 \001" +
-      "(\005\"\201\001\n\016SearchResponse\022\022\n\ntotal_hits\030\001 \001(" +
-      "\003\022\014\n\004rows\030\002 \003(\014\022\030\n\020is_all_succeeded\030\003 \001(" +
-      "\010\022\022\n\nnext_token\030\006 \001(\014\022\014\n\004aggs\030\007 \001(\014\022\021\n\tg" +
-      "roup_bys\030\010 \001(\014\"n\n\rDateTimeValue\022\r\n\005value" +
-      "\030\001 \001(\005\022N\n\004unit\030\002 \001(\0162@.com.alicloud.open",
-      "services.tablestore.core.protocol.DateTi" +
-      "meUnit\"K\n\033SingleWordAnalyzerParameter\022\026\n" +
-      "\016case_sensitive\030\001 \001(\010\022\024\n\014delimit_word\030\002 " +
-      "\001(\010\"+\n\026SplitAnalyzerParameter\022\021\n\tdelimit" +
-      "er\030\001 \001(\t\">\n\026FuzzyAnalyzerParameter\022\021\n\tmi" +
-      "n_chars\030\001 \001(\005\022\021\n\tmax_chars\030\002 \001(\005\"\345\003\n\013Fie" +
-      "ldSchema\022\022\n\nfield_name\030\001 \001(\t\022Q\n\nfield_ty" +
-      "pe\030\002 \001(\0162=.com.alicloud.openservices.tab" +
-      "lestore.core.protocol.FieldType\022W\n\rindex" +
-      "_options\030\003 \001(\0162@.com.alicloud.openservic",
-      "es.tablestore.core.protocol.IndexOptions" +
-      "\022\020\n\010analyzer\030\004 \001(\t\022\r\n\005index\030\005 \001(\010\022\024\n\014sor" +
-      "t_and_agg\030\006 \001(\010\022\r\n\005store\030\007 \001(\010\022V\n\rfield_" +
-      "schemas\030\010 \003(\0132?.com.alicloud.openservice" +
-      "s.tablestore.core.protocol.FieldSchema\022\020" +
-      "\n\010is_array\030\t \001(\010\022\032\n\022analyzer_parameter\030\n" +
-      " \001(\014\022\030\n\020is_virtual_field\030\013 \001(\010\022\032\n\022source" +
-      "_field_names\030\014 \003(\t\022\024\n\014date_formats\030\r \003(\t" +
-      "\"\214\002\n\013IndexSchema\022V\n\rfield_schemas\030\001 \003(\0132" +
-      "?.com.alicloud.openservices.tablestore.c",
-      "ore.protocol.FieldSchema\022W\n\rindex_settin" +
-      "g\030\002 \001(\0132@.com.alicloud.openservices.tabl" +
-      "estore.core.protocol.IndexSetting\022L\n\nind" +
-      "ex_sort\030\003 \001(\01328.com.alicloud.openservice" +
-      "s.tablestore.core.protocol.Sort\"`\n\014Index" +
-      "Setting\022\030\n\020number_of_shards\030\001 \001(\005\022\026\n\016rou" +
-      "ting_fields\030\002 \003(\t\022\036\n\026routing_partition_s" +
-      "ize\030\003 \001(\005\"\304\001\n\030CreateSearchIndexRequest\022\022" +
-      "\n\ntable_name\030\001 \002(\t\022\022\n\nindex_name\030\002 \002(\t\022O" +
-      "\n\006schema\030\003 \001(\0132?.com.alicloud.openservic",
-      "es.tablestore.core.protocol.IndexSchema\022" +
-      "\031\n\021source_index_name\030\004 \001(\t\022\024\n\014time_to_li" +
-      "ve\030\005 \001(\005\"\033\n\031CreateSearchIndexResponse\"5\n" +
-      "\017QueryFlowWeight\022\022\n\nindex_name\030\001 \001(\t\022\016\n\006" +
-      "weight\030\002 \001(\005\"\323\001\n\030UpdateSearchIndexReques" +
-      "t\022\022\n\ntable_name\030\001 \001(\t\022\022\n\nindex_name\030\002 \001(" +
-      "\t\022\031\n\021switch_index_name\030\003 \001(\t\022^\n\021query_fl" +
-      "ow_weight\030\004 \003(\0132C.com.alicloud.openservi" +
-      "ces.tablestore.core.protocol.QueryFlowWe" +
-      "ight\022\024\n\014time_to_live\030\005 \001(\005\"\033\n\031UpdateSear",
-      "chIndexResponse\"3\n\tIndexInfo\022\022\n\ntable_na" +
-      "me\030\001 \001(\t\022\022\n\nindex_name\030\002 \001(\t\",\n\026ListSear" +
-      "chIndexRequest\022\022\n\ntable_name\030\001 \001(\t\"i\n\027Li" +
-      "stSearchIndexResponse\022N\n\007indices\030\001 \003(\0132=" +
-      ".com.alicloud.openservices.tablestore.co" +
-      "re.protocol.IndexInfo\"B\n\030DeleteSearchInd" +
-      "exRequest\022\022\n\ntable_name\030\001 \001(\t\022\022\n\nindex_n" +
-      "ame\030\002 \001(\t\"\033\n\031DeleteSearchIndexResponse\"}" +
-      "\n\010SyncStat\022Q\n\nsync_phase\030\001 \001(\0162=.com.ali" +
-      "cloud.openservices.tablestore.core.proto",
-      "col.SyncPhase\022\036\n\026current_sync_timestamp\030" +
-      "\002 \001(\003\"d\n\014MeteringInfo\022\024\n\014storage_size\030\001 " +
-      "\001(\003\022\021\n\trow_count\030\002 \001(\003\022\030\n\020reserved_read_" +
-      "cu\030\003 \001(\003\022\021\n\ttimestamp\030\004 \001(\003\"D\n\032DescribeS" +
-      "earchIndexRequest\022\022\n\ntable_name\030\001 \001(\t\022\022\n" +
-      "\nindex_name\030\002 \001(\t\"\277\003\n\033DescribeSearchInde" +
-      "xResponse\022O\n\006schema\030\001 \001(\0132?.com.alicloud" +
-      ".openservices.tablestore.core.protocol.I" +
-      "ndexSchema\022O\n\tsync_stat\030\002 \001(\0132<.com.alic" +
-      "loud.openservices.tablestore.core.protoc",
-      "ol.SyncStat\022W\n\rmetering_info\030\003 \001(\0132@.com" +
+      "e.protocol.ColumnReturnType\022\024\n\014column_na" +
+      "mes\030\002 \003(\t\"\323\001\n\rSearchRequest\022\022\n\ntable_nam" +
+      "e\030\001 \001(\t\022\022\n\nindex_name\030\002 \001(\t\022X\n\016columns_t" +
+      "o_get\030\003 \001(\0132@.com.alicloud.openservices." +
+      "tablestore.core.protocol.ColumnsToGet\022\024\n" +
+      "\014search_query\030\004 \001(\014\022\026\n\016routing_values\030\005 " +
+      "\003(\014\022\022\n\ntimeout_ms\030\006 \001(\005\"\216\003\n\016SearchRespon" +
+      "se\022\022\n\ntotal_hits\030\001 \001(\003\022\014\n\004rows\030\002 \003(\014\022\030\n\020" +
+      "is_all_succeeded\030\003 \001(\010\022R\n\013search_hits\030\005 ",
+      "\003(\0132=.com.alicloud.openservices.tablesto" +
+      "re.core.protocol.SearchHit\022\022\n\nnext_token" +
+      "\030\006 \001(\014\022\014\n\004aggs\030\007 \001(\014\022\021\n\tgroup_bys\030\010 \001(\014\022" +
+      "V\n\010consumed\030\t \001(\0132D.com.alicloud.openser" +
+      "vices.tablestore.core.protocol.ConsumedC" +
+      "apacity\022_\n\021reserved_consumed\030\n \001(\0132D.com" +
       ".alicloud.openservices.tablestore.core.p" +
-      "rotocol.MeteringInfo\022\032\n\022brother_index_na" +
-      "me\030\004 \001(\t\022^\n\021query_flow_weight\030\005 \003(\0132C.co" +
-      "m.alicloud.openservices.tablestore.core." +
-      "protocol.QueryFlowWeight\022\023\n\013create_time\030" +
-      "\006 \001(\003\022\024\n\014time_to_live\030\007 \001(\005\"\272\001\n\tScanQuer" +
-      "y\022H\n\005query\030\001 \001(\01329.com.alicloud.openserv" +
-      "ices.tablestore.core.protocol.Query\022\r\n\005l" +
-      "imit\030\002 \001(\005\022\022\n\nalive_time\030\003 \001(\005\022\r\n\005token\030",
-      "\004 \001(\014\022\033\n\023current_parallel_id\030\005 \001(\005\022\024\n\014ma" +
-      "x_parallel\030\006 \001(\005\"\222\002\n\023ParallelScanRequest" +
-      "\022\022\n\ntable_name\030\001 \001(\t\022\022\n\nindex_name\030\002 \001(\t" +
-      "\022X\n\016columns_to_get\030\003 \001(\0132@.com.alicloud." +
-      "openservices.tablestore.core.protocol.Co" +
-      "lumnsToGet\022\022\n\nsession_id\030\004 \001(\014\022Q\n\nscan_q" +
-      "uery\030\005 \001(\0132=.com.alicloud.openservices.t" +
-      "ablestore.core.protocol.ScanQuery\022\022\n\ntim" +
-      "eout_ms\030\006 \001(\005\"8\n\024ParallelScanResponse\022\014\n" +
-      "\004rows\030\001 \003(\014\022\022\n\nnext_token\030\002 \001(\014*\226\002\n\007AggT",
-      "ype\022\013\n\007AVG_AGG\020\001\022\023\n\017CARDINALITY_AGG\020\002\022\013\n" +
-      "\007MAX_AGG\020\003\022\013\n\007MIN_AGG\020\004\022\013\n\007SUM_AGG\020\005\022\r\n\t" +
-      "TERMS_AGG\020\006\022\016\n\nFILTER_AGG\020\007\022\016\n\nNESTED_AG" +
-      "G\020\010\022\022\n\016GEO_BOUNDS_AGG\020\t\022\024\n\020GEO_DISTANCE_" +
-      "AGG\020\n\022\r\n\tSTATS_AGG\020\013\022\026\n\022EXTENDED_STATS_A" +
-      "GG\020\014\022\023\n\017PERCENTILES_AGG\020\r\022\030\n\024PERCENTILE_" +
-      "RANKS_AGG\020\016\022\023\n\017VALUE_COUNT_AGG\020\017*\223\001\n\017Agg" +
-      "regationType\022\013\n\007AGG_AVG\020\001\022\026\n\022AGG_DISTINC" +
-      "T_COUNT\020\006\022\013\n\007AGG_MAX\020\002\022\013\n\007AGG_MIN\020\003\022\013\n\007A" +
-      "GG_SUM\020\004\022\r\n\tAGG_COUNT\020\005\022\020\n\014AGG_TOP_ROWS\020",
-      "\007\022\023\n\017AGG_PERCENTILES\020\010*\232\001\n\013GroupByType\022\022" +
-      "\n\016GROUP_BY_FIELD\020\001\022\022\n\016GROUP_BY_RANGE\020\002\022\023" +
-      "\n\017GROUP_BY_FILTER\020\003\022\031\n\025GROUP_BY_GEO_DIST" +
-      "ANCE\020\004\022\026\n\022GROUP_BY_HISTOGRAM\020\005\022\033\n\027GROUP_" +
-      "BY_DATE_HISTOGRAM\020\006*\321\002\n\tQueryType\022\017\n\013MAT" +
-      "CH_QUERY\020\001\022\026\n\022MATCH_PHRASE_QUERY\020\002\022\016\n\nTE" +
-      "RM_QUERY\020\003\022\017\n\013RANGE_QUERY\020\004\022\020\n\014PREFIX_QU" +
-      "ERY\020\005\022\016\n\nBOOL_QUERY\020\006\022\025\n\021CONST_SCORE_QUE" +
-      "RY\020\007\022\030\n\024FUNCTION_SCORE_QUERY\020\010\022\020\n\014NESTED" +
-      "_QUERY\020\t\022\022\n\016WILDCARD_QUERY\020\n\022\023\n\017MATCH_AL",
-      "L_QUERY\020\013\022\032\n\026GEO_BOUNDING_BOX_QUERY\020\014\022\026\n" +
-      "\022GEO_DISTANCE_QUERY\020\r\022\025\n\021GEO_POLYGON_QUE" +
-      "RY\020\016\022\017\n\013TERMS_QUERY\020\017\022\020\n\014EXISTS_QUERY\020\020*" +
-      " \n\rQueryOperator\022\006\n\002OR\020\001\022\007\n\003AND\020\002*r\n\tSco" +
-      "reMode\022\023\n\017SCORE_MODE_NONE\020\001\022\022\n\016SCORE_MOD" +
-      "E_AVG\020\002\022\022\n\016SCORE_MODE_MAX\020\003\022\024\n\020SCORE_MOD" +
-      "E_TOTAL\020\004\022\022\n\016SCORE_MODE_MIN\020\005*4\n\tSortOrd" +
-      "er\022\022\n\016SORT_ORDER_ASC\020\000\022\023\n\017SORT_ORDER_DES" +
-      "C\020\001*C\n\010SortMode\022\021\n\rSORT_MODE_MIN\020\000\022\021\n\rSO" +
-      "RT_MODE_MAX\020\001\022\021\n\rSORT_MODE_AVG\020\002*?\n\017GeoD",
-      "istanceType\022\024\n\020GEO_DISTANCE_ARC\020\000\022\026\n\022GEO" +
-      "_DISTANCE_PLANE\020\001*d\n\020ColumnReturnType\022\016\n" +
-      "\nRETURN_ALL\020\001\022\024\n\020RETURN_SPECIFIED\020\002\022\017\n\013R" +
-      "ETURN_NONE\020\003\022\031\n\025RETURN_ALL_FROM_INDEX\020\004*" +
-      "?\n\014IndexOptions\022\010\n\004DOCS\020\001\022\t\n\005FREQS\020\002\022\r\n\t" +
-      "POSITIONS\020\003\022\013\n\007OFFSETS\020\004*j\n\tFieldType\022\010\n" +
-      "\004LONG\020\001\022\n\n\006DOUBLE\020\002\022\013\n\007BOOLEAN\020\003\022\013\n\007KEYW" +
-      "ORD\020\004\022\010\n\004TEXT\020\005\022\n\n\006NESTED\020\006\022\r\n\tGEO_POINT" +
-      "\020\007\022\010\n\004DATE\020\010*j\n\014DateTimeUnit\022\010\n\004YEAR\020\001\022\020" +
-      "\n\014QUARTER_YEAR\020\002\022\t\n\005MONTH\020\003\022\010\n\004WEEK\020\004\022\007\n",
-      "\003DAY\020\005\022\010\n\004HOUR\020\006\022\n\n\006MINUTE\020\007\022\n\n\006SECOND\020\010" +
-      "*\037\n\tSyncPhase\022\010\n\004FULL\020\001\022\010\n\004INCR\020\002"
+      "rotocol.ConsumedCapacity\"\363\001\n\tSearchHit\022\r" +
+      "\n\005score\030\003 \001(\001\022]\n\020highlight_result\030\004 \001(\0132" +
+      "C.com.alicloud.openservices.tablestore.c",
+      "ore.protocol.HighlightResult\022]\n\021search_i" +
+      "nner_hits\030\005 \003(\0132B.com.alicloud.openservi" +
+      "ces.tablestore.core.protocol.SearchInner" +
+      "Hit\022\031\n\021nested_doc_offset\030\006 \001(\005\"r\n\016Search" +
+      "InnerHit\022\014\n\004path\030\001 \001(\t\022R\n\013search_hits\030\002 " +
+      "\003(\0132=.com.alicloud.openservices.tablesto" +
+      "re.core.protocol.SearchHit\"o\n\017HighlightR" +
+      "esult\022\\\n\020highlight_fields\030\001 \003(\0132B.com.al" +
+      "icloud.openservices.tablestore.core.prot" +
+      "ocol.HighlightField\"=\n\016HighlightField\022\022\n",
+      "\nfield_name\030\001 \001(\t\022\027\n\017field_fragments\030\002 \003" +
+      "(\t\"n\n\rDateTimeValue\022\r\n\005value\030\001 \001(\005\022N\n\004un" +
+      "it\030\002 \001(\0162@.com.alicloud.openservices.tab" +
+      "lestore.core.protocol.DateTimeUnit\"K\n\033Si" +
+      "ngleWordAnalyzerParameter\022\026\n\016case_sensit" +
+      "ive\030\001 \001(\010\022\024\n\014delimit_word\030\002 \001(\010\"+\n\026Split" +
+      "AnalyzerParameter\022\021\n\tdelimiter\030\001 \001(\t\">\n\026" +
+      "FuzzyAnalyzerParameter\022\021\n\tmin_chars\030\001 \001(" +
+      "\005\022\021\n\tmax_chars\030\002 \001(\005\"\335\004\n\013FieldSchema\022\022\n\n" +
+      "field_name\030\001 \001(\t\022Q\n\nfield_type\030\002 \001(\0162=.c",
+      "om.alicloud.openservices.tablestore.core" +
+      ".protocol.FieldType\022W\n\rindex_options\030\003 \001" +
+      "(\0162@.com.alicloud.openservices.tablestor" +
+      "e.core.protocol.IndexOptions\022\020\n\010analyzer" +
+      "\030\004 \001(\t\022\r\n\005index\030\005 \001(\010\022\024\n\014sort_and_agg\030\006 " +
+      "\001(\010\022\r\n\005store\030\007 \001(\010\022V\n\rfield_schemas\030\010 \003(" +
+      "\0132?.com.alicloud.openservices.tablestore" +
+      ".core.protocol.FieldSchema\022\020\n\010is_array\030\t" +
+      " \001(\010\022\032\n\022analyzer_parameter\030\n \001(\014\022\030\n\020is_v" +
+      "irtual_field\030\013 \001(\010\022\032\n\022source_field_names",
+      "\030\014 \003(\t\022\024\n\014date_formats\030\r \003(\t\022\033\n\023enable_h" +
+      "ighlighting\030\016 \001(\010\022Y\n\016vector_options\030\017 \001(" +
+      "\0132A.com.alicloud.openservices.tablestore" +
+      ".core.protocol.VectorOptions\"\306\002\n\rVectorO" +
+      "ptions\022U\n\tdata_type\030\001 \001(\0162B.com.alicloud" +
+      ".openservices.tablestore.core.protocol.V" +
+      "ectorDataType\022\021\n\tdimension\030\002 \001(\005\022Y\n\013metr" +
+      "ic_type\030\003 \001(\0162D.com.alicloud.openservice" +
+      "s.tablestore.core.protocol.VectorMetricT" +
+      "ype\022W\n\nindex_type\030\004 \001(\0162C.com.alicloud.o",
+      "penservices.tablestore.core.protocol.Vec" +
+      "torIndexType\022\027\n\017index_parameter\030\005 \001(\014\"8\n" +
+      "\022HNSWIndexParameter\022\t\n\001m\030\001 \001(\005\022\027\n\017ef_con" +
+      "struction\030\002 \001(\005\"\214\002\n\013IndexSchema\022V\n\rfield" +
+      "_schemas\030\001 \003(\0132?.com.alicloud.openservic" +
+      "es.tablestore.core.protocol.FieldSchema\022" +
+      "W\n\rindex_setting\030\002 \001(\0132@.com.alicloud.op" +
+      "enservices.tablestore.core.protocol.Inde" +
+      "xSetting\022L\n\nindex_sort\030\003 \001(\01328.com.alicl" +
+      "oud.openservices.tablestore.core.protoco",
+      "l.Sort\"`\n\014IndexSetting\022\030\n\020number_of_shar" +
+      "ds\030\001 \001(\005\022\026\n\016routing_fields\030\002 \003(\t\022\036\n\026rout" +
+      "ing_partition_size\030\003 \001(\005\"\304\001\n\030CreateSearc" +
+      "hIndexRequest\022\022\n\ntable_name\030\001 \002(\t\022\022\n\nind" +
+      "ex_name\030\002 \002(\t\022O\n\006schema\030\003 \001(\0132?.com.alic" +
+      "loud.openservices.tablestore.core.protoc" +
+      "ol.IndexSchema\022\031\n\021source_index_name\030\004 \001(" +
+      "\t\022\024\n\014time_to_live\030\005 \001(\005\"\033\n\031CreateSearchI" +
+      "ndexResponse\"5\n\017QueryFlowWeight\022\022\n\nindex" +
+      "_name\030\001 \001(\t\022\016\n\006weight\030\002 \001(\005\"\323\001\n\030UpdateSe",
+      "archIndexRequest\022\022\n\ntable_name\030\001 \001(\t\022\022\n\n" +
+      "index_name\030\002 \001(\t\022\031\n\021switch_index_name\030\003 " +
+      "\001(\t\022^\n\021query_flow_weight\030\004 \003(\0132C.com.ali" +
+      "cloud.openservices.tablestore.core.proto" +
+      "col.QueryFlowWeight\022\024\n\014time_to_live\030\005 \001(" +
+      "\005\"\033\n\031UpdateSearchIndexResponse\"3\n\tIndexI" +
+      "nfo\022\022\n\ntable_name\030\001 \001(\t\022\022\n\nindex_name\030\002 " +
+      "\001(\t\",\n\026ListSearchIndexRequest\022\022\n\ntable_n" +
+      "ame\030\001 \001(\t\"i\n\027ListSearchIndexResponse\022N\n\007" +
+      "indices\030\001 \003(\0132=.com.alicloud.openservice",
+      "s.tablestore.core.protocol.IndexInfo\"B\n\030" +
+      "DeleteSearchIndexRequest\022\022\n\ntable_name\030\001" +
+      " \001(\t\022\022\n\nindex_name\030\002 \001(\t\"\033\n\031DeleteSearch" +
+      "IndexResponse\"}\n\010SyncStat\022Q\n\nsync_phase\030" +
+      "\001 \001(\0162=.com.alicloud.openservices.tables" +
+      "tore.core.protocol.SyncPhase\022\036\n\026current_" +
+      "sync_timestamp\030\002 \001(\003\"d\n\014MeteringInfo\022\024\n\014" +
+      "storage_size\030\001 \001(\003\022\021\n\trow_count\030\002 \001(\003\022\030\n" +
+      "\020reserved_read_cu\030\003 \001(\003\022\021\n\ttimestamp\030\004 \001" +
+      "(\003\"D\n\032DescribeSearchIndexRequest\022\022\n\ntabl",
+      "e_name\030\001 \001(\t\022\022\n\nindex_name\030\002 \001(\t\"\226\004\n\033Des" +
+      "cribeSearchIndexResponse\022O\n\006schema\030\001 \001(\013" +
+      "2?.com.alicloud.openservices.tablestore." +
+      "core.protocol.IndexSchema\022O\n\tsync_stat\030\002" +
+      " \001(\0132<.com.alicloud.openservices.tablest" +
+      "ore.core.protocol.SyncStat\022W\n\rmetering_i" +
+      "nfo\030\003 \001(\0132@.com.alicloud.openservices.ta" +
+      "blestore.core.protocol.MeteringInfo\022\032\n\022b" +
+      "rother_index_name\030\004 \001(\t\022^\n\021query_flow_we" +
+      "ight\030\005 \003(\0132C.com.alicloud.openservices.t",
+      "ablestore.core.protocol.QueryFlowWeight\022" +
+      "\023\n\013create_time\030\006 \001(\003\022\024\n\014time_to_live\030\007 \001" +
+      "(\005\022U\n\014index_status\030\010 \001(\0132?.com.alicloud." +
+      "openservices.tablestore.core.protocol.In" +
+      "dexStatus\"~\n\013IndexStatus\022S\n\006status\030\001 \001(\016" +
+      "2C.com.alicloud.openservices.tablestore." +
+      "core.protocol.IndexStatusEnum\022\032\n\022status_" +
+      "description\030\002 \001(\t\"\272\001\n\tScanQuery\022H\n\005query" +
+      "\030\001 \001(\01329.com.alicloud.openservices.table" +
+      "store.core.protocol.Query\022\r\n\005limit\030\002 \001(\005",
+      "\022\022\n\nalive_time\030\003 \001(\005\022\r\n\005token\030\004 \001(\014\022\033\n\023c" +
+      "urrent_parallel_id\030\005 \001(\005\022\024\n\014max_parallel" +
+      "\030\006 \001(\005\"\222\002\n\023ParallelScanRequest\022\022\n\ntable_" +
+      "name\030\001 \001(\t\022\022\n\nindex_name\030\002 \001(\t\022X\n\016column" +
+      "s_to_get\030\003 \001(\0132@.com.alicloud.openservic" +
+      "es.tablestore.core.protocol.ColumnsToGet" +
+      "\022\022\n\nsession_id\030\004 \001(\014\022Q\n\nscan_query\030\005 \001(\013" +
+      "2=.com.alicloud.openservices.tablestore." +
+      "core.protocol.ScanQuery\022\022\n\ntimeout_ms\030\006 " +
+      "\001(\005\"8\n\024ParallelScanResponse\022\014\n\004rows\030\001 \003(",
+      "\014\022\022\n\nnext_token\030\002 \001(\014*\226\002\n\007AggType\022\013\n\007AVG" +
+      "_AGG\020\001\022\023\n\017CARDINALITY_AGG\020\002\022\013\n\007MAX_AGG\020\003" +
+      "\022\013\n\007MIN_AGG\020\004\022\013\n\007SUM_AGG\020\005\022\r\n\tTERMS_AGG\020" +
+      "\006\022\016\n\nFILTER_AGG\020\007\022\016\n\nNESTED_AGG\020\010\022\022\n\016GEO" +
+      "_BOUNDS_AGG\020\t\022\024\n\020GEO_DISTANCE_AGG\020\n\022\r\n\tS" +
+      "TATS_AGG\020\013\022\026\n\022EXTENDED_STATS_AGG\020\014\022\023\n\017PE" +
+      "RCENTILES_AGG\020\r\022\030\n\024PERCENTILE_RANKS_AGG\020" +
+      "\016\022\023\n\017VALUE_COUNT_AGG\020\017*\223\001\n\017AggregationTy" +
+      "pe\022\013\n\007AGG_AVG\020\001\022\026\n\022AGG_DISTINCT_COUNT\020\006\022" +
+      "\013\n\007AGG_MAX\020\002\022\013\n\007AGG_MIN\020\003\022\013\n\007AGG_SUM\020\004\022\r",
+      "\n\tAGG_COUNT\020\005\022\020\n\014AGG_TOP_ROWS\020\007\022\023\n\017AGG_P" +
+      "ERCENTILES\020\010*\232\001\n\013GroupByType\022\022\n\016GROUP_BY" +
+      "_FIELD\020\001\022\022\n\016GROUP_BY_RANGE\020\002\022\023\n\017GROUP_BY" +
+      "_FILTER\020\003\022\031\n\025GROUP_BY_GEO_DISTANCE\020\004\022\026\n\022" +
+      "GROUP_BY_HISTOGRAM\020\005\022\033\n\027GROUP_BY_DATE_HI" +
+      "STOGRAM\020\006*\347\002\n\tQueryType\022\017\n\013MATCH_QUERY\020\001" +
+      "\022\026\n\022MATCH_PHRASE_QUERY\020\002\022\016\n\nTERM_QUERY\020\003" +
+      "\022\017\n\013RANGE_QUERY\020\004\022\020\n\014PREFIX_QUERY\020\005\022\016\n\nB" +
+      "OOL_QUERY\020\006\022\025\n\021CONST_SCORE_QUERY\020\007\022\030\n\024FU" +
+      "NCTION_SCORE_QUERY\020\010\022\020\n\014NESTED_QUERY\020\t\022\022",
+      "\n\016WILDCARD_QUERY\020\n\022\023\n\017MATCH_ALL_QUERY\020\013\022" +
+      "\032\n\026GEO_BOUNDING_BOX_QUERY\020\014\022\026\n\022GEO_DISTA" +
+      "NCE_QUERY\020\r\022\025\n\021GEO_POLYGON_QUERY\020\016\022\017\n\013TE" +
+      "RMS_QUERY\020\017\022\020\n\014EXISTS_QUERY\020\020\022\024\n\020KNN_VEC" +
+      "TOR_QUERY\020\021* \n\rQueryOperator\022\006\n\002OR\020\001\022\007\n\003" +
+      "AND\020\002*r\n\tScoreMode\022\023\n\017SCORE_MODE_NONE\020\001\022" +
+      "\022\n\016SCORE_MODE_AVG\020\002\022\022\n\016SCORE_MODE_MAX\020\003\022" +
+      "\024\n\020SCORE_MODE_TOTAL\020\004\022\022\n\016SCORE_MODE_MIN\020" +
+      "\005*4\n\tSortOrder\022\022\n\016SORT_ORDER_ASC\020\000\022\023\n\017SO" +
+      "RT_ORDER_DESC\020\001*C\n\010SortMode\022\021\n\rSORT_MODE",
+      "_MIN\020\000\022\021\n\rSORT_MODE_MAX\020\001\022\021\n\rSORT_MODE_A" +
+      "VG\020\002*?\n\017GeoDistanceType\022\024\n\020GEO_DISTANCE_" +
+      "ARC\020\000\022\026\n\022GEO_DISTANCE_PLANE\020\001*6\n\026Highlig" +
+      "htFragmentOrder\022\021\n\rTEXT_SEQUENCE\020\001\022\t\n\005SC" +
+      "ORE\020\002*1\n\020HighlightEncoder\022\016\n\nPLAIN_MODE\020" +
+      "\001\022\r\n\tHTML_MODE\020\002*d\n\020ColumnReturnType\022\016\n\n" +
+      "RETURN_ALL\020\001\022\024\n\020RETURN_SPECIFIED\020\002\022\017\n\013RE" +
+      "TURN_NONE\020\003\022\031\n\025RETURN_ALL_FROM_INDEX\020\004*?" +
+      "\n\014IndexOptions\022\010\n\004DOCS\020\001\022\t\n\005FREQS\020\002\022\r\n\tP" +
+      "OSITIONS\020\003\022\013\n\007OFFSETS\020\004*v\n\tFieldType\022\010\n\004",
+      "LONG\020\001\022\n\n\006DOUBLE\020\002\022\013\n\007BOOLEAN\020\003\022\013\n\007KEYWO" +
+      "RD\020\004\022\010\n\004TEXT\020\005\022\n\n\006NESTED\020\006\022\r\n\tGEO_POINT\020" +
+      "\007\022\010\n\004DATE\020\010\022\n\n\006VECTOR\020\t*{\n\014DateTimeUnit\022" +
+      "\010\n\004YEAR\020\001\022\020\n\014QUARTER_YEAR\020\002\022\t\n\005MONTH\020\003\022\010" +
+      "\n\004WEEK\020\004\022\007\n\003DAY\020\005\022\010\n\004HOUR\020\006\022\n\n\006MINUTE\020\007\022" +
+      "\n\n\006SECOND\020\010\022\017\n\013MILLISECOND\020\t*!\n\016VectorDa" +
+      "taType\022\017\n\013VD_FLOAT_32\020\002*G\n\020VectorMetricT" +
+      "ype\022\020\n\014VM_EUCLIDEAN\020\000\022\r\n\tVM_COSINE\020\001\022\022\n\016" +
+      "VM_DOT_PRODUCT\020\002*\036\n\017VectorIndexType\022\013\n\007V" +
+      "I_HNSW\020\001*\037\n\tSyncPhase\022\010\n\004FULL\020\001\022\010\n\004INCR\020",
+      "\002*7\n\017IndexStatusEnum\022\013\n\007PENDING\020\001\022\n\n\006FAI" +
+      "LED\020\002\022\013\n\007RUNNING\020\003"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
       new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -81833,7 +91010,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
           internal_static_com_alicloud_openservices_tablestore_core_protocol_GroupByDateHistogram_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_GroupByDateHistogram_descriptor,
-              new java.lang.String[] { "FieldName", "Interval", "FieldRange", "Missing", "MinDocCount", "TimeZone", "Sort", "SubAggs", "SubGroupBys", },
+              new java.lang.String[] { "FieldName", "Interval", "FieldRange", "Missing", "MinDocCount", "TimeZone", "Sort", "SubAggs", "SubGroupBys", "Offset", },
               com.alicloud.openservices.tablestore.core.protocol.Search.GroupByDateHistogram.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.GroupByDateHistogram.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_GroupByHistogram_descriptor =
@@ -81841,7 +91018,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
           internal_static_com_alicloud_openservices_tablestore_core_protocol_GroupByHistogram_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_GroupByHistogram_descriptor,
-              new java.lang.String[] { "FieldName", "Interval", "Missing", "MinDocCount", "Sort", "FieldRange", "SubAggs", "SubGroupBys", },
+              new java.lang.String[] { "FieldName", "Interval", "Missing", "MinDocCount", "Sort", "FieldRange", "SubAggs", "SubGroupBys", "Offset", },
               com.alicloud.openservices.tablestore.core.protocol.Search.GroupByHistogram.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.GroupByHistogram.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_GroupKeySort_descriptor =
@@ -82225,11 +91402,19 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
           internal_static_com_alicloud_openservices_tablestore_core_protocol_NestedQuery_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_NestedQuery_descriptor,
-              new java.lang.String[] { "Path", "Query", "ScoreMode", "Weight", },
+              new java.lang.String[] { "Path", "Query", "ScoreMode", "Weight", "InnerHits", },
               com.alicloud.openservices.tablestore.core.protocol.Search.NestedQuery.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.NestedQuery.Builder.class);
-          internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoBoundingBoxQuery_descriptor =
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_InnerHits_descriptor =
             getDescriptor().getMessageTypes().get(103);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_InnerHits_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_com_alicloud_openservices_tablestore_core_protocol_InnerHits_descriptor,
+              new java.lang.String[] { "Sort", "Offset", "Limit", "Highlight", },
+              com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.class,
+              com.alicloud.openservices.tablestore.core.protocol.Search.InnerHits.Builder.class);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoBoundingBoxQuery_descriptor =
+            getDescriptor().getMessageTypes().get(104);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoBoundingBoxQuery_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoBoundingBoxQuery_descriptor,
@@ -82237,7 +91422,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.GeoBoundingBoxQuery.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceQuery_descriptor =
-            getDescriptor().getMessageTypes().get(104);
+            getDescriptor().getMessageTypes().get(105);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceQuery_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceQuery_descriptor,
@@ -82245,7 +91430,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceQuery.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoPolygonQuery_descriptor =
-            getDescriptor().getMessageTypes().get(105);
+            getDescriptor().getMessageTypes().get(106);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoPolygonQuery_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoPolygonQuery_descriptor,
@@ -82253,15 +91438,23 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.GeoPolygonQuery.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_ExistsQuery_descriptor =
-            getDescriptor().getMessageTypes().get(106);
+            getDescriptor().getMessageTypes().get(107);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_ExistsQuery_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_ExistsQuery_descriptor,
               new java.lang.String[] { "FieldName", },
               com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.ExistsQuery.Builder.class);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_KnnVectorQuery_descriptor =
+            getDescriptor().getMessageTypes().get(108);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_KnnVectorQuery_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_com_alicloud_openservices_tablestore_core_protocol_KnnVectorQuery_descriptor,
+              new java.lang.String[] { "FieldName", "TopK", "Float32QueryVector", "Filter", "Weight", },
+              com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery.class,
+              com.alicloud.openservices.tablestore.core.protocol.Search.KnnVectorQuery.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_Query_descriptor =
-            getDescriptor().getMessageTypes().get(107);
+            getDescriptor().getMessageTypes().get(109);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_Query_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_Query_descriptor,
@@ -82269,7 +91462,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.Query.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.Query.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_Collapse_descriptor =
-            getDescriptor().getMessageTypes().get(108);
+            getDescriptor().getMessageTypes().get(110);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_Collapse_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_Collapse_descriptor,
@@ -82277,7 +91470,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.Collapse.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_NestedFilter_descriptor =
-            getDescriptor().getMessageTypes().get(109);
+            getDescriptor().getMessageTypes().get(111);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_NestedFilter_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_NestedFilter_descriptor,
@@ -82285,7 +91478,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.NestedFilter.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_ScoreSort_descriptor =
-            getDescriptor().getMessageTypes().get(110);
+            getDescriptor().getMessageTypes().get(112);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_ScoreSort_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_ScoreSort_descriptor,
@@ -82293,7 +91486,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.ScoreSort.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_PrimaryKeySort_descriptor =
-            getDescriptor().getMessageTypes().get(111);
+            getDescriptor().getMessageTypes().get(113);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_PrimaryKeySort_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_PrimaryKeySort_descriptor,
@@ -82301,15 +91494,23 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.PrimaryKeySort.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSort_descriptor =
-            getDescriptor().getMessageTypes().get(112);
+            getDescriptor().getMessageTypes().get(114);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSort_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSort_descriptor,
               new java.lang.String[] { "FieldName", "Order", "Mode", "NestedFilter", "MissingValue", "MissingField", },
               com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.FieldSort.Builder.class);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_DocSort_descriptor =
+            getDescriptor().getMessageTypes().get(115);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_DocSort_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_com_alicloud_openservices_tablestore_core_protocol_DocSort_descriptor,
+              new java.lang.String[] { "Order", },
+              com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.class,
+              com.alicloud.openservices.tablestore.core.protocol.Search.DocSort.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceSort_descriptor =
-            getDescriptor().getMessageTypes().get(113);
+            getDescriptor().getMessageTypes().get(116);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceSort_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_GeoDistanceSort_descriptor,
@@ -82317,15 +91518,15 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.GeoDistanceSort.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_Sorter_descriptor =
-            getDescriptor().getMessageTypes().get(114);
+            getDescriptor().getMessageTypes().get(117);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_Sorter_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_Sorter_descriptor,
-              new java.lang.String[] { "FieldSort", "GeoDistanceSort", "ScoreSort", "PkSort", },
+              new java.lang.String[] { "FieldSort", "GeoDistanceSort", "ScoreSort", "PkSort", "DocSort", },
               com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.Sorter.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_Sort_descriptor =
-            getDescriptor().getMessageTypes().get(115);
+            getDescriptor().getMessageTypes().get(118);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_Sort_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_Sort_descriptor,
@@ -82333,15 +91534,31 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.Sort.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.Sort.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchQuery_descriptor =
-            getDescriptor().getMessageTypes().get(116);
+            getDescriptor().getMessageTypes().get(119);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchQuery_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchQuery_descriptor,
-              new java.lang.String[] { "Offset", "Limit", "Query", "Collapse", "Sort", "GetTotalCount", "Token", "Aggs", "GroupBys", },
+              new java.lang.String[] { "Offset", "Limit", "Query", "Collapse", "Sort", "GetTotalCount", "Token", "Aggs", "GroupBys", "Highlight", },
               com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.SearchQuery.Builder.class);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_Highlight_descriptor =
+            getDescriptor().getMessageTypes().get(120);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_Highlight_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_com_alicloud_openservices_tablestore_core_protocol_Highlight_descriptor,
+              new java.lang.String[] { "HighlightParameters", "HighlightEncoder", },
+              com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.class,
+              com.alicloud.openservices.tablestore.core.protocol.Search.Highlight.Builder.class);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightParameter_descriptor =
+            getDescriptor().getMessageTypes().get(121);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightParameter_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightParameter_descriptor,
+              new java.lang.String[] { "FieldName", "NumberOfFragments", "FragmentSize", "PreTag", "PostTag", "FragmentsOrder", },
+              com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.class,
+              com.alicloud.openservices.tablestore.core.protocol.Search.HighlightParameter.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_ColumnsToGet_descriptor =
-            getDescriptor().getMessageTypes().get(117);
+            getDescriptor().getMessageTypes().get(122);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_ColumnsToGet_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_ColumnsToGet_descriptor,
@@ -82349,7 +91566,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.ColumnsToGet.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchRequest_descriptor =
-            getDescriptor().getMessageTypes().get(118);
+            getDescriptor().getMessageTypes().get(123);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchRequest_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchRequest_descriptor,
@@ -82357,15 +91574,47 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.SearchRequest.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchResponse_descriptor =
-            getDescriptor().getMessageTypes().get(119);
+            getDescriptor().getMessageTypes().get(124);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchResponse_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchResponse_descriptor,
-              new java.lang.String[] { "TotalHits", "Rows", "IsAllSucceeded", "NextToken", "Aggs", "GroupBys", },
+              new java.lang.String[] { "TotalHits", "Rows", "IsAllSucceeded", "SearchHits", "NextToken", "Aggs", "GroupBys", "Consumed", "ReservedConsumed", },
               com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.SearchResponse.Builder.class);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchHit_descriptor =
+            getDescriptor().getMessageTypes().get(125);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchHit_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchHit_descriptor,
+              new java.lang.String[] { "Score", "HighlightResult", "SearchInnerHits", "NestedDocOffset", },
+              com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.class,
+              com.alicloud.openservices.tablestore.core.protocol.Search.SearchHit.Builder.class);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchInnerHit_descriptor =
+            getDescriptor().getMessageTypes().get(126);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchInnerHit_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_com_alicloud_openservices_tablestore_core_protocol_SearchInnerHit_descriptor,
+              new java.lang.String[] { "Path", "SearchHits", },
+              com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.class,
+              com.alicloud.openservices.tablestore.core.protocol.Search.SearchInnerHit.Builder.class);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightResult_descriptor =
+            getDescriptor().getMessageTypes().get(127);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightResult_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightResult_descriptor,
+              new java.lang.String[] { "HighlightFields", },
+              com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.class,
+              com.alicloud.openservices.tablestore.core.protocol.Search.HighlightResult.Builder.class);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightField_descriptor =
+            getDescriptor().getMessageTypes().get(128);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightField_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_com_alicloud_openservices_tablestore_core_protocol_HighlightField_descriptor,
+              new java.lang.String[] { "FieldName", "FieldFragments", },
+              com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.class,
+              com.alicloud.openservices.tablestore.core.protocol.Search.HighlightField.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_DateTimeValue_descriptor =
-            getDescriptor().getMessageTypes().get(120);
+            getDescriptor().getMessageTypes().get(129);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_DateTimeValue_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_DateTimeValue_descriptor,
@@ -82373,7 +91622,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.DateTimeValue.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_SingleWordAnalyzerParameter_descriptor =
-            getDescriptor().getMessageTypes().get(121);
+            getDescriptor().getMessageTypes().get(130);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_SingleWordAnalyzerParameter_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_SingleWordAnalyzerParameter_descriptor,
@@ -82381,7 +91630,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.SingleWordAnalyzerParameter.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_SplitAnalyzerParameter_descriptor =
-            getDescriptor().getMessageTypes().get(122);
+            getDescriptor().getMessageTypes().get(131);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_SplitAnalyzerParameter_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_SplitAnalyzerParameter_descriptor,
@@ -82389,7 +91638,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.SplitAnalyzerParameter.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_FuzzyAnalyzerParameter_descriptor =
-            getDescriptor().getMessageTypes().get(123);
+            getDescriptor().getMessageTypes().get(132);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_FuzzyAnalyzerParameter_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_FuzzyAnalyzerParameter_descriptor,
@@ -82397,15 +91646,31 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.FuzzyAnalyzerParameter.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSchema_descriptor =
-            getDescriptor().getMessageTypes().get(124);
+            getDescriptor().getMessageTypes().get(133);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSchema_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_FieldSchema_descriptor,
-              new java.lang.String[] { "FieldName", "FieldType", "IndexOptions", "Analyzer", "Index", "SortAndAgg", "Store", "FieldSchemas", "IsArray", "AnalyzerParameter", "IsVirtualField", "SourceFieldNames", "DateFormats", },
+              new java.lang.String[] { "FieldName", "FieldType", "IndexOptions", "Analyzer", "Index", "SortAndAgg", "Store", "FieldSchemas", "IsArray", "AnalyzerParameter", "IsVirtualField", "SourceFieldNames", "DateFormats", "EnableHighlighting", "VectorOptions", },
               com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.FieldSchema.Builder.class);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_VectorOptions_descriptor =
+            getDescriptor().getMessageTypes().get(134);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_VectorOptions_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_com_alicloud_openservices_tablestore_core_protocol_VectorOptions_descriptor,
+              new java.lang.String[] { "DataType", "Dimension", "MetricType", "IndexType", "IndexParameter", },
+              com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.class,
+              com.alicloud.openservices.tablestore.core.protocol.Search.VectorOptions.Builder.class);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_HNSWIndexParameter_descriptor =
+            getDescriptor().getMessageTypes().get(135);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_HNSWIndexParameter_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_com_alicloud_openservices_tablestore_core_protocol_HNSWIndexParameter_descriptor,
+              new java.lang.String[] { "M", "EfConstruction", },
+              com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter.class,
+              com.alicloud.openservices.tablestore.core.protocol.Search.HNSWIndexParameter.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexSchema_descriptor =
-            getDescriptor().getMessageTypes().get(125);
+            getDescriptor().getMessageTypes().get(136);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexSchema_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexSchema_descriptor,
@@ -82413,7 +91678,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.IndexSchema.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.IndexSchema.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexSetting_descriptor =
-            getDescriptor().getMessageTypes().get(126);
+            getDescriptor().getMessageTypes().get(137);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexSetting_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexSetting_descriptor,
@@ -82421,7 +91686,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.IndexSetting.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.IndexSetting.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_CreateSearchIndexRequest_descriptor =
-            getDescriptor().getMessageTypes().get(127);
+            getDescriptor().getMessageTypes().get(138);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_CreateSearchIndexRequest_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_CreateSearchIndexRequest_descriptor,
@@ -82429,7 +91694,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.CreateSearchIndexRequest.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.CreateSearchIndexRequest.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_CreateSearchIndexResponse_descriptor =
-            getDescriptor().getMessageTypes().get(128);
+            getDescriptor().getMessageTypes().get(139);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_CreateSearchIndexResponse_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_CreateSearchIndexResponse_descriptor,
@@ -82437,7 +91702,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.CreateSearchIndexResponse.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.CreateSearchIndexResponse.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_QueryFlowWeight_descriptor =
-            getDescriptor().getMessageTypes().get(129);
+            getDescriptor().getMessageTypes().get(140);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_QueryFlowWeight_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_QueryFlowWeight_descriptor,
@@ -82445,7 +91710,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.QueryFlowWeight.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_UpdateSearchIndexRequest_descriptor =
-            getDescriptor().getMessageTypes().get(130);
+            getDescriptor().getMessageTypes().get(141);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_UpdateSearchIndexRequest_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_UpdateSearchIndexRequest_descriptor,
@@ -82453,7 +91718,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.UpdateSearchIndexRequest.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.UpdateSearchIndexRequest.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_UpdateSearchIndexResponse_descriptor =
-            getDescriptor().getMessageTypes().get(131);
+            getDescriptor().getMessageTypes().get(142);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_UpdateSearchIndexResponse_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_UpdateSearchIndexResponse_descriptor,
@@ -82461,7 +91726,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.UpdateSearchIndexResponse.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.UpdateSearchIndexResponse.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexInfo_descriptor =
-            getDescriptor().getMessageTypes().get(132);
+            getDescriptor().getMessageTypes().get(143);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexInfo_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexInfo_descriptor,
@@ -82469,7 +91734,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.IndexInfo.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.IndexInfo.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_ListSearchIndexRequest_descriptor =
-            getDescriptor().getMessageTypes().get(133);
+            getDescriptor().getMessageTypes().get(144);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_ListSearchIndexRequest_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_ListSearchIndexRequest_descriptor,
@@ -82477,7 +91742,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.ListSearchIndexRequest.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.ListSearchIndexRequest.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_ListSearchIndexResponse_descriptor =
-            getDescriptor().getMessageTypes().get(134);
+            getDescriptor().getMessageTypes().get(145);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_ListSearchIndexResponse_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_ListSearchIndexResponse_descriptor,
@@ -82485,7 +91750,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.ListSearchIndexResponse.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.ListSearchIndexResponse.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_DeleteSearchIndexRequest_descriptor =
-            getDescriptor().getMessageTypes().get(135);
+            getDescriptor().getMessageTypes().get(146);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_DeleteSearchIndexRequest_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_DeleteSearchIndexRequest_descriptor,
@@ -82493,7 +91758,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.DeleteSearchIndexRequest.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.DeleteSearchIndexRequest.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_DeleteSearchIndexResponse_descriptor =
-            getDescriptor().getMessageTypes().get(136);
+            getDescriptor().getMessageTypes().get(147);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_DeleteSearchIndexResponse_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_DeleteSearchIndexResponse_descriptor,
@@ -82501,7 +91766,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.DeleteSearchIndexResponse.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.DeleteSearchIndexResponse.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_SyncStat_descriptor =
-            getDescriptor().getMessageTypes().get(137);
+            getDescriptor().getMessageTypes().get(148);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_SyncStat_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_SyncStat_descriptor,
@@ -82509,7 +91774,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.SyncStat.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.SyncStat.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_MeteringInfo_descriptor =
-            getDescriptor().getMessageTypes().get(138);
+            getDescriptor().getMessageTypes().get(149);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_MeteringInfo_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_MeteringInfo_descriptor,
@@ -82517,7 +91782,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.MeteringInfo.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.MeteringInfo.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_DescribeSearchIndexRequest_descriptor =
-            getDescriptor().getMessageTypes().get(139);
+            getDescriptor().getMessageTypes().get(150);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_DescribeSearchIndexRequest_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_DescribeSearchIndexRequest_descriptor,
@@ -82525,15 +91790,23 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.DescribeSearchIndexRequest.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.DescribeSearchIndexRequest.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_DescribeSearchIndexResponse_descriptor =
-            getDescriptor().getMessageTypes().get(140);
+            getDescriptor().getMessageTypes().get(151);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_DescribeSearchIndexResponse_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_DescribeSearchIndexResponse_descriptor,
-              new java.lang.String[] { "Schema", "SyncStat", "MeteringInfo", "BrotherIndexName", "QueryFlowWeight", "CreateTime", "TimeToLive", },
+              new java.lang.String[] { "Schema", "SyncStat", "MeteringInfo", "BrotherIndexName", "QueryFlowWeight", "CreateTime", "TimeToLive", "IndexStatus", },
               com.alicloud.openservices.tablestore.core.protocol.Search.DescribeSearchIndexResponse.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.DescribeSearchIndexResponse.Builder.class);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexStatus_descriptor =
+            getDescriptor().getMessageTypes().get(152);
+          internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexStatus_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_com_alicloud_openservices_tablestore_core_protocol_IndexStatus_descriptor,
+              new java.lang.String[] { "Status", "StatusDescription", },
+              com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.class,
+              com.alicloud.openservices.tablestore.core.protocol.Search.IndexStatus.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_ScanQuery_descriptor =
-            getDescriptor().getMessageTypes().get(141);
+            getDescriptor().getMessageTypes().get(153);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_ScanQuery_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_ScanQuery_descriptor,
@@ -82541,7 +91814,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.ScanQuery.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.ScanQuery.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_ParallelScanRequest_descriptor =
-            getDescriptor().getMessageTypes().get(142);
+            getDescriptor().getMessageTypes().get(154);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_ParallelScanRequest_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_ParallelScanRequest_descriptor,
@@ -82549,7 +91822,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
               com.alicloud.openservices.tablestore.core.protocol.Search.ParallelScanRequest.class,
               com.alicloud.openservices.tablestore.core.protocol.Search.ParallelScanRequest.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_ParallelScanResponse_descriptor =
-            getDescriptor().getMessageTypes().get(143);
+            getDescriptor().getMessageTypes().get(155);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_ParallelScanResponse_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_ParallelScanResponse_descriptor,
@@ -82562,6 +91835,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
     com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
         new com.google.protobuf.Descriptors.FileDescriptor[] {
+          com.alicloud.openservices.tablestore.core.protocol.OtsInternalApi.getDescriptor(),
         }, assigner);
   }
   
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchGroupByBuilder.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchGroupByBuilder.java
index 4044d41..30d6ec7 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchGroupByBuilder.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchGroupByBuilder.java
@@ -75,6 +75,9 @@ public static Search.GroupByHistogram buildGroupByHistogram(GroupByHistogram gro
         if (groupBy.getMissing() != null) {
             builder.setMissing(ByteString.copyFrom(SearchVariantType.toVariant(groupBy.getMissing())));
         }
+        if (groupBy.getOffset() != null) {
+            builder.setOffset(ByteString.copyFrom(SearchVariantType.toVariant(groupBy.getOffset())));
+        }
         if (groupBy.getGroupBySorters() != null) {
             builder.setSort(SearchSortBuilder.buildGroupBySort(groupBy.getGroupBySorters()));
         }
@@ -101,6 +104,9 @@ public static Search.GroupByDateHistogram buildGroupByDateHistogram(GroupByDateH
         if (groupBy.getMissing() != null) {
             builder.setMissing(ByteString.copyFrom(SearchVariantType.toVariant(groupBy.getMissing())));
         }
+        if (groupBy.getOffset() != null) {
+            builder.setOffset(SearchProtocolBuilder.buildDateTimeValue(groupBy.getOffset()));
+        }
         if (groupBy.getGroupBySorters() != null) {
             builder.setSort(SearchSortBuilder.buildGroupBySort(groupBy.getGroupBySorters()));
         }
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchGroupByParser.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchGroupByParser.java
index 67ebcd9..c81d581 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchGroupByParser.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchGroupByParser.java
@@ -65,6 +65,10 @@ private static GroupByDateHistogram toGroupByDateHistogram(String groupByName, B
             ColumnValue missing = ValueUtil.toColumnValue(SearchVariantType.getValue(pb.getMissing().toByteArray()));
             groupBy.setMissing(missing);
         }
+        if (pb.hasOffset()) {
+            DateTimeValue dateTimeValue = SearchProtocolParser.toDateTimeValue(pb.getOffset());
+            groupBy.setOffset(dateTimeValue);
+        }
         if (pb.hasSort()) {
             groupBy.setGroupBySorters(SearchSortParser.toGroupBySort(pb.getSort()));
         }
@@ -113,6 +117,10 @@ private static GroupByHistogram toGroupByHistogram(String groupByName, ByteStrin
             ColumnValue missing = ValueUtil.toColumnValue(SearchVariantType.getValue(pb.getMissing().toByteArray()));
             groupBy.setMissing(missing);
         }
+        if (pb.hasOffset()) {
+            ColumnValue columnValue = ValueUtil.toColumnValue(SearchVariantType.getValue(pb.getOffset().toByteArray()));
+            groupBy.setOffset(columnValue);
+        }
         if (pb.hasSubGroupBys()) {
             groupBy.setSubGroupBys(toGroupBys(pb.getSubGroupBys()));
         }
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchHighlightBuilder.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchHighlightBuilder.java
new file mode 100644
index 0000000..4651b2d
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchHighlightBuilder.java
@@ -0,0 +1,76 @@
+package com.alicloud.openservices.tablestore.core.protocol;
+
+import com.alicloud.openservices.tablestore.model.search.highlight.Highlight;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightEncoder;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightFragmentOrder;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightParameter;
+
+import java.util.Map;
+
+public class SearchHighlightBuilder {
+    private static Search.HighlightEncoder buildHighlightEncoder(HighlightEncoder highlightEncoder) {
+        switch (highlightEncoder) {
+            case PLAIN:
+                return Search.HighlightEncoder.PLAIN_MODE;
+            case HTML:
+                return Search.HighlightEncoder.HTML_MODE;
+            default:
+                throw new IllegalArgumentException("unknown highlight encoder type: " + highlightEncoder.name());
+        }
+    }
+
+    private static Search.HighlightFragmentOrder buildHighlightFragmentOrder(HighlightFragmentOrder highlightFragmentOrder) {
+        switch (highlightFragmentOrder) {
+            case TEXT_SEQUENCE:
+                return Search.HighlightFragmentOrder.TEXT_SEQUENCE;
+            case SCORE:
+                return Search.HighlightFragmentOrder.SCORE;
+            default:
+                throw new IllegalArgumentException("unknown highlight fragment order type: " + highlightFragmentOrder.name());
+        }
+    }
+
+    public static Search.Highlight buildHighlight(Highlight highlight) {
+        Search.Highlight.Builder pbHighlightBuilder = Search.Highlight.newBuilder();
+        if (highlight.getHighlightEncoder() != null) {
+            pbHighlightBuilder.setHighlightEncoder(buildHighlightEncoder(highlight.getHighlightEncoder()));
+        }
+
+        for (Map.Entry<String, HighlightParameter> entry : highlight.getFieldHighlightParams().entrySet()) {
+            Search.HighlightParameter.Builder pbHighlightParamBuilder = Search.HighlightParameter.newBuilder();
+
+            if (entry.getKey() != null) {
+                pbHighlightParamBuilder.setFieldName(entry.getKey());
+            }
+
+            HighlightParameter highlightParameter = entry.getValue();
+            if (highlightParameter == null) {
+                pbHighlightBuilder.addHighlightParameters(pbHighlightParamBuilder);
+                continue;
+            }
+
+            if (highlightParameter.getHighlightFragmentOrder() != null) {
+                pbHighlightParamBuilder.setFragmentsOrder(buildHighlightFragmentOrder(highlightParameter.getHighlightFragmentOrder()));
+            }
+            if (highlightParameter.getFragmentSize() != null) {
+                pbHighlightParamBuilder.setFragmentSize(highlightParameter.getFragmentSize());
+            }
+            if (highlightParameter.getNumberOfFragments() != null) {
+                pbHighlightParamBuilder.setNumberOfFragments(highlightParameter.getNumberOfFragments());
+            }
+            if (highlightParameter.getPreTag() != null) {
+                pbHighlightParamBuilder.setPreTag(highlightParameter.getPreTag());
+            }
+            if (highlightParameter.getPostTag() != null) {
+                pbHighlightParamBuilder.setPostTag(highlightParameter.getPostTag());
+            }
+
+            pbHighlightBuilder.addHighlightParameters(pbHighlightParamBuilder);
+        }
+        return pbHighlightBuilder.build();
+    }
+
+    public static byte[] buildHighlightToBytes(Highlight highlight) {
+        return buildHighlight(highlight).toByteArray();
+    }
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchHighlightParser.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchHighlightParser.java
new file mode 100644
index 0000000..0f4eece
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchHighlightParser.java
@@ -0,0 +1,85 @@
+package com.alicloud.openservices.tablestore.core.protocol;
+
+import com.alicloud.openservices.tablestore.model.search.highlight.Highlight;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightEncoder;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightField;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightFragmentOrder;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightParameter;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightResultItem;
+import com.google.protobuf.InvalidProtocolBufferException;
+
+public class SearchHighlightParser {
+    public static Highlight toHighlight(byte[] pbHighlightBytes) throws InvalidProtocolBufferException {
+        Search.Highlight pbHighlight = Search.Highlight.parseFrom(pbHighlightBytes);
+        return toHighlight(pbHighlight);
+    }
+
+    public static Highlight toHighlight(Search.Highlight pbHighlight) {
+        Highlight highlight = new Highlight();
+        if (pbHighlight.hasHighlightEncoder()) {
+            highlight.setHighlightEncoder(toHighlightEncoder(pbHighlight.getHighlightEncoder()));
+        }
+
+        for (Search.HighlightParameter pbHighlightParameter : pbHighlight.getHighlightParametersList()) {
+            String fieldName = null;
+            if (pbHighlightParameter.hasFieldName()) {
+                fieldName = pbHighlightParameter.getFieldName();
+            }
+
+            HighlightParameter highlightParameter = new HighlightParameter();
+            if (pbHighlightParameter.hasFragmentSize()) {
+                highlightParameter.setFragmentSize(pbHighlightParameter.getFragmentSize());
+            }
+            if (pbHighlightParameter.hasFragmentsOrder()) {
+                highlightParameter.setHighlightFragmentOrder(toHighlightFragmentOrder(pbHighlightParameter.getFragmentsOrder()));
+            }
+            if (pbHighlightParameter.hasNumberOfFragments()) {
+                highlightParameter.setNumberOfFragments(pbHighlightParameter.getNumberOfFragments());
+            }
+            if (pbHighlightParameter.hasPreTag()) {
+                highlightParameter.setPreTag(pbHighlightParameter.getPreTag());
+            }
+            if (pbHighlightParameter.hasPostTag()) {
+                highlightParameter.setPostTag(pbHighlightParameter.getPostTag());
+            }
+            highlight.addFieldHighlightParam(fieldName, highlightParameter);
+        }
+
+        return highlight;
+    }
+
+    private static HighlightEncoder toHighlightEncoder(Search.HighlightEncoder encoder) {
+        switch (encoder) {
+            case PLAIN_MODE:
+                return HighlightEncoder.PLAIN;
+            case HTML_MODE:
+                return HighlightEncoder.HTML;
+            default:
+                throw new IllegalArgumentException("unknown highlight encoder type: " + encoder.name());
+        }
+    }
+
+    private static HighlightFragmentOrder toHighlightFragmentOrder(Search.HighlightFragmentOrder order) {
+        switch (order) {
+            case TEXT_SEQUENCE:
+                return HighlightFragmentOrder.TEXT_SEQUENCE;
+            case SCORE:
+                return HighlightFragmentOrder.SCORE;
+            default:
+                throw new IllegalArgumentException("unknown highlight fragment order type: " + order.name());
+        }
+    }
+
+    static HighlightResultItem buildHighlightResultItem(Search.SearchHit searchHit) {
+        HighlightResultItem highlightResultItem = new HighlightResultItem();
+        if (searchHit.hasHighlightResult()) {
+            Search.HighlightResult pbHighlightResult = searchHit.getHighlightResult();
+            for (Search.HighlightField pbHighlightField : pbHighlightResult.getHighlightFieldsList()) {
+                HighlightField highlightField = new HighlightField();
+                highlightField.setFragments(pbHighlightField.getFieldFragmentsList());
+                highlightResultItem.addHighlightField(pbHighlightField.getFieldName(), highlightField);
+            }
+        }
+        return highlightResultItem;
+    }
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchInnerHitsBuilder.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchInnerHitsBuilder.java
new file mode 100644
index 0000000..ea5009f
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchInnerHitsBuilder.java
@@ -0,0 +1,33 @@
+package com.alicloud.openservices.tablestore.core.protocol;
+
+import com.alicloud.openservices.tablestore.model.search.query.InnerHits;
+
+import static com.alicloud.openservices.tablestore.core.protocol.SearchHighlightBuilder.buildHighlight;
+import static com.alicloud.openservices.tablestore.core.protocol.SearchSortBuilder.buildSort;
+
+public class SearchInnerHitsBuilder {
+    public static Search.InnerHits buildInnerHits(InnerHits innerHits) {
+        Search.InnerHits.Builder pbInnerHits = Search.InnerHits.newBuilder();
+        if (innerHits.getOffset() != null) {
+            pbInnerHits.setOffset(innerHits.getOffset());
+        }
+
+        if (innerHits.getLimit() != null) {
+            pbInnerHits.setLimit(innerHits.getLimit());
+        }
+
+        if (innerHits.getHighlight() != null) {
+            pbInnerHits.setHighlight(buildHighlight(innerHits.getHighlight()));
+        }
+
+        if (innerHits.getSort() != null) {
+            pbInnerHits.setSort(buildSort(innerHits.getSort()));
+        }
+
+        return pbInnerHits.build();
+    }
+
+    public static byte[] buildInnerHitsToBytes(InnerHits innerHits) {
+        return buildInnerHits(innerHits).toByteArray();
+    }
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchInnerHitsParser.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchInnerHitsParser.java
new file mode 100644
index 0000000..41e5be2
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchInnerHitsParser.java
@@ -0,0 +1,69 @@
+package com.alicloud.openservices.tablestore.core.protocol;
+
+import com.alicloud.openservices.tablestore.model.Row;
+import com.alicloud.openservices.tablestore.model.search.SearchHit;
+import com.alicloud.openservices.tablestore.model.search.SearchInnerHit;
+import com.alicloud.openservices.tablestore.model.search.query.InnerHits;
+
+import java.io.IOException;
+
+import static com.alicloud.openservices.tablestore.core.protocol.SearchHighlightParser.buildHighlightResultItem;
+import static com.alicloud.openservices.tablestore.core.protocol.SearchHighlightParser.toHighlight;
+import static com.alicloud.openservices.tablestore.core.protocol.SearchSortParser.toSort;
+
+public class SearchInnerHitsParser {
+    static InnerHits toInnerHits(Search.InnerHits pbInnerhits) throws IOException {
+        InnerHits.Builder innerHitsBuilder = InnerHits.newBuilder();
+        if (pbInnerhits.hasLimit()) {
+            innerHitsBuilder.limit(pbInnerhits.getLimit());
+        }
+        if (pbInnerhits.hasOffset()) {
+            innerHitsBuilder.offset(pbInnerhits.getOffset());
+        }
+        if (pbInnerhits.hasSort()) {
+            innerHitsBuilder.sort(toSort(pbInnerhits.getSort()));
+        }
+        if (pbInnerhits.hasHighlight()) {
+            innerHitsBuilder.highlight(toHighlight(pbInnerhits.getHighlight()));
+        }
+
+        return innerHitsBuilder.build();
+    }
+
+    static InnerHits toInnerHits(byte[] pbInnerHitsBytes) throws IOException {
+        Search.InnerHits pbInnerHits = Search.InnerHits.parseFrom(pbInnerHitsBytes);
+        return toInnerHits(pbInnerHits);
+    }
+
+    static SearchHit toSearchHit(Search.SearchHit pbSearchHits, Row row) {
+        SearchHit searchHit = new SearchHit();
+        searchHit.setRow(row);
+        searchHit.setHighlightResultItem(buildHighlightResultItem(pbSearchHits));
+
+        if (pbSearchHits.hasNestedDocOffset()) {
+            searchHit.setOffset(pbSearchHits.getNestedDocOffset());
+        }
+
+        if (pbSearchHits.hasScore()) {
+            searchHit.setScore(pbSearchHits.getScore());
+        }
+
+        for (Search.SearchInnerHit searchInnerHit : pbSearchHits.getSearchInnerHitsList()) {
+            searchHit.addSearchInnerHit(searchInnerHit.getPath(), toSearchInnerHit(searchInnerHit));
+        }
+        return searchHit;
+    }
+
+    static SearchInnerHit toSearchInnerHit(Search.SearchInnerHit pbSearchInnerHit) {
+        SearchInnerHit searchInnerHit = new SearchInnerHit();
+        if (pbSearchInnerHit.hasPath()) {
+            searchInnerHit.setPath(pbSearchInnerHit.getPath());
+        }
+
+        for (Search.SearchHit innerSearchHit : pbSearchInnerHit.getSearchHitsList()) {
+            searchInnerHit.addSubSearchHit(toSearchHit(innerSearchHit, null));
+        }
+
+        return searchInnerHit;
+    }
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchProtocolBuilder.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchProtocolBuilder.java
index 4be5336..bf07d41 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchProtocolBuilder.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchProtocolBuilder.java
@@ -1,9 +1,5 @@
 package com.alicloud.openservices.tablestore.core.protocol;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
 import com.alicloud.openservices.tablestore.ClientException;
 import com.alicloud.openservices.tablestore.core.protocol.Search.ColumnReturnType;
 import com.alicloud.openservices.tablestore.model.PrimaryKey;
@@ -26,8 +22,17 @@
 import com.alicloud.openservices.tablestore.model.search.SearchRequest;
 import com.alicloud.openservices.tablestore.model.search.SearchRequest.ColumnsToGet;
 import com.alicloud.openservices.tablestore.model.search.UpdateSearchIndexRequest;
+import com.alicloud.openservices.tablestore.model.search.vector.HNSWIndexParameter;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorDataType;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorIndexParameter;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorMetricType;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorOptions;
 import com.google.protobuf.ByteString;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
 public class SearchProtocolBuilder {
 
     private static final int DEFAULT_NUMBER_OF_SHARDS = 1;
@@ -50,6 +55,8 @@ private static Search.FieldType buildFieldType(FieldType fieldType) {
                 return Search.FieldType.GEO_POINT;
             case DATE:
                 return Search.FieldType.DATE;
+            case VECTOR:
+                return Search.FieldType.VECTOR;
             default:
                 throw new IllegalArgumentException("Unknown fieldType: " + fieldType.name());
         }
@@ -93,6 +100,9 @@ static Search.FieldSchema buildFieldSchema(FieldSchema fieldSchema) {
             if (fieldSchema.isArray() != null) {
                 builder.setIsArray(fieldSchema.isArray());
             }
+            if (fieldSchema.isEnableHighlighting() != null) {
+                builder.setEnableHighlighting(fieldSchema.isEnableHighlighting());
+            }
         }
         if (fieldSchema.getIndexOptions() != null) {
             builder.setIndexOptions(buildIndexOptions(fieldSchema.getIndexOptions()));
@@ -130,9 +140,65 @@ static Search.FieldSchema buildFieldSchema(FieldSchema fieldSchema) {
                 builder.addDateFormats(dateFormat);
             }
         }
+        if (fieldSchema.getVectorOptions() != null) {
+            builder.setVectorOptions(buildVectorOptions(fieldSchema.getVectorOptions()));
+        }
+        return builder.build();
+    }
+
+    public static Search.VectorOptions buildVectorOptions(VectorOptions vectorOptions) {
+        Search.VectorOptions.Builder builder = Search.VectorOptions.newBuilder();
+        if (vectorOptions.getDataType() != null) {
+            builder.setDataType(buildVectorMetricType(vectorOptions.getDataType()));
+        }
+        if (vectorOptions.getDimension() != null) {
+            builder.setDimension(vectorOptions.getDimension());
+        }
+        if (vectorOptions.getMetricType() != null) {
+            builder.setMetricType(buildVectorMetricType(vectorOptions.getMetricType()));
+        }
+        if (vectorOptions.getIndexParameter() != null) {
+            VectorIndexParameter indexParameter = vectorOptions.getIndexParameter();
+            if (indexParameter instanceof HNSWIndexParameter) {
+                HNSWIndexParameter hnswIndexParameter = (HNSWIndexParameter) indexParameter;
+                Search.HNSWIndexParameter.Builder hnswBuilder = Search.HNSWIndexParameter.newBuilder();
+                if (hnswIndexParameter.getM() != null) {
+                    hnswBuilder.setM(hnswIndexParameter.getM());
+                }
+                if (hnswIndexParameter.getEfConstruction() != null) {
+                    hnswBuilder.setEfConstruction(hnswIndexParameter.getEfConstruction());
+                }
+                builder.setIndexType(Search.VectorIndexType.VI_HNSW);
+                builder.setIndexParameter(hnswBuilder.build().toByteString());
+            } else {
+                throw new IllegalArgumentException("unknown index parameter implement:" + indexParameter.getClass().getSimpleName());
+            } 
+        }
         return builder.build();
     }
 
+    private static Search.VectorDataType buildVectorMetricType(VectorDataType type) {
+        switch (type) {
+            case FLOAT_32:
+                return Search.VectorDataType.VD_FLOAT_32;
+            default:
+                throw new IllegalArgumentException("unknown vector data type type:" + type.name());
+        }
+    }
+
+    private static Search.VectorMetricType buildVectorMetricType(VectorMetricType type) {
+        switch (type) {
+            case EUCLIDEAN:
+                return Search.VectorMetricType.VM_EUCLIDEAN;
+            case COSINE:
+                return Search.VectorMetricType.VM_COSINE;
+            case DOT_PRODUCT:
+                return Search.VectorMetricType.VM_DOT_PRODUCT;
+            default:
+                throw new IllegalArgumentException("unknown vector metric type type:" + type.name());
+        }
+    }
+
     private static Search.IndexSetting buildIndexSetting(IndexSetting indexSetting) {
         Search.IndexSetting.Builder builder = Search.IndexSetting.newBuilder();
         builder.setNumberOfShards(DEFAULT_NUMBER_OF_SHARDS);
@@ -265,6 +331,9 @@ static Search.SearchQuery buildSearchQuery(SearchQuery searchQuery) {
         if (searchQuery.getQuery() != null) {
             builder.setQuery(SearchQueryBuilder.buildQuery(searchQuery.getQuery()));
         }
+        if (searchQuery.getHighlight() != null) {
+            builder.setHighlight(SearchHighlightBuilder.buildHighlight(searchQuery.getHighlight()));
+        }
         if (searchQuery.getSort() != null) {
             builder.setSort(SearchSortBuilder.buildSort(searchQuery.getSort()));
         }
@@ -391,6 +460,8 @@ public static Search.DateTimeUnit buildDateTimeUnit(DateTimeUnit unit) {
                 return Search.DateTimeUnit.MINUTE;
             case SECOND:
                 return Search.DateTimeUnit.SECOND;
+            case MILLISECOND:
+                return Search.DateTimeUnit.MILLISECOND;
             default:
                 throw new IllegalArgumentException("Unknown DateTimeUnit: " + unit.name());
         }
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchProtocolParser.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchProtocolParser.java
index ceabe54..def5e05 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchProtocolParser.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchProtocolParser.java
@@ -8,6 +8,7 @@
 import com.alicloud.openservices.tablestore.model.search.Collapse;
 import com.alicloud.openservices.tablestore.model.search.DateTimeUnit;
 import com.alicloud.openservices.tablestore.model.search.DateTimeValue;
+import com.alicloud.openservices.tablestore.model.search.DescribeSearchIndexResponse;
 import com.alicloud.openservices.tablestore.model.search.FieldSchema;
 import com.alicloud.openservices.tablestore.model.search.FieldType;
 import com.alicloud.openservices.tablestore.model.search.IndexOptions;
@@ -28,6 +29,10 @@
 import com.alicloud.openservices.tablestore.model.search.sort.PrimaryKeySort;
 import com.alicloud.openservices.tablestore.model.search.sort.Sort;
 import com.alicloud.openservices.tablestore.model.search.sort.SortOrder;
+import com.alicloud.openservices.tablestore.model.search.vector.HNSWIndexParameter;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorDataType;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorMetricType;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorOptions;
 import com.google.protobuf.ByteString;
 import com.google.protobuf.InvalidProtocolBufferException;
 
@@ -55,6 +60,8 @@ private static FieldType toFieldType(Search.FieldType fieldType) {
                 return FieldType.GEO_POINT;
             case DATE:
                 return FieldType.DATE;
+            case VECTOR:
+                return FieldType.VECTOR;
             default:
                 return FieldType.UNKNOWN;
         }
@@ -114,6 +121,9 @@ static FieldSchema toFieldSchema(Search.FieldSchema fieldSchema) {
         if (fieldSchema.hasSortAndAgg()) {
             result.setEnableSortAndAgg(fieldSchema.getSortAndAgg());
         }
+        if (fieldSchema.hasEnableHighlighting()) {
+            result.setEnableHighlighting(fieldSchema.getEnableHighlighting());
+        }
         if (fieldSchema.hasStore()) {
             result.setStore(fieldSchema.getStore());
         }
@@ -163,9 +173,72 @@ static FieldSchema toFieldSchema(Search.FieldSchema fieldSchema) {
         }
         result.setSourceFieldNames(fieldSchema.getSourceFieldNamesList());
         result.setDateFormats(fieldSchema.getDateFormatsList());
+        if (fieldSchema.hasVectorOptions()) {
+            result.setVectorOptions(toVectorOptions(fieldSchema.getVectorOptions()));
+        }
         return result;
     }
 
+    public static VectorOptions toVectorOptions(Search.VectorOptions pbOptions) {
+        VectorOptions vectorOptions = new VectorOptions();
+        if (pbOptions.hasDataType()) {
+            vectorOptions.setDataType(toVectorMetricType(pbOptions.getDataType()));
+        }
+        if (pbOptions.hasDimension()) {
+            vectorOptions.setDimension(pbOptions.getDimension());
+        }
+        if (pbOptions.hasMetricType()) {
+            vectorOptions.setMetricType(toVectorMetricType(pbOptions.getMetricType()));
+        }
+        if (pbOptions.hasIndexType()) {
+            Search.VectorIndexType indexType = pbOptions.getIndexType();
+            if (indexType.equals(Search.VectorIndexType.VI_HNSW)) {
+                if (pbOptions.hasIndexParameter()) {
+                    ByteString indexParameter = pbOptions.getIndexParameter();
+                    Search.HNSWIndexParameter pbParameter = null;
+                    try {
+                        pbParameter = Search.HNSWIndexParameter.parseFrom(indexParameter);
+                    } catch (InvalidProtocolBufferException e) {
+                        throw new ClientException("failed to parse vector options index parameter: " + e.getMessage(), e);
+                    }
+                    HNSWIndexParameter hnswIndexParameter = new HNSWIndexParameter();
+                    if (pbParameter.hasM()) {
+                        hnswIndexParameter.setM(pbParameter.getM());
+                    }
+                    if (pbParameter.hasEfConstruction()) {
+                        hnswIndexParameter.setEfConstruction(pbParameter.getEfConstruction());
+                    }
+                    vectorOptions.setIndexParameter(hnswIndexParameter);
+                }
+            } else {
+                throw new IllegalArgumentException("unknown index type:" + indexType + ", maybe you should update sdk version");
+            }
+        }
+        return vectorOptions;
+    }
+
+    private static VectorDataType toVectorMetricType(Search.VectorDataType type) {
+        switch (type) {
+            case VD_FLOAT_32:
+                return VectorDataType.FLOAT_32;
+            default:
+                throw new IllegalArgumentException("unknown vector data type type:" + type.name());
+        }
+    }
+
+    private static VectorMetricType toVectorMetricType(Search.VectorMetricType type) {
+        switch (type) {
+            case VM_EUCLIDEAN:
+                return VectorMetricType.EUCLIDEAN;
+            case VM_COSINE:
+                return VectorMetricType.COSINE;
+            case VM_DOT_PRODUCT:
+                return VectorMetricType.DOT_PRODUCT;
+            default:
+                throw new IllegalArgumentException("unknown vector metric type type:" + type.name());
+        }
+    }
+
     private static IndexSetting toIndexSetting(Search.IndexSetting indexSetting) {
         IndexSetting result = new IndexSetting();
         if (indexSetting.getRoutingFieldsCount() > 0) {
@@ -262,6 +335,35 @@ static MeteringInfo toMeteringInfo(Search.MeteringInfo meteringInfo) {
         return result;
     }
 
+    static DescribeSearchIndexResponse.IndexStatus toIndexStatus(Search.IndexStatus pbIndexStatus) {
+        DescribeSearchIndexResponse.IndexStatus indexStatus = new DescribeSearchIndexResponse.IndexStatus();
+
+        if (pbIndexStatus.hasStatus()) {
+            switch (pbIndexStatus.getStatus()) {
+                case PENDING:
+                    indexStatus.indexStatusEnum = DescribeSearchIndexResponse.IndexStatusEnum.PENDING;
+                    break;
+                case FAILED:
+                    indexStatus.indexStatusEnum = DescribeSearchIndexResponse.IndexStatusEnum.FAILED;
+                    break;
+                case RUNNING:
+                    indexStatus.indexStatusEnum = DescribeSearchIndexResponse.IndexStatusEnum.RUNNING;
+                    break;
+                default:
+                    indexStatus.indexStatusEnum = DescribeSearchIndexResponse.IndexStatusEnum.UNKNOWN;
+                    break;
+            }
+        } else {
+            indexStatus.indexStatusEnum = DescribeSearchIndexResponse.IndexStatusEnum.UNKNOWN;
+        }
+
+        if (pbIndexStatus.hasStatusDescription()) {
+            indexStatus.statusDescription = pbIndexStatus.getStatusDescription();
+        }
+
+        return indexStatus;
+    }
+
     static QueryFlowWeight toQueryFlowWeight(Search.QueryFlowWeight queryFlowWeight) {
         if (!queryFlowWeight.hasIndexName()) {
             throw new ClientException("[query_flow_weight] has no index name");
@@ -288,6 +390,9 @@ public static SearchQuery toSearchQuery(byte[] bytes) throws IOException {
         if (pb.hasQuery()) {
             searchQuery.setQuery(SearchQueryParser.toQuery(pb.getQuery()));
         }
+        if (pb.hasHighlight()) {
+            searchQuery.setHighlight(SearchHighlightParser.toHighlight(pb.getHighlight()));
+        }
         if (pb.hasSort()) {
             searchQuery.setSort(SearchSortParser.toSort(pb.getSort()));
         }
@@ -445,12 +550,14 @@ public static DateTimeUnit toDateTimeUnit(Search.DateTimeUnit unit) {
                 return DateTimeUnit.MINUTE;
             case SECOND:
                 return DateTimeUnit.SECOND;
+            case MILLISECOND:
+                return DateTimeUnit.MILLISECOND;
             default:
                 throw new IllegalArgumentException("Unknown DateTimeUnit: " + unit.name());
         }
     }
 
-    public static  DateTimeValue toDateTimeValue(Search.DateTimeValue pb) {
+    public static DateTimeValue toDateTimeValue(Search.DateTimeValue pb) {
         DateTimeValue dateTimeValue = new DateTimeValue();
         if (pb.hasValue()) {
             dateTimeValue.setValue(pb.getValue());
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchQueryBuilder.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchQueryBuilder.java
index 729c920..6a8c8ad 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchQueryBuilder.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchQueryBuilder.java
@@ -4,6 +4,8 @@
 import com.alicloud.openservices.tablestore.model.search.query.*;
 import com.google.protobuf.ByteString;
 
+import static com.alicloud.openservices.tablestore.core.protocol.SearchInnerHitsBuilder.buildInnerHits;
+
 /**
  * {@link Query} serialization tool class. For deserialization, please refer to {@link SearchQueryParser}
  */
@@ -43,6 +45,8 @@ private static Search.QueryType buildQueryType(QueryType type) {
                 return Search.QueryType.GEO_POLYGON_QUERY;
             case QueryType_ExistsQuery:
                 return Search.QueryType.EXISTS_QUERY;
+            case QueryType_KnnVectorQuery:
+                return Search.QueryType.KNN_VECTOR_QUERY;
             default:
                 throw new IllegalArgumentException("unknown queryType: " + type.name());
         }
@@ -219,6 +223,9 @@ public static Search.NestedQuery buildNestedQuery(NestedQuery query) {
             throw new IllegalArgumentException("nestedQuery must set score mode.");
         }
         builder.setScoreMode(buildScoreMode(query.getScoreMode()));
+        if (query.getInnerHits() != null) {
+            builder.setInnerHits(buildInnerHits(query.getInnerHits()));
+        }
         return builder.build();
     }
 
@@ -250,4 +257,26 @@ public static Search.ExistsQuery buildExistsQuery(ExistsQuery query) {
         builder.setFieldName(query.getFieldName());
         return builder.build();
     }
+
+    public static Search.KnnVectorQuery buildKnnVectorQuery(KnnVectorQuery query) {
+        Search.KnnVectorQuery.Builder builder = Search.KnnVectorQuery.newBuilder();
+        if (query.getFieldName() != null) {
+            builder.setFieldName(query.getFieldName());
+        }
+        if (query.getTopK() != null) {
+            builder.setTopK(query.getTopK());
+        }
+        if (query.getFloat32QueryVector() != null) {
+            for (float v : query.getFloat32QueryVector()) {
+                builder.addFloat32QueryVector(v);
+            }
+        }
+        if (query.getFilter() != null) {
+            builder.setFilter(buildQuery(query.getFilter()));
+        }
+        if (query.getWeight() != null) {
+            builder.setWeight(query.getWeight());
+        }
+        return builder.build();
+    }
 }
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchQueryParser.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchQueryParser.java
index f297939..4e74bc4 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchQueryParser.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchQueryParser.java
@@ -11,6 +11,7 @@
 import com.alicloud.openservices.tablestore.model.search.query.GeoBoundingBoxQuery;
 import com.alicloud.openservices.tablestore.model.search.query.GeoDistanceQuery;
 import com.alicloud.openservices.tablestore.model.search.query.GeoPolygonQuery;
+import com.alicloud.openservices.tablestore.model.search.query.KnnVectorQuery;
 import com.alicloud.openservices.tablestore.model.search.query.MatchAllQuery;
 import com.alicloud.openservices.tablestore.model.search.query.MatchPhraseQuery;
 import com.alicloud.openservices.tablestore.model.search.query.MatchQuery;
@@ -29,6 +30,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import static com.alicloud.openservices.tablestore.core.protocol.SearchInnerHitsParser.toInnerHits;
+
 
 /**
  * {@link Query} deserialization tool class. For serialization, please refer to {@link SearchQueryBuilder}
@@ -77,6 +80,8 @@ static Query toQuery(Search.Query query) throws IOException {
                 return toGeoPolygonQuery(queryByteString);
             case EXISTS_QUERY:
                 return toExistsQuery(queryByteString);
+            case KNN_VECTOR_QUERY:
+                return toKnnVectorQuery(queryByteString);
             default:
                 throw new IllegalArgumentException("unknown queryType: " + query.getType().name());
         }
@@ -293,6 +298,9 @@ private static NestedQuery toNestedQuery(ByteString queryByteString) throws IOEx
         if (pb.hasScoreMode()) {
             query.setScoreMode(toScoreMode(pb.getScoreMode()));
         }
+        if (pb.hasInnerHits()) {
+            query.setInnerHits(toInnerHits(pb.getInnerHits()));
+        }
         return query;
     }
 
@@ -344,4 +352,28 @@ private static ExistsQuery toExistsQuery(ByteString queryByteString) throws IOEx
         }
         return query;
     }
+
+    private static KnnVectorQuery toKnnVectorQuery(ByteString queryByteString) throws IOException {
+        Search.KnnVectorQuery pb = Search.KnnVectorQuery.parseFrom(queryByteString);
+        KnnVectorQuery query = new KnnVectorQuery();
+        if (pb.hasFieldName()) {
+            query.setFieldName(pb.getFieldName());
+        }
+        if (pb.hasTopK()) {
+            query.setTopK(pb.getTopK());
+        }
+        List<Float> floatList = pb.getFloat32QueryVectorList();
+        float[] floats = new float[floatList.size()];
+        for (int i = 0; i < floats.length; i++) {
+            floats[i] = floatList.get(i);
+        }
+        query.setFloat32QueryVector(floats);
+        if (pb.hasFilter()) {
+            query.setFilter(toQuery(pb.getFilter()));
+        }
+        if (pb.hasWeight()) {
+            query.setWeight(pb.getWeight());
+        }
+        return query;
+    }
 }
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchSortBuilder.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchSortBuilder.java
index 9921bb8..3f4f6a7 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchSortBuilder.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchSortBuilder.java
@@ -2,6 +2,7 @@
 
 import java.util.List;
 
+import com.alicloud.openservices.tablestore.model.search.sort.DocSort;
 import com.alicloud.openservices.tablestore.model.search.sort.FieldSort;
 import com.alicloud.openservices.tablestore.model.search.sort.GeoDistanceSort;
 import com.alicloud.openservices.tablestore.model.search.sort.GeoDistanceType;
@@ -118,6 +119,12 @@ private static Search.PrimaryKeySort buildPrimaryKeySort(PrimaryKeySort primaryK
         return builder.build();
     }
 
+    private static Search.DocSort buildDocSort(DocSort docSort) {
+        Search.DocSort.Builder builder = Search.DocSort.newBuilder();
+        builder.setOrder(buildSortOrder(docSort.getOrder()));
+        return builder.build();
+    }
+
     private static Search.Sorter buildSorter(Sort.Sorter sorter) {
         Search.Sorter.Builder builder = Search.Sorter.newBuilder();
         if (sorter instanceof FieldSort) {
@@ -128,6 +135,8 @@ private static Search.Sorter buildSorter(Sort.Sorter sorter) {
             builder.setGeoDistanceSort(buildGeoDistanceSort((GeoDistanceSort)sorter));
         } else if (sorter instanceof PrimaryKeySort) {
             builder.setPkSort(buildPrimaryKeySort((PrimaryKeySort)sorter));
+        } else if (sorter instanceof DocSort) {
+            builder.setDocSort(buildDocSort((DocSort) sorter));
         } else {
             throw new IllegalArgumentException("Unknown sorter type: " + sorter.getClass());
         }
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchSortParser.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchSortParser.java
index fd30624..8fac9ae 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchSortParser.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/SearchSortParser.java
@@ -1,6 +1,7 @@
 package com.alicloud.openservices.tablestore.core.protocol;
 
 import com.alicloud.openservices.tablestore.model.search.query.Query;
+import com.alicloud.openservices.tablestore.model.search.sort.DocSort;
 import com.alicloud.openservices.tablestore.model.search.sort.FieldSort;
 import com.alicloud.openservices.tablestore.model.search.sort.GeoDistanceSort;
 import com.alicloud.openservices.tablestore.model.search.sort.GeoDistanceType;
@@ -118,6 +119,14 @@ private static PrimaryKeySort toPrimaryKeySort(Search.PrimaryKeySort pb) {
         return sort;
     }
 
+    private static DocSort toDocSort(Search.DocSort pb) {
+        DocSort sort = new DocSort();
+        if (pb.hasOrder()) {
+            sort.setOrder(toSortOrder(pb.getOrder()));
+        }
+        return sort;
+    }
+
     private static Sort.Sorter toSorter(Search.Sorter pb) throws IOException {
         if (pb.hasFieldSort()) {
             return toFieldSort(pb.getFieldSort());
@@ -131,6 +140,9 @@ private static Sort.Sorter toSorter(Search.Sorter pb) throws IOException {
         if (pb.hasGeoDistanceSort()) {
             return toGeoDistanceSort(pb.getGeoDistanceSort());
         }
+        if (pb.hasDocSort()) {
+            return toDocSort(pb.getDocSort());
+        }
         throw new IllegalArgumentException("can not parse a sorter from Search.Sorter");
     }
 
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/ots_internal_api.proto b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/ots_internal_api.proto
index 7ac7246..de48b63 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/ots_internal_api.proto
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/ots_internal_api.proto
@@ -58,12 +58,19 @@ enum IndexType {
     IT_LOCAL_INDEX = 1;
 }
 
+enum IndexSyncPhase {
+    ISP_INVALID = 0;
+    ISP_FULL = 1;
+    ISP_INCR = 2;
+}
+
 message IndexMeta {
     required string name = 1;
     repeated string primary_key = 2;
     repeated string defined_column = 3;
     required IndexUpdateMode index_update_mode = 4;
     required IndexType index_type = 5;
+    optional IndexSyncPhase index_sync_phase = 6;
 }
 
 message TableMeta {
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/search.proto b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/search.proto
index b602603..6488f75 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/search.proto
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/search.proto
@@ -2,6 +2,8 @@ syntax = "proto2";
 
 package com.alicloud.openservices.tablestore.core.protocol;
 
+import "ots_internal_api.proto";
+
 /////////////////////////////////////////////////// old agg proto
 enum AggType { //for compatibility
                AVG_AGG = 1;
@@ -327,6 +329,7 @@ message GroupByDateHistogram {
     optional GroupBySort sort = 7;
     optional Aggregations sub_aggs = 8;
     optional GroupBys sub_group_bys = 9;
+    optional DateTimeValue offset = 10;
 }
 
 message GroupByHistogram {
@@ -338,6 +341,7 @@ message GroupByHistogram {
     optional FieldRange field_range = 6;
     optional Aggregations sub_aggs = 7;
     optional GroupBys sub_group_bys = 8;
+    optional bytes offset = 9;
 }
 
 message GroupKeySort {
@@ -540,6 +544,7 @@ enum QueryType {
     GEO_POLYGON_QUERY = 14;
     TERMS_QUERY = 15;
     EXISTS_QUERY = 16;
+    KNN_VECTOR_QUERY = 17;
 }
 
 enum QueryOperator {
@@ -630,6 +635,14 @@ message NestedQuery {
     optional Query query = 2;
     optional ScoreMode score_mode = 3;
     optional float weight = 4;
+    optional InnerHits inner_hits = 5;
+}
+
+message InnerHits {
+    optional Sort sort = 1;
+    optional int32 offset = 2;
+    optional int32 limit = 3;
+    optional Highlight highlight = 4;
 }
 
 message GeoBoundingBoxQuery {
@@ -653,6 +666,14 @@ message ExistsQuery {
     optional string field_name = 1;
 }
 
+message KnnVectorQuery {
+    optional string field_name = 1;
+    optional int32 top_k = 2;
+    repeated float float32_query_vector = 4;
+    optional Query filter = 5;
+    optional float weight = 6;
+}
+
 message Query {
     optional QueryType type = 1;
     optional bytes query = 2;
@@ -695,6 +716,10 @@ message FieldSort {
     optional string missing_field = 6;
 }
 
+message DocSort {
+    optional SortOrder order = 1;
+}
+
 enum GeoDistanceType {
     GEO_DISTANCE_ARC = 0;
     GEO_DISTANCE_PLANE = 1;
@@ -714,6 +739,7 @@ message Sorter {
     optional GeoDistanceSort geo_distance_sort = 2;
     optional ScoreSort score_sort = 3;
     optional PrimaryKeySort pk_sort = 4;
+    optional DocSort doc_sort = 5;
 }
 
 message Sort {
@@ -730,7 +756,31 @@ message SearchQuery {
     optional bytes token = 9;
     optional Aggregations aggs = 10;
     optional GroupBys group_bys = 11;
+    optional Highlight highlight = 12;
+}
 
+message Highlight {
+    repeated HighlightParameter highlight_parameters = 1;
+    optional HighlightEncoder highlight_encoder = 2 [default=PLAIN_MODE];
+}
+
+message HighlightParameter {
+    optional string  field_name = 1;
+    optional int32   number_of_fragments = 2;
+    optional int32   fragment_size = 3;
+    optional string  pre_tag = 4;
+    optional string  post_tag = 5;
+    optional HighlightFragmentOrder fragments_order = 6 [default=TEXT_SEQUENCE];
+}
+
+enum HighlightFragmentOrder {
+    TEXT_SEQUENCE = 1;
+    SCORE = 2;
+}
+
+enum HighlightEncoder {
+    PLAIN_MODE = 1;
+    HTML_MODE = 2;
 }
 
 enum ColumnReturnType {
@@ -758,9 +808,33 @@ message SearchResponse {
     optional int64 total_hits = 1;
     repeated bytes rows = 2;
     optional bool is_all_succeeded = 3;
+    repeated SearchHit search_hits = 5;
     optional bytes next_token = 6;
     optional bytes aggs = 7;
     optional bytes group_bys = 8;
+    optional ConsumedCapacity consumed = 9;
+    optional ConsumedCapacity reserved_consumed = 10;
+}
+
+message SearchHit {
+    optional double score = 3;
+    optional HighlightResult highlight_result = 4;
+    repeated SearchInnerHit search_inner_hits = 5;
+    optional int32 nested_doc_offset = 6;
+}
+
+message SearchInnerHit {
+    optional string path = 1;
+    repeated SearchHit search_hits = 2;
+}
+
+message HighlightResult {
+    repeated HighlightField highlight_fields = 1;
+}
+
+message HighlightField {
+    optional string field_name = 1;
+    repeated string field_fragments = 2;
 }
 
 /* Create Search Index */
@@ -781,6 +855,7 @@ enum FieldType {
     NESTED = 6;
     GEO_POINT = 7;
     DATE = 8;
+    VECTOR = 9;
 }
 
 enum DateTimeUnit {
@@ -792,6 +867,7 @@ enum DateTimeUnit {
     HOUR = 6;
     MINUTE = 7;
     SECOND = 8;
+    MILLISECOND = 9;
 }
 
 message DateTimeValue {
@@ -827,6 +903,35 @@ message FieldSchema {
     optional bool is_virtual_field = 11;
     repeated string source_field_names = 12;
     repeated string date_formats = 13;
+    optional bool enable_highlighting = 14;
+    optional VectorOptions vector_options = 15;
+}
+
+enum VectorDataType {
+    VD_FLOAT_32 = 2;
+}
+
+message VectorOptions {
+    optional VectorDataType data_type = 1;
+    optional int32 dimension = 2;
+    optional VectorMetricType metric_type = 3;
+    optional VectorIndexType index_type = 4;
+    optional bytes index_parameter = 5;
+}
+
+enum VectorMetricType {
+    VM_EUCLIDEAN = 0;
+    VM_COSINE = 1;
+    VM_DOT_PRODUCT = 2;
+}
+
+enum VectorIndexType {
+    VI_HNSW = 1;
+}
+
+message HNSWIndexParameter {
+    optional int32 m = 1;
+    optional int32 ef_construction = 2;
 }
 
 message IndexSchema {
@@ -927,8 +1032,19 @@ message DescribeSearchIndexResponse {
     repeated QueryFlowWeight query_flow_weight = 5;
     optional int64 create_time = 6;
     optional int32 time_to_live = 7;  // unit is seconds
+    optional IndexStatus index_status = 8;
+}
+
+message IndexStatus {
+    optional IndexStatusEnum status = 1;
+    optional string status_description = 2;
 }
 
+enum IndexStatusEnum {
+    PENDING = 1;
+    FAILED = 2;
+    RUNNING = 3;
+}
 
 /* ParallelScan API, same to Search API */
 message ScanQuery {
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/timeseries/Timeseries.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/timeseries/Timeseries.java
index e518114..dc0c578 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/timeseries/Timeseries.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/timeseries/Timeseries.java
@@ -24428,6 +24428,10 @@ public interface DeleteTimeseriesAnalyticalStoreRequestOrBuilder
     // required string store_name = 2;
     boolean hasStoreName();
     String getStoreName();
+    
+    // optional bool drop_mapping_table = 3;
+    boolean hasDropMappingTable();
+    boolean getDropMappingTable();
   }
   public static final class DeleteTimeseriesAnalyticalStoreRequest extends
       com.google.protobuf.GeneratedMessage
@@ -24522,9 +24526,20 @@ private com.google.protobuf.ByteString getStoreNameBytes() {
       }
     }
     
+    // optional bool drop_mapping_table = 3;
+    public static final int DROP_MAPPING_TABLE_FIELD_NUMBER = 3;
+    private boolean dropMappingTable_;
+    public boolean hasDropMappingTable() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public boolean getDropMappingTable() {
+      return dropMappingTable_;
+    }
+    
     private void initFields() {
       tableName_ = "";
       storeName_ = "";
+      dropMappingTable_ = false;
     }
     private byte memoizedIsInitialized = -1;
     public final boolean isInitialized() {
@@ -24552,6 +24567,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (((bitField0_ & 0x00000002) == 0x00000002)) {
         output.writeBytes(2, getStoreNameBytes());
       }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBool(3, dropMappingTable_);
+      }
       getUnknownFields().writeTo(output);
     }
     
@@ -24569,6 +24587,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeBytesSize(2, getStoreNameBytes());
       }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(3, dropMappingTable_);
+      }
       size += getUnknownFields().getSerializedSize();
       memoizedSerializedSize = size;
       return size;
@@ -24697,6 +24719,8 @@ public Builder clear() {
         bitField0_ = (bitField0_ & ~0x00000001);
         storeName_ = "";
         bitField0_ = (bitField0_ & ~0x00000002);
+        dropMappingTable_ = false;
+        bitField0_ = (bitField0_ & ~0x00000004);
         return this;
       }
       
@@ -24743,6 +24767,10 @@ public com.alicloud.openservices.tablestore.core.protocol.timeseries.Timeseries.
           to_bitField0_ |= 0x00000002;
         }
         result.storeName_ = storeName_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.dropMappingTable_ = dropMappingTable_;
         result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
@@ -24765,6 +24793,9 @@ public Builder mergeFrom(com.alicloud.openservices.tablestore.core.protocol.time
         if (other.hasStoreName()) {
           setStoreName(other.getStoreName());
         }
+        if (other.hasDropMappingTable()) {
+          setDropMappingTable(other.getDropMappingTable());
+        }
         this.mergeUnknownFields(other.getUnknownFields());
         return this;
       }
@@ -24814,6 +24845,11 @@ public Builder mergeFrom(
               storeName_ = input.readBytes();
               break;
             }
+            case 24: {
+              bitField0_ |= 0x00000004;
+              dropMappingTable_ = input.readBool();
+              break;
+            }
           }
         }
       }
@@ -24892,6 +24928,27 @@ void setStoreName(com.google.protobuf.ByteString value) {
         onChanged();
       }
       
+      // optional bool drop_mapping_table = 3;
+      private boolean dropMappingTable_ ;
+      public boolean hasDropMappingTable() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public boolean getDropMappingTable() {
+        return dropMappingTable_;
+      }
+      public Builder setDropMappingTable(boolean value) {
+        bitField0_ |= 0x00000004;
+        dropMappingTable_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearDropMappingTable() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        dropMappingTable_ = false;
+        onChanged();
+        return this;
+      }
+      
       // @@protoc_insertion_point(builder_scope:com.alicloud.openservices.tablestore.core.protocol.timeseries.DeleteTimeseriesAnalyticalStoreRequest)
     }
     
@@ -27615,41 +27672,42 @@ public Builder mergeFrom(
       "re\030\002 \001(\0132X.com.alicloud.openservices.tab" +
       "lestore.core.protocol.timeseries.Timeser" +
       "iesAnalyticalStore\")\n\'CreateTimeseriesAn" +
-      "alyticalStoreResponse\"P\n&DeleteTimeserie" +
+      "alyticalStoreResponse\"l\n&DeleteTimeserie" +
       "sAnalyticalStoreRequest\022\022\n\ntable_name\030\001 " +
-      "\002(\t\022\022\n\nstore_name\030\002 \002(\t\")\n\'DeleteTimeser",
-      "iesAnalyticalStoreResponse\"R\n(DescribeTi" +
-      "meseriesAnalyticalStoreRequest\022\022\n\ntable_" +
-      "name\030\001 \002(\t\022\022\n\nstore_name\030\002 \002(\t\"\373\002\n)Descr" +
-      "ibeTimeseriesAnalyticalStoreResponse\022r\n\020" +
-      "analytical_store\030\001 \001(\0132X.com.alicloud.op" +
-      "enservices.tablestore.core.protocol.time" +
-      "series.TimeseriesAnalyticalStore\022i\n\tsync" +
-      "_stat\030\002 \001(\0132V.com.alicloud.openservices." +
-      "tablestore.core.protocol.timeseries.Anal" +
-      "yticalStoreSyncStat\022o\n\014storage_size\030\003 \001(",
-      "\0132Y.com.alicloud.openservices.tablestore" +
-      ".core.protocol.timeseries.AnalyticalStor" +
-      "eStorageSize\"\260\001\n&UpdateTimeseriesAnalyti" +
-      "calStoreRequest\022\022\n\ntable_name\030\001 \002(\t\022r\n\020a" +
-      "nalytical_store\030\002 \002(\0132X.com.alicloud.ope" +
-      "nservices.tablestore.core.protocol.times" +
-      "eries.TimeseriesAnalyticalStore\")\n\'Updat" +
-      "eTimeseriesAnalyticalStoreResponse*\251\001\n\026M" +
-      "etaQueryConditionType\022\027\n\023COMPOSITE_CONDI" +
-      "TION\020\001\022\031\n\025MEASUREMENT_CONDITION\020\002\022\024\n\020SOU",
-      "RCE_CONDITION\020\003\022\021\n\rTAG_CONDITION\020\004\022\031\n\025UP" +
-      "DATE_TIME_CONDITION\020\005\022\027\n\023ATTRIBUTE_CONDI" +
-      "TION\020\006*?\n\032MetaQueryCompositeOperator\022\n\n\006" +
-      "OP_AND\020\001\022\t\n\005OP_OR\020\002\022\n\n\006OP_NOT\020\003*\206\001\n\027Meta" +
-      "QuerySingleOperator\022\014\n\010OP_EQUAL\020\001\022\023\n\017OP_" +
-      "GREATER_THAN\020\002\022\024\n\020OP_GREATER_EQUAL\020\003\022\020\n\014" +
-      "OP_LESS_THAN\020\004\022\021\n\rOP_LESS_EQUAL\020\005\022\r\n\tOP_" +
-      "PREFIX\020\006*>\n\021RowsSerializeType\022\023\n\017RST_FLA" +
-      "T_BUFFER\020\000\022\024\n\020RST_PLAIN_BUFFER\020\001*0\n\016Meta" +
-      "UpdateMode\022\016\n\nMUM_NORMAL\020\000\022\016\n\nMUM_IGNORE",
-      "\020\001*A\n\027AnalyticalStoreSyncType\022\022\n\016SYNC_TY" +
-      "PE_FULL\020\001\022\022\n\016SYNC_TYPE_INCR\020\002"
+      "\002(\t\022\022\n\nstore_name\030\002 \002(\t\022\032\n\022drop_mapping_",
+      "table\030\003 \001(\010\")\n\'DeleteTimeseriesAnalytica" +
+      "lStoreResponse\"R\n(DescribeTimeseriesAnal" +
+      "yticalStoreRequest\022\022\n\ntable_name\030\001 \002(\t\022\022" +
+      "\n\nstore_name\030\002 \002(\t\"\373\002\n)DescribeTimeserie" +
+      "sAnalyticalStoreResponse\022r\n\020analytical_s" +
+      "tore\030\001 \001(\0132X.com.alicloud.openservices.t" +
+      "ablestore.core.protocol.timeseries.Times" +
+      "eriesAnalyticalStore\022i\n\tsync_stat\030\002 \001(\0132" +
+      "V.com.alicloud.openservices.tablestore.c" +
+      "ore.protocol.timeseries.AnalyticalStoreS",
+      "yncStat\022o\n\014storage_size\030\003 \001(\0132Y.com.alic" +
+      "loud.openservices.tablestore.core.protoc" +
+      "ol.timeseries.AnalyticalStoreStorageSize" +
+      "\"\260\001\n&UpdateTimeseriesAnalyticalStoreRequ" +
+      "est\022\022\n\ntable_name\030\001 \002(\t\022r\n\020analytical_st" +
+      "ore\030\002 \002(\0132X.com.alicloud.openservices.ta" +
+      "blestore.core.protocol.timeseries.Timese" +
+      "riesAnalyticalStore\")\n\'UpdateTimeseriesA" +
+      "nalyticalStoreResponse*\251\001\n\026MetaQueryCond" +
+      "itionType\022\027\n\023COMPOSITE_CONDITION\020\001\022\031\n\025ME",
+      "ASUREMENT_CONDITION\020\002\022\024\n\020SOURCE_CONDITIO" +
+      "N\020\003\022\021\n\rTAG_CONDITION\020\004\022\031\n\025UPDATE_TIME_CO" +
+      "NDITION\020\005\022\027\n\023ATTRIBUTE_CONDITION\020\006*?\n\032Me" +
+      "taQueryCompositeOperator\022\n\n\006OP_AND\020\001\022\t\n\005" +
+      "OP_OR\020\002\022\n\n\006OP_NOT\020\003*\206\001\n\027MetaQuerySingleO" +
+      "perator\022\014\n\010OP_EQUAL\020\001\022\023\n\017OP_GREATER_THAN" +
+      "\020\002\022\024\n\020OP_GREATER_EQUAL\020\003\022\020\n\014OP_LESS_THAN" +
+      "\020\004\022\021\n\rOP_LESS_EQUAL\020\005\022\r\n\tOP_PREFIX\020\006*>\n\021" +
+      "RowsSerializeType\022\023\n\017RST_FLAT_BUFFER\020\000\022\024" +
+      "\n\020RST_PLAIN_BUFFER\020\001*0\n\016MetaUpdateMode\022\016",
+      "\n\nMUM_NORMAL\020\000\022\016\n\nMUM_IGNORE\020\001*A\n\027Analyt" +
+      "icalStoreSyncType\022\022\n\016SYNC_TYPE_FULL\020\001\022\022\n" +
+      "\016SYNC_TYPE_INCR\020\002"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
       new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@@ -28021,7 +28079,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors(
           internal_static_com_alicloud_openservices_tablestore_core_protocol_timeseries_DeleteTimeseriesAnalyticalStoreRequest_fieldAccessorTable = new
             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
               internal_static_com_alicloud_openservices_tablestore_core_protocol_timeseries_DeleteTimeseriesAnalyticalStoreRequest_descriptor,
-              new java.lang.String[] { "TableName", "StoreName", },
+              new java.lang.String[] { "TableName", "StoreName", "DropMappingTable", },
               com.alicloud.openservices.tablestore.core.protocol.timeseries.Timeseries.DeleteTimeseriesAnalyticalStoreRequest.class,
               com.alicloud.openservices.tablestore.core.protocol.timeseries.Timeseries.DeleteTimeseriesAnalyticalStoreRequest.Builder.class);
           internal_static_com_alicloud_openservices_tablestore_core_protocol_timeseries_DeleteTimeseriesAnalyticalStoreResponse_descriptor =
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/timeseries/TimeseriesProtocolBuilder.java b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/timeseries/TimeseriesProtocolBuilder.java
index 79c60a2..dc71110 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/timeseries/TimeseriesProtocolBuilder.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/timeseries/TimeseriesProtocolBuilder.java
@@ -506,6 +506,8 @@ public static Timeseries.DeleteTimeseriesAnalyticalStoreRequest buildDeleteTimes
         builder.setTableName(deleteTimeseriesAnalyticalStoreRequest.getTimeseriesTableName());
         // required string store_name = 2;
         builder.setStoreName(deleteTimeseriesAnalyticalStoreRequest.getAnalyticalStoreName());
+        // optional bool drop_mapping_table = 3;
+        builder.setDropMappingTable(deleteTimeseriesAnalyticalStoreRequest.isDropMappingTable());
         return builder.build();
     }
 
diff --git a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/timeseries/timeseries.proto b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/timeseries/timeseries.proto
index 1cc0d68..ad5e999 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/core/protocol/timeseries/timeseries.proto
+++ b/src/main/java/com/alicloud/openservices/tablestore/core/protocol/timeseries/timeseries.proto
@@ -282,6 +282,7 @@ message CreateTimeseriesAnalyticalStoreResponse {}
 message DeleteTimeseriesAnalyticalStoreRequest {
   required string table_name = 1;
   required string store_name = 2;
+  optional bool drop_mapping_table = 3;
 }
 
 message DeleteTimeseriesAnalyticalStoreResponse {}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/BatchWriteRowRequest.java b/src/main/java/com/alicloud/openservices/tablestore/model/BatchWriteRowRequest.java
index d9bfe44..5f6e2df 100755
--- a/src/main/java/com/alicloud/openservices/tablestore/model/BatchWriteRowRequest.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/BatchWriteRowRequest.java
@@ -86,6 +86,12 @@ public BatchWriteRowRequest createRequestForRetry(List<BatchWriteRowResponse.Row
             }
             request.addRowChange(rowChange);
         }
+        if (this.hasSetTransactionId()) {
+            request.setTransactionId(this.getTransactionId());
+        }
+        if (this.isAtomicSet()) {
+            request.setAtomic(this.isAtomic());
+        }
         return request;
     }
 
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/IndexMeta.java b/src/main/java/com/alicloud/openservices/tablestore/model/IndexMeta.java
index da10c98..baaa2e5 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/IndexMeta.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/IndexMeta.java
@@ -2,6 +2,7 @@
 
 import com.alicloud.openservices.tablestore.core.utils.Preconditions;
 import com.alicloud.openservices.tablestore.core.utils.Jsonizable;
+import com.alicloud.openservices.tablestore.model.search.SyncStat;
 
 import java.util.*;
 
@@ -29,6 +30,8 @@ public class IndexMeta implements Jsonizable {
 
     private IndexUpdateMode indexUpdateMode = IndexUpdateMode.IUM_ASYNC_INDEX;
 
+    private SyncStat.SyncPhase indexSyncPhase;
+
 
     /**
      * 创建一个新的给定表名的<code>IndexMeta</code>实例。
@@ -136,6 +139,23 @@ public void setIndexUpdateMode(IndexUpdateMode indexUpdateMode) {
         this.indexUpdateMode = indexUpdateMode;
     }
 
+    /**
+     * 得到索引表同步阶段
+     * @return 索引表同步阶段
+     */
+    public SyncStat.SyncPhase getIndexSyncPhase() {
+        return indexSyncPhase;
+    }
+
+    /**
+     * 设置索引表同步阶段
+     *
+     * @param indexSyncPhase 索引表同步阶段
+     */
+    public void setIndexSyncPhase(SyncStat.SyncPhase indexSyncPhase) {
+        this.indexSyncPhase = indexSyncPhase;
+    }
+
     @Override
     public String toString() {
         String s = "IndexName: " + indexName + ", PrimaryKeyList ";
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/DateTimeUnit.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/DateTimeUnit.java
index 10a2aac..04bd7ed 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/DateTimeUnit.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/DateTimeUnit.java
@@ -10,4 +10,5 @@ public enum DateTimeUnit {
     HOUR,
     MINUTE,
     SECOND,
+    MILLISECOND
 }
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/DescribeSearchIndexResponse.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/DescribeSearchIndexResponse.java
index 66b81cd..a7d7fc7 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/DescribeSearchIndexResponse.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/DescribeSearchIndexResponse.java
@@ -16,11 +16,75 @@ public class DescribeSearchIndexResponse extends Response implements Jsonizable
     private List<QueryFlowWeight> queryFlowWeight;
     private Long createTime;
 
+    /**
+     *  索引状态描述
+     */
+    private IndexStatus indexStatus;
+
     /**
      * <p>索引数据的TTL时间，单位为秒。</p>
      */
     private Integer timeToLive;
 
+    /**
+     * 描述索引异步的创建状态
+     */
+    public enum IndexStatusEnum {
+        /**
+         * 索引处于待创建/创建中状态
+         */
+        PENDING("pending"),
+
+        /**
+         * 索引创建失败
+         */
+        FAILED("failed"),
+
+        /**
+         * 索引创建成功，正常运行中
+         */
+        RUNNING("running"),
+
+        /**
+         * 未知状态，请更新SDK
+         */
+        UNKNOWN("unknown");
+
+        private final String name;
+
+        IndexStatusEnum(String name) {
+            this.name = name;
+        }
+
+        public String status() {
+            return this.name;
+        }
+    }
+
+    public static class IndexStatus implements Jsonizable{
+        public IndexStatusEnum indexStatusEnum;
+        public String statusDescription;
+
+        @Override
+        public String jsonize() {
+            StringBuilder sb = new StringBuilder();
+            jsonize(sb, "\n  ");
+            return sb.toString();
+        }
+
+        @Override
+        public void jsonize(StringBuilder sb, String newline) {
+            sb.append("{");
+            sb.append("\"IndexStatusEnum\": ");
+            sb.append(indexStatusEnum.status());
+            sb.append(",");
+            sb.append(newline);
+            sb.append("\"StatusDescription: \"");
+            sb.append(statusDescription);
+            sb.append("}");
+        }
+    }
+
     public DescribeSearchIndexResponse(Response meta) {
         super(meta);
     }
@@ -88,6 +152,14 @@ public void setTimeToLive(Integer timeToLive) {
         this.timeToLive = timeToLive;
     }
 
+    public void setIndexStatus(IndexStatus indexStatus) {
+        this.indexStatus = indexStatus;
+    }
+
+    public IndexStatus getIndexStatus() {
+        return this.indexStatus;
+    }
+
     @Override
     public String jsonize() {
         StringBuilder sb = new StringBuilder();
@@ -99,6 +171,14 @@ public String jsonize() {
     public void jsonize(StringBuilder sb, String newline) {
         sb.append('{');
         sb.append(newline);
+        sb.append("\"IndexStatus\": ");
+        if (indexStatus != null) {
+            indexStatus.jsonize(sb, newline + "  ");
+        } else {
+            sb.append("null");
+        }
+        sb.append(",");
+        sb.append(newline);
         sb.append("\"IndexSchema\": ");
         if (schema != null) {
             schema.jsonize(sb, newline + "  ");
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/FieldSchema.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/FieldSchema.java
index 30601db..88aa836 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/FieldSchema.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/FieldSchema.java
@@ -6,6 +6,7 @@
 import com.alicloud.openservices.tablestore.model.search.analysis.FuzzyAnalyzerParameter;
 import com.alicloud.openservices.tablestore.model.search.analysis.SingleWordAnalyzerParameter;
 import com.alicloud.openservices.tablestore.model.search.analysis.SplitAnalyzerParameter;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorOptions;
 
 import java.util.Collections;
 import java.util.List;
@@ -52,22 +53,32 @@ public static Analyzer fromString(String value) {
      * 字段名
      */
     private String fieldName;
+
     /**
      * 字段类型,详见{@link FieldType}
      */
     private FieldType fieldType;
+
     /**
      * 是否开启索引，默认开启
      */
     private Boolean index = true;
+
     /**
      *  倒排索引的配置选项
      */
     private IndexOptions indexOptions;
+
+    /**
+     * 字段是否允许摘要和高亮
+     */
+    private Boolean enableHighlighting;
+
     /**
      * analyzer
      */
     private Analyzer analyzer;
+
     /**
      * analyzer parameter
      */
@@ -110,6 +121,11 @@ public static Analyzer fromString(String value) {
      */
     private List<String> dateFormats;
 
+    /**
+     * 当字段类型是{@link FieldType#VECTOR}向量类型时候，可以设置向量配置
+     */
+    private VectorOptions vectorOptions;
+
     public FieldSchema(String fieldName, FieldType fieldType) {
         this.fieldName = fieldName;
         this.fieldType = fieldType;
@@ -151,6 +167,15 @@ public FieldSchema setIndexOptions(IndexOptions indexOptions) {
         return this;
     }
 
+    public FieldSchema setEnableHighlighting(boolean enableHighlighting) {
+        this.enableHighlighting = enableHighlighting;
+        return this;
+    }
+
+    public Boolean isEnableHighlighting() {
+        return enableHighlighting;
+    }
+
     public Analyzer getAnalyzer() {
         return analyzer;
     }
@@ -237,6 +262,15 @@ public FieldSchema setDateFormats(List<String> dateFormats) {
         return this;
     }
 
+    public VectorOptions getVectorOptions() {
+        return vectorOptions;
+    }
+
+    public FieldSchema setVectorOptions(VectorOptions vectorOptions) {
+        this.vectorOptions = vectorOptions;
+        return this;
+    }
+
     @Override
     public String jsonize() {
         StringBuilder sb = new StringBuilder();
@@ -311,6 +345,12 @@ public void jsonize(StringBuilder sb, String newline) {
             sb.append(",");
             sb.append(newline);
         }
+        if (enableHighlighting != null) {
+            sb.append("\"EnableHighlighting\": ");
+            sb.append(enableHighlighting.toString());
+            sb.append(",");
+            sb.append(newline);
+        }
         if (store != null) {
             sb.append("\"Store\": ");
             sb.append(store.toString());
@@ -367,6 +407,13 @@ public void jsonize(StringBuilder sb, String newline) {
             }
             sb.append("]");
         }
+        if (vectorOptions != null) {
+            sb.append(",");
+            sb.append(newline);
+            sb.append("\"VectorOptions\": ");
+            sb.append(newline);
+            vectorOptions.jsonize(sb, newline);
+        }
         sb.append(newline);
         sb.append("}");
     }
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/FieldType.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/FieldType.java
index 32c16a9..0ab55fd 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/FieldType.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/FieldType.java
@@ -18,6 +18,7 @@ public enum FieldType {
     NESTED,
     GEO_POINT,
     DATE,
+    VECTOR,
     /**
      * 未知的类型，遇到该类型请升级到最新SDK版本
      */
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/SearchHit.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/SearchHit.java
new file mode 100644
index 0000000..bcb54d0
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/SearchHit.java
@@ -0,0 +1,78 @@
+package com.alicloud.openservices.tablestore.model.search;
+
+import com.alicloud.openservices.tablestore.model.Row;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightResultItem;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class SearchHit {
+    private Row row;
+
+    /**
+     * 数据行的相关性分数，
+     * <p>
+     * <b>不计算分数时为NaN</b>
+     */
+    private Double score;
+
+    /**
+     * 嵌套列的子数据行的偏移信息
+     * <p>非子文档则值为null</p>
+     */
+    private Integer nestedDocOffset;
+
+    /**
+     * 数据行的高亮片段
+     */
+    private HighlightResultItem highlightResultItem;
+
+    /**
+     * 嵌套子列信息
+     */
+    private final Map<String, SearchInnerHit> searchInnerHits = new HashMap<String, SearchInnerHit>();
+
+    public Row getRow() {
+        return row;
+    }
+
+    public void setRow(Row row) {
+        this.row = row;
+    }
+
+    public HighlightResultItem getHighlightResultItem() {
+        return highlightResultItem;
+    }
+
+    public void setHighlightResultItem(HighlightResultItem highlightResultItem) {
+        this.highlightResultItem = highlightResultItem;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+
+    public Double getScore() {
+        return this.score;
+    }
+
+    public void setOffset(Integer offset) {
+        this.nestedDocOffset = offset;
+    }
+
+    public Integer getOffset() {
+        return this.nestedDocOffset;
+    }
+
+    public void addSearchInnerHit(String path, SearchInnerHit searchInnerHit) {
+        this.searchInnerHits.put(path, searchInnerHit);
+    }
+
+    public Map<String, SearchInnerHit> getSearchInnerHits() {
+        return this.searchInnerHits;
+    }
+
+    public SearchInnerHit getSearchInnerHitByPath(String path) {
+        return this.searchInnerHits.get(path);
+    }
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/SearchInnerHit.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/SearchInnerHit.java
new file mode 100644
index 0000000..81e88e8
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/SearchInnerHit.java
@@ -0,0 +1,42 @@
+package com.alicloud.openservices.tablestore.model.search;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 嵌套列的数据行
+ */
+public class SearchInnerHit {
+    /**
+     * 嵌套列的Path目录
+     */
+    private String path;
+
+    /**
+     * 指定path下的所有数据子行的内容
+     */
+    private List<SearchHit> subSearchHits = new ArrayList<SearchHit>();
+
+    public SearchInnerHit() {
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public String getPath() {
+        return this.path;
+    }
+
+    public void addSubSearchHit(SearchHit searchHit) {
+        this.subSearchHits.add(searchHit);
+    }
+
+    public void setSubSearchHits(List<SearchHit> searchHits) {
+        this.subSearchHits = searchHits;
+    }
+
+    public List<SearchHit> getSubSearchHits() {
+        return this.subSearchHits;
+    }
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/SearchQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/SearchQuery.java
index d1fcdd5..5c67184 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/SearchQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/SearchQuery.java
@@ -7,6 +7,7 @@
 import com.alicloud.openservices.tablestore.model.search.agg.AggregationBuilder;
 import com.alicloud.openservices.tablestore.model.search.groupby.GroupBy;
 import com.alicloud.openservices.tablestore.model.search.groupby.GroupByBuilder;
+import com.alicloud.openservices.tablestore.model.search.highlight.Highlight;
 import com.alicloud.openservices.tablestore.model.search.query.Query;
 import com.alicloud.openservices.tablestore.model.search.query.QueryBuilder;
 import com.alicloud.openservices.tablestore.model.search.sort.Sort;
@@ -30,7 +31,10 @@ public class SearchQuery {
      * 查询语句
      */
     private Query query;
-
+    /**
+     * 查询高亮配置
+     */
+    private Highlight highlight;
     /**
      * 字段折叠
      * 能够实现某个字段的结果去重。
@@ -111,6 +115,15 @@ public SearchQuery setQuery(Query query) {
         return this;
     }
 
+    public Highlight getHighlight() {
+        return highlight;
+    }
+
+    public SearchQuery setHighlight(Highlight highlight) {
+        this.highlight = highlight;
+        return this;
+    }
+
     public Collapse getCollapse() {
         return collapse;
     }
@@ -161,6 +174,7 @@ public SearchQuery toCopy() {
         copy.setLimit(this.getLimit());
         copy.setOffset(this.getOffset());
         copy.setQuery(this.getQuery());
+        copy.setHighlight(this.getHighlight());
         copy.setSort(this.getSort());
         copy.setToken(this.getToken());
         return copy;
@@ -170,6 +184,7 @@ private SearchQuery(Builder builder) {
         setOffset(builder.offset);
         setLimit(builder.limit);
         setQuery(builder.query);
+        setHighlight(builder.highlight);
         setCollapse(builder.collapse);
         setSort(builder.sort);
         setGetTotalCount(builder.getTotalCount);
@@ -182,6 +197,7 @@ public static final class Builder {
         private Integer offset;
         private Integer limit;
         private Query query;
+        private Highlight highlight;
         private Collapse collapse;
         private Sort sort;
         private boolean getTotalCount = false;
@@ -211,6 +227,16 @@ public Builder query(Query query) {
             return this;
         }
 
+        public Builder highlight(Highlight highlight) {
+            this.highlight = highlight;
+            return this;
+        }
+
+        public Builder highlight(Highlight.Builder highlightBuilder) {
+            this.highlight = highlightBuilder.build();
+            return this;
+        }
+
         /**
          * 字段折叠
          * 能够实现某个字段的结果去重。
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/SearchResponse.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/SearchResponse.java
index de4d734..c258e50 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/SearchResponse.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/SearchResponse.java
@@ -2,6 +2,7 @@
 
 import java.util.List;
 
+import com.alicloud.openservices.tablestore.model.ConsumedCapacity;
 import com.alicloud.openservices.tablestore.model.Response;
 import com.alicloud.openservices.tablestore.model.Row;
 import com.alicloud.openservices.tablestore.model.search.agg.AggregationResults;
@@ -24,6 +25,11 @@ public class SearchResponse extends Response {
      */
     private List<Row> rows;
 
+    /**
+     * Search查询相关结果，封装Row行数据、Highlight高亮结果数据。
+     */
+    private List<SearchHit> searchHits;
+    
     /**
      * 是否查询成功
      */
@@ -33,6 +39,10 @@ public class SearchResponse extends Response {
 
     private long bodyBytes;
 
+    private ConsumedCapacity consumed;
+
+    private ConsumedCapacity reservedConsumed;
+
     private AggregationResults aggregationResults;
 
     private GroupByResults groupByResults;
@@ -77,6 +87,14 @@ public void setRows(List<Row> rows) {
         this.rows = rows;
     }
 
+    public List<SearchHit> getSearchHits() {
+        return searchHits;
+    }
+
+    public void setSearchHits(List<SearchHit> searchHits) {
+        this.searchHits = searchHits;
+    }
+
     public boolean isAllSuccess() {
         return isAllSuccess;
     }
@@ -100,6 +118,22 @@ public void setBodyBytes(long bodyBytes) {
         this.bodyBytes = bodyBytes;
     }
 
+    public void setConsumed(ConsumedCapacity consumed) {
+        this.consumed = consumed;
+    }
+
+    public ConsumedCapacity getConsumed() {
+        return this.consumed;
+    }
+
+    public void setReservedConsumed(ConsumedCapacity reservedConsumed) {
+        this.reservedConsumed = reservedConsumed;
+    }
+
+    public ConsumedCapacity getReservedConsumed() {
+        return this.reservedConsumed;
+    }
+
     public String getResponseInfo(boolean prettyFormat) {
         GsonBuilder builder = new GsonBuilder()
             .disableHtmlEscaping()
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/groupby/GroupByDateHistogram.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/groupby/GroupByDateHistogram.java
index a9a2e62..f880b12 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/groupby/GroupByDateHistogram.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/groupby/GroupByDateHistogram.java
@@ -41,6 +41,10 @@ public class GroupByDateHistogram implements GroupBy {
      * <p>如果一个文档缺少该字段，则采用什么默认值</p>
      */
     private ColumnValue missing;
+    /**
+     * 分组偏差量
+     */
+    private DateTimeValue offset;
     /**
      * 最小文档数
      */
@@ -73,6 +77,7 @@ private GroupByDateHistogram(Builder builder) {
         fieldRange = builder.fieldRange;
         groupBySorters = builder.groupBySorters;
         missing = builder.missing;
+        offset = builder.offset;
         minDocCount = builder.minDocCount;
         timeZone = builder.timeZone;
         subAggregations = builder.subAggregations;
@@ -135,6 +140,20 @@ public GroupByDateHistogram setMissing(ColumnValue missing) {
         return this;
     }
 
+    public DateTimeValue getOffset() {
+        return offset;
+    }
+
+    public GroupByDateHistogram setOffset(DateTimeValue offset) {
+        this.offset = offset;
+        return this;
+    }
+
+    public GroupByDateHistogram setOffset(Integer value, DateTimeUnit unit) {
+        this.offset = new DateTimeValue(value, unit);
+        return this;
+    }
+
     public String getTimeZone() {
         return timeZone;
     }
@@ -205,6 +224,7 @@ public static final class Builder implements GroupByBuilder {
         private DateTimeValue interval;
         private FieldRange fieldRange;
         private ColumnValue missing;
+        private DateTimeValue offset;
         private String timeZone;
         private Long minDocCount;
         private List<GroupBySorter> groupBySorters;
@@ -263,6 +283,11 @@ public Builder missing(Object missing) {
             return this;
         }
 
+        public Builder offset(Integer value, DateTimeUnit unit) {
+            this.offset = new DateTimeValue(value, unit);
+            return this;
+        }
+
         public Builder minDocCount(long minDocCount) {
             this.minDocCount = minDocCount;
             return this;
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/groupby/GroupByHistogram.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/groupby/GroupByHistogram.java
index 88d7c00..f0ce020 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/groupby/GroupByHistogram.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/groupby/GroupByHistogram.java
@@ -38,6 +38,10 @@ public class GroupByHistogram implements GroupBy {
      * <p>如果一个文档缺少该字段，则采用什么默认值</p>
      */
     private ColumnValue missing;
+    /**
+     * 分组偏差量
+     */
+    private ColumnValue offset;
     /**
      * 排序
      */
@@ -69,6 +73,7 @@ private GroupByHistogram(Builder builder) {
         interval = builder.interval;
         groupBySorters = builder.groupBySorters;
         missing = builder.missing;
+        offset = builder.offset;
         minDocCount = builder.minDocCount;
         fieldRange = builder.fieldRange;
         subAggregations = builder.subAggregations;
@@ -110,6 +115,10 @@ public ColumnValue getMissing() {
         return missing;
     }
 
+    public ColumnValue getOffset() {
+        return offset;
+    }
+
     public List<GroupBySorter> getGroupBySorters() {
         return groupBySorters;
     }
@@ -156,6 +165,11 @@ public GroupByHistogram setMissing(ColumnValue missing) {
         return this;
     }
 
+    public GroupByHistogram setOffset(ColumnValue offset) {
+        this.offset = offset;
+        return this;
+    }
+
     public GroupByHistogram setFieldRange(FieldRange fieldRange) {
         this.fieldRange = fieldRange;
         return this;
@@ -177,6 +191,7 @@ public static final class Builder implements GroupByBuilder {
         private String fieldName;
         private ColumnValue interval;
         private ColumnValue missing;
+        private ColumnValue offset;
         private Long minDocCount;
         private List<GroupBySorter> groupBySorters;
         private FieldRange fieldRange;
@@ -210,6 +225,11 @@ public Builder missing(Object missing) {
             return this;
         }
 
+        public Builder offset(Object offset) {
+            this.offset = ValueUtil.toColumnValue(offset);
+            return this;
+        }
+
         public Builder minDocCount(Long minDocCount) {
             this.minDocCount = minDocCount;
             return this;
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/Highlight.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/Highlight.java
new file mode 100644
index 0000000..5d06145
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/Highlight.java
@@ -0,0 +1,107 @@
+package com.alicloud.openservices.tablestore.model.search.highlight;
+
+import com.alicloud.openservices.tablestore.model.search.query.MatchAllQuery;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Highlight {
+    /**
+     * 高亮分片的编码方式，作用于所有需要高亮的字段
+     */
+    private HighlightEncoder highlightEncoder = HighlightEncoder.PLAIN;
+    /**
+     * 字段高亮参数设置，仅支持设置Query中有关键字查询的字段。
+     * 例如:{@link MatchAllQuery}查询不支持高亮
+     */
+    private Map<String, HighlightParameter> fieldHighlightParams = new HashMap<String, HighlightParameter>();
+
+    public Highlight() {
+    }
+
+    public Highlight(Map<String, HighlightParameter> fieldHighlightParams) {
+        this.fieldHighlightParams = fieldHighlightParams;
+    }
+
+    public Highlight(HighlightEncoder highlightEncoder, Map<String, HighlightParameter> fieldHighlightParams) {
+        this.highlightEncoder = highlightEncoder;
+        this.fieldHighlightParams = fieldHighlightParams;
+    }
+
+    public Highlight(Highlight.Builder builder) {
+        this(builder.highlightEncoder, builder.fieldHighlightParams);
+    }
+
+    public static Highlight.Builder newBuilder() {
+        return new Highlight.Builder();
+    }
+
+    public HighlightEncoder getHighlightEncoder() {
+        return highlightEncoder;
+    }
+
+    public Highlight setHighlightEncoder(HighlightEncoder highlightEncoder) {
+        this.highlightEncoder = highlightEncoder;
+        return this;
+    }
+
+    public Map<String, HighlightParameter> getFieldHighlightParams() {
+        return fieldHighlightParams;
+    }
+
+    public Highlight setFieldHighlightParams(Map<String, HighlightParameter> fieldHighlightParams) {
+        this.fieldHighlightParams = fieldHighlightParams;
+        return this;
+    }
+
+    public Highlight addFieldHighlightParam(String fieldName, HighlightParameter highlightParameter) {
+        this.fieldHighlightParams.put(fieldName, highlightParameter);
+        return this;
+    }
+
+    public static final class Builder {
+        private HighlightEncoder highlightEncoder = HighlightEncoder.PLAIN;
+
+        private Map<String, HighlightParameter> fieldHighlightParams = new HashMap<String, HighlightParameter>();
+
+        public Builder() {
+        }
+
+        /**
+         * 设置高亮片段编码模式
+         *
+         * @param highlightEncoder
+         * @return {@link Highlight.Builder}
+         */
+        public Builder highlightEncoder(HighlightEncoder highlightEncoder) {
+            this.highlightEncoder = highlightEncoder;
+            return this;
+        }
+
+        /**
+         * 设置高亮字段及高亮参数
+         *
+         * @param fieldHighlightParams
+         * @return {@link Highlight.Builder}
+         */
+        public Builder fieldHighlightParams(Map<String, HighlightParameter> fieldHighlightParams) {
+            this.fieldHighlightParams = fieldHighlightParams;
+            return this;
+        }
+
+        /**
+         * 添加高亮字段对应的高亮参数
+         * @param fieldName
+         * @param highlightParameter
+         * @return {@link Highlight.Builder}
+         */
+        public Builder addFieldHighlightParam(String fieldName, HighlightParameter highlightParameter) {
+            this.fieldHighlightParams.put(fieldName, highlightParameter);
+            return this;
+        }
+
+        public Highlight build() {
+            return new Highlight(this);
+        }
+    }
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/HighlightEncoder.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/HighlightEncoder.java
new file mode 100644
index 0000000..852744f
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/HighlightEncoder.java
@@ -0,0 +1,9 @@
+package com.alicloud.openservices.tablestore.model.search.highlight;
+
+/**
+ * 高亮分片原文的编码模式，默认不编码。
+ */
+public enum HighlightEncoder {
+    PLAIN,
+    HTML
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/HighlightField.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/HighlightField.java
new file mode 100644
index 0000000..27bcdc6
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/HighlightField.java
@@ -0,0 +1,23 @@
+package com.alicloud.openservices.tablestore.model.search.highlight;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 一行数据中，每个需高亮的Field字段，对应一个{@link HighlightField}
+ */
+public class HighlightField {
+    /**
+     * 高亮分片的具体内容
+     */
+    private List<String> fragments = new ArrayList<String>();
+
+
+    public List<String> getFragments() {
+        return fragments;
+    }
+
+    public void setFragments(List<String> fragments) {
+        this.fragments = fragments;
+    }
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/HighlightFragmentOrder.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/HighlightFragmentOrder.java
new file mode 100644
index 0000000..9d7351c
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/HighlightFragmentOrder.java
@@ -0,0 +1,10 @@
+package com.alicloud.openservices.tablestore.model.search.highlight;
+
+/**
+ * 高亮字段返回多个分片时，分片的排序规则。默认为片段在文本中出现的顺序。
+ * SCORE: 根据命中关键词评分排序多个分片
+ */
+public enum HighlightFragmentOrder {
+    TEXT_SEQUENCE,
+    SCORE
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/HighlightParameter.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/HighlightParameter.java
new file mode 100644
index 0000000..5e37110
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/HighlightParameter.java
@@ -0,0 +1,162 @@
+package com.alicloud.openservices.tablestore.model.search.highlight;
+
+public class HighlightParameter {
+    /**
+     * 返回高亮分片的最大数量
+     */
+    private Integer numberOfFragments;
+
+    /**
+     * 每个分片的长度。实际返回分片的长度不会与改值严格相等
+     */
+    private Integer fragmentSize;
+
+    /**
+     * 查询关键词高亮的前置Tag，例如<em>
+     */
+    private String preTag;
+
+    /**
+     * 查询关键词高亮的后置Tag，例如</em>
+     */
+    private String postTag;
+
+    /**
+     * 多个字段分片的返回顺序
+     */
+    private HighlightFragmentOrder highlightFragmentOrder;
+
+    public HighlightParameter() {
+    }
+
+    public HighlightParameter(HighlightParameter.Builder builder) {
+        setNumberOfFragments(builder.numberOfFragments);
+        setFragmentSize(builder.fragmentSize);
+        setPreTag(builder.preTag);
+        setPostTag(builder.postTag);
+        setHighlightFragmentOrder(builder.highlightFragmentOrder);
+    }
+
+    public static HighlightParameter.Builder newBuilder() {
+        return new HighlightParameter.Builder();
+    }
+
+    public Integer getNumberOfFragments() {
+        return numberOfFragments;
+    }
+
+    public HighlightParameter setNumberOfFragments(Integer numberOfFragments) {
+        this.numberOfFragments = numberOfFragments;
+        return this;
+    }
+
+    public Integer getFragmentSize() {
+        return fragmentSize;
+    }
+
+    public HighlightParameter setFragmentSize(Integer fragmentSize) {
+        this.fragmentSize = fragmentSize;
+        return this;
+    }
+
+    public String getPreTag() {
+        return preTag;
+    }
+
+    public HighlightParameter setPreTag(String preTag) {
+        this.preTag = preTag;
+        return this;
+    }
+
+    public String getPostTag() {
+        return postTag;
+    }
+
+    public HighlightParameter setPostTag(String postTag) {
+        this.postTag = postTag;
+        return this;
+    }
+
+    public HighlightFragmentOrder getHighlightFragmentOrder() {
+        return highlightFragmentOrder;
+    }
+
+    public HighlightParameter setHighlightFragmentOrder(HighlightFragmentOrder highlightFragmentOrder) {
+        this.highlightFragmentOrder = highlightFragmentOrder;
+        return this;
+    }
+
+    public static final class Builder {
+        private Integer numberOfFragments;
+
+        private Integer fragmentSize;
+
+        private String preTag;
+
+        private String postTag;
+
+        private HighlightFragmentOrder highlightFragmentOrder;
+
+        public Builder() {
+        }
+
+        /**
+         * 设置单个字段最大返回分片数量
+         *
+         * @param numberOfFragments
+         * @return  {@link Builder}
+         */
+        public Builder numberOfFragments(Integer numberOfFragments) {
+            this.numberOfFragments = numberOfFragments;
+            return this;
+        }
+
+        /**
+         * 设置每个分片的长度。<b>模糊值</b>
+         *
+         * @param fragmentSize
+         * @return {@link Builder}
+         */
+        public Builder fragmentSize(Integer fragmentSize) {
+            this.fragmentSize = fragmentSize;
+            return this;
+        }
+
+        /**
+         * 设置关键词高亮前置tag，<b>需同时设置postTag</b>
+         *
+         * @param preTag
+         * @return {@link Builder}
+         */
+        public Builder preTag(String preTag) {
+            this.preTag = preTag;
+            return this;
+        }
+
+        /**
+         * 设置关键词高亮后置tag，<b>需同时设置preTag</b>
+         *
+         * @param postTag
+         * @return {@link Builder}
+         */
+        public Builder postTag(String postTag) {
+            this.postTag = postTag;
+            return this;
+        }
+
+        /**
+         * 设置多个高亮分片的排序模式
+         *
+         * @param highlightFragmentOrder
+         * @return {@link Builder}
+         */
+        public Builder highlightFragmentOrder(HighlightFragmentOrder highlightFragmentOrder) {
+            this.highlightFragmentOrder = highlightFragmentOrder;
+            return this;
+        }
+
+        public HighlightParameter build() {
+            return new HighlightParameter(this);
+        }
+    }
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/HighlightResultItem.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/HighlightResultItem.java
new file mode 100644
index 0000000..5fbe4e8
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/highlight/HighlightResultItem.java
@@ -0,0 +1,33 @@
+package com.alicloud.openservices.tablestore.model.search.highlight;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 单行数据中，所有查询高亮字段的结果
+ */
+public class HighlightResultItem {
+    private Map<String, HighlightField> highlightFields = new HashMap<String, HighlightField>();
+
+    public Map<String, HighlightField> getHighlightFields() {
+        return highlightFields;
+    }
+
+    public void setHighlightFields(Map<String, HighlightField> highlightFields) {
+        this.highlightFields = highlightFields;
+    }
+
+    public void addHighlightField(String fieldName, HighlightField highlightField) {
+        this.highlightFields.put(fieldName, highlightField);
+    }
+
+    /**
+     * 通过字段名获取该字段高亮结果。若无高亮结果，则返回值为{@code null}
+     *
+     * @param fieldName
+     * @return HighlightField
+     */
+    public HighlightField getHighlightFieldByName(String fieldName) {
+        return this.highlightFields.get(fieldName);
+    }
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/BoolQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/BoolQuery.java
index c9e2b86..538373e 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/BoolQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/BoolQuery.java
@@ -16,7 +16,7 @@
  */
 public class BoolQuery implements Query {
 
-    private QueryType queryType = QueryType.QueryType_BoolQuery;
+    private final QueryType queryType = QueryType.QueryType_BoolQuery;
 
     /**
      * 文档必须完全匹配所有的子query
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/ConstScoreQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/ConstScoreQuery.java
index 7eaa79b..760fd45 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/ConstScoreQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/ConstScoreQuery.java
@@ -10,7 +10,7 @@
  */
 public class ConstScoreQuery implements Query {
 
-    private QueryType queryType = QueryType.QueryType_ConstScoreQuery;
+    private final QueryType queryType = QueryType.QueryType_ConstScoreQuery;
 
     private Query filter;
 
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/ExistsQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/ExistsQuery.java
index 0de9079..c000703 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/ExistsQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/ExistsQuery.java
@@ -8,7 +8,7 @@
  */
 public class ExistsQuery implements Query {
 
-    private QueryType queryType = QueryType.QueryType_ExistsQuery;
+    private final QueryType queryType = QueryType.QueryType_ExistsQuery;
 
     private String fieldName;
 
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/FunctionScoreQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/FunctionScoreQuery.java
index aecf59f..8b8860d 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/FunctionScoreQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/FunctionScoreQuery.java
@@ -9,7 +9,7 @@
  */
 public class FunctionScoreQuery implements Query {
 
-    private QueryType queryType = QueryType.QueryType_FunctionScoreQuery;
+    private final QueryType queryType = QueryType.QueryType_FunctionScoreQuery;
 
     /**
      * 正常的{@link Query}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/GeoBoundingBoxQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/GeoBoundingBoxQuery.java
index 94b43a6..d3e901d 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/GeoBoundingBoxQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/GeoBoundingBoxQuery.java
@@ -10,7 +10,7 @@
  */
 public class GeoBoundingBoxQuery implements Query {
 
-    private QueryType queryType = QueryType.QueryType_GeoBoundingBoxQuery;
+    private final QueryType queryType = QueryType.QueryType_GeoBoundingBoxQuery;
 
     private String fieldName;
     /**
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/GeoDistanceQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/GeoDistanceQuery.java
index de39f56..fa91794 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/GeoDistanceQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/GeoDistanceQuery.java
@@ -10,7 +10,7 @@
  */
 public class GeoDistanceQuery implements Query {
 
-    private QueryType queryType = QueryType.QueryType_GeoDistanceQuery;
+    private final QueryType queryType = QueryType.QueryType_GeoDistanceQuery;
 
     /**
      * 字段名
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/GeoPolygonQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/GeoPolygonQuery.java
index d4ff7d8..d7b7a1e 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/GeoPolygonQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/GeoPolygonQuery.java
@@ -13,7 +13,7 @@
  */
 public class GeoPolygonQuery implements Query {
 
-    private QueryType queryType = QueryType.QueryType_GeoPolygonQuery;
+    private final QueryType queryType = QueryType.QueryType_GeoPolygonQuery;
 
     /**
      * 字段名
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/InnerHits.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/InnerHits.java
new file mode 100644
index 0000000..a9827b2
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/InnerHits.java
@@ -0,0 +1,97 @@
+package com.alicloud.openservices.tablestore.model.search.query;
+
+import com.alicloud.openservices.tablestore.core.protocol.Search;
+import com.alicloud.openservices.tablestore.model.search.highlight.Highlight;
+import com.alicloud.openservices.tablestore.model.search.sort.Sort;
+
+public class InnerHits {
+    /**
+     * nested子列的返回时的排序规则
+     */
+    private Sort sort;
+    /**
+     * 当nested子列为数组形式时，子列分页返回的起始位置
+     */
+    private Integer offset;
+    /**
+     * 当nested子列为数组形式时，子列分页返回的行数
+     */
+    private Integer limit;
+
+    /**
+     * nested子列高亮参数配置
+     */
+    private Highlight highlight;
+
+    public void setSort(Sort sort) {
+        this.sort = sort;
+    }
+
+    public Sort getSort() {
+        return this.sort;
+    }
+
+    public void setOffset(Integer offset) {
+        this.offset = offset;
+    }
+
+    public Integer getOffset() {
+        return this.offset;
+    }
+
+    public void setLimit(Integer limit) {
+        this.limit = limit;
+    }
+
+    public Integer getLimit() {
+        return this.limit;
+    }
+
+    public void setHighlight(Highlight highlight) {
+        this.highlight = highlight;
+    }
+
+    public Highlight getHighlight() {
+        return this.highlight;
+    }
+
+    public static InnerHits.Builder newBuilder() {
+        return new InnerHits.Builder();
+    }
+
+    public static final class Builder {
+        private Sort sort;
+        private Integer offset;
+        private Integer limit;
+        private Highlight highlight;
+
+        public Builder sort(Sort sort) {
+            this.sort = sort;
+            return this;
+        }
+
+        public Builder offset(int offset) {
+            this.offset = offset;
+            return this;
+        }
+
+        public Builder limit(int limit) {
+            this.limit = limit;
+            return this;
+        }
+
+        public Builder highlight(Highlight highlight) {
+            this.highlight = highlight;
+            return this;
+        }
+
+        public InnerHits build() {
+            InnerHits innerHits = new InnerHits();
+            innerHits.setSort(this.sort);
+            innerHits.setOffset(this.offset);
+            innerHits.setLimit(this.limit);
+            innerHits.setHighlight(this.highlight);
+            return innerHits;
+        }
+    }
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/KnnVectorQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/KnnVectorQuery.java
new file mode 100644
index 0000000..a9c7443
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/KnnVectorQuery.java
@@ -0,0 +1,139 @@
+package com.alicloud.openservices.tablestore.model.search.query;
+
+import com.alicloud.openservices.tablestore.core.protocol.SearchQueryBuilder;
+import com.google.protobuf.ByteString;
+
+
+/**
+ * K最邻近查询
+ */
+public class KnnVectorQuery implements Query {
+
+    private final QueryType queryType = QueryType.QueryType_KnnVectorQuery;
+
+    /**
+     * 字段名
+     */
+    private String fieldName;
+
+    /**
+     * 查询最邻近的topK个值
+     */
+    private Integer topK;
+
+    /**
+     * 当索引字段类型是 float32 时候，使用该字段进行查询。
+     */
+    private float[] float32QueryVector;
+
+    /**
+     * 查询过滤器
+     */
+    private Query filter;
+
+    private Float weight;
+
+    public KnnVectorQuery() {
+    }
+
+    public String getFieldName() {
+        return fieldName;
+    }
+
+    public KnnVectorQuery setFieldName(String fieldName) {
+        this.fieldName = fieldName;
+        return this;
+    }
+
+    public Integer getTopK() {
+        return topK;
+    }
+
+    public KnnVectorQuery setTopK(Integer topK) {
+        this.topK = topK;
+        return this;
+    }
+
+    public float[] getFloat32QueryVector() {
+        return float32QueryVector;
+    }
+
+    public KnnVectorQuery setFloat32QueryVector(float[] float32QueryVector) {
+        this.float32QueryVector = float32QueryVector;
+        return this;
+    }
+    public Query getFilter() {
+        return filter;
+    }
+
+    public KnnVectorQuery setFilter(Query queryFilter) {
+        this.filter = queryFilter;
+        return this;
+    }
+
+    public KnnVectorQuery setFilter(QueryBuilder queryFilter) {
+        this.filter = queryFilter.build();
+        return this;
+    }
+
+    public Float getWeight() {
+        return weight;
+    }
+
+    public KnnVectorQuery setWeight(Float weight) {
+        this.weight = weight;
+        return this;
+    }
+
+    @Override
+    public QueryType getQueryType() {
+        return queryType;
+    }
+
+    @Override
+    public ByteString serialize() {
+        return SearchQueryBuilder.buildKnnVectorQuery(this).toByteString();
+    }
+
+    protected static KnnVectorQuery.Builder newBuilder() {
+        return new KnnVectorQuery.Builder();
+    }
+
+
+    public static final class Builder implements QueryBuilder {
+
+        private final KnnVectorQuery knnVectorQuery;
+
+        private Builder() {
+            knnVectorQuery = new KnnVectorQuery();
+        }
+
+        public Builder field(String fieldName) {
+            knnVectorQuery.setFieldName(fieldName);
+            return this;
+        }
+
+        public Builder topK(Integer topK) {
+            knnVectorQuery.setTopK(topK);
+            return this;
+        }
+
+        public Builder queryVector(float[] float32QueryVector) {
+            knnVectorQuery.setFloat32QueryVector(float32QueryVector);
+            return this;
+        }
+        public Builder filter(Query filter) {
+            knnVectorQuery.setFilter(filter);
+            return this;
+        }
+
+        public Builder weight(Float weight) {
+            knnVectorQuery.setWeight(weight);
+            return this;
+        }
+
+        public KnnVectorQuery build() {
+            return knnVectorQuery;
+        }
+    }
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/MatchAllQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/MatchAllQuery.java
index f456674..ea2a3d8 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/MatchAllQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/MatchAllQuery.java
@@ -8,7 +8,7 @@
  */
 public class MatchAllQuery implements Query {
 
-    private QueryType queryType = QueryType.QueryType_MatchAllQuery;
+    private final QueryType queryType = QueryType.QueryType_MatchAllQuery;
 
     @Override
     public QueryType getQueryType() {
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/MatchPhraseQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/MatchPhraseQuery.java
index 04de617..223733e 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/MatchPhraseQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/MatchPhraseQuery.java
@@ -8,7 +8,7 @@
  */
 public class MatchPhraseQuery implements Query {
 
-    private QueryType queryType = QueryType.QueryType_MatchPhraseQuery;
+    private final QueryType queryType = QueryType.QueryType_MatchPhraseQuery;
 
     private String fieldName;
     private String text;
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/MatchQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/MatchQuery.java
index 748a985..88cc89c 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/MatchQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/MatchQuery.java
@@ -8,7 +8,7 @@
  */
 public class MatchQuery implements Query {
 
-    private QueryType queryType = QueryType.QueryType_MatchQuery;
+    private final QueryType queryType = QueryType.QueryType_MatchQuery;
 
     /**
      * 字段
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/NestedQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/NestedQuery.java
index 7622fc9..d914a24 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/NestedQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/NestedQuery.java
@@ -10,7 +10,7 @@
  */
 public class NestedQuery implements Query {
 
-    private QueryType queryType = QueryType.QueryType_NestedQuery;
+    private final QueryType queryType = QueryType.QueryType_NestedQuery;
 
     /**
      * 嵌套文档的路径
@@ -25,6 +25,11 @@ public class NestedQuery implements Query {
      */
     private ScoreMode scoreMode;
 
+    /**
+     * 获取嵌套文档子文档信息的相关参数
+     */
+    private InnerHits innerHits;
+
     private float weight = 1.0f;
 
     @Override
@@ -53,6 +58,14 @@ public void setQuery(Query query) {
         this.query = query;
     }
 
+    public void setInnerHits(InnerHits innerHits) {
+        this.innerHits = innerHits;
+    }
+
+    public InnerHits getInnerHits() {
+        return this.innerHits;
+    }
+
     public ScoreMode getScoreMode() {
         return scoreMode;
     }
@@ -77,6 +90,7 @@ public static final class Builder implements QueryBuilder {
         private String path;
         private Query query;
         private ScoreMode scoreMode;
+        private InnerHits innerHits;
         private float weight = 1.0f;
 
         public Builder weight(float weight) {
@@ -91,6 +105,11 @@ public Builder path(String path) {
             return this;
         }
 
+        public Builder innerHits(InnerHits innerHits) {
+            this.innerHits = innerHits;
+            return this;
+        }
+
         public Builder query(QueryBuilder queryBuilder) {
             this.query = queryBuilder.build();
             return this;
@@ -113,6 +132,7 @@ public NestedQuery build() {
             nestedQuery.setQuery(this.query);
             nestedQuery.setWeight(this.weight);
             nestedQuery.setScoreMode(this.scoreMode);
+            nestedQuery.setInnerHits(this.innerHits);
             return nestedQuery;
         }
     }
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/PrefixQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/PrefixQuery.java
index efd6ee9..8a0762a 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/PrefixQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/PrefixQuery.java
@@ -8,7 +8,7 @@
  */
 public class PrefixQuery implements Query {
 
-    private QueryType queryType = QueryType.QueryType_PrefixQuery;
+    private final QueryType queryType = QueryType.QueryType_PrefixQuery;
 
     private String fieldName;
     /**
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/QueryBuilders.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/QueryBuilders.java
index 0c0437c..9412c3a 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/QueryBuilders.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/QueryBuilders.java
@@ -66,4 +66,7 @@ public static WildcardQuery.Builder wildcard(String fieldName, String value) {
         return WildcardQuery.newBuilder().field(fieldName).value(value);
     }
 
+    public static KnnVectorQuery.Builder knnVector(String fieldName, int topK, float[] queryVector) {
+        return KnnVectorQuery.newBuilder().field(fieldName).topK(topK).queryVector(queryVector);
+    }
 }
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/QueryType.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/QueryType.java
index d4b286b..3a36eb2 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/QueryType.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/QueryType.java
@@ -21,4 +21,5 @@ public enum QueryType {
     QueryType_GeoPolygonQuery,
     QueryType_TermsQuery,
     QueryType_ExistsQuery,
+    QueryType_KnnVectorQuery,
 }
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/RangeQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/RangeQuery.java
index 2653886..20b08e4 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/RangeQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/RangeQuery.java
@@ -10,7 +10,7 @@
  */
 public class RangeQuery implements Query {
 
-    private QueryType queryType = QueryType.QueryType_RangeQuery;
+    private final QueryType queryType = QueryType.QueryType_RangeQuery;
     /**
      * 字段名
      */
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/TermQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/TermQuery.java
index 563354b..db2bfd6 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/TermQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/TermQuery.java
@@ -10,7 +10,7 @@
  */
 public class TermQuery implements Query {
 
-    private QueryType queryType = QueryType.QueryType_TermQuery;
+    private final QueryType queryType = QueryType.QueryType_TermQuery;
 
     private String fieldName;
     private ColumnValue term;
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/TermsQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/TermsQuery.java
index 6c56a16..a948e63 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/TermsQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/TermsQuery.java
@@ -13,7 +13,7 @@
  */
 public class TermsQuery implements Query {
 
-    private QueryType queryType = QueryType.QueryType_TermsQuery;
+    private final QueryType queryType = QueryType.QueryType_TermsQuery;
 
     private String fieldName;
     private List<ColumnValue> terms;
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/WildcardQuery.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/WildcardQuery.java
index f5e48a4..913edd3 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/search/query/WildcardQuery.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/query/WildcardQuery.java
@@ -9,7 +9,7 @@
  */
 public class WildcardQuery implements Query {
 
-    private QueryType queryType = QueryType.QueryType_WildcardQuery;
+    private final QueryType queryType = QueryType.QueryType_WildcardQuery;
 
     private String fieldName;
     private String value;
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/sort/DocSort.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/sort/DocSort.java
new file mode 100644
index 0000000..3541658
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/sort/DocSort.java
@@ -0,0 +1,29 @@
+package com.alicloud.openservices.tablestore.model.search.sort;
+
+import com.alicloud.openservices.tablestore.model.search.ScanQuery;
+import com.alicloud.openservices.tablestore.model.search.query.InnerHits;
+
+/**
+ * 按照数据行在多元索引中的存储顺序排序
+ * <p> 1. {@link ScanQuery} 默认采取的排序方式;顺序具有易变性,业务上请勿依赖此排序
+ * <p> 2. {@link InnerHits} Nested子行的默认排序方式
+ * <p> 3. 包含Nested字段的索引，查询时默认采取的排序方式
+ * <p> <b>该排序方式仅支持在InnerHits内显式设置</b>
+ */
+public class DocSort implements Sort.Sorter {
+    private SortOrder order = SortOrder.ASC;
+
+    public DocSort() {}
+
+    public DocSort(SortOrder order) {
+        this.order = order;
+    }
+
+    public SortOrder getOrder() {
+        return order;
+    }
+
+    public void setOrder(SortOrder order) {
+        this.order = order;
+    }
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/HNSWIndexParameter.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/HNSWIndexParameter.java
new file mode 100644
index 0000000..21c3f9b
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/HNSWIndexParameter.java
@@ -0,0 +1,63 @@
+package com.alicloud.openservices.tablestore.model.search.vector;
+
+import com.alicloud.openservices.tablestore.core.protocol.Search;
+import com.google.protobuf.ByteString;
+
+public class HNSWIndexParameter implements VectorIndexParameter {
+    private Integer m;
+    private Integer efConstruction;
+
+    public HNSWIndexParameter() {
+    }
+
+    public HNSWIndexParameter(Integer m, Integer efConstruction) {
+        this.m = m;
+        this.efConstruction = efConstruction;
+    }
+
+    public Integer getM() {
+        return m;
+    }
+
+    public void setM(Integer m) {
+        this.m = m;
+    }
+
+    public Integer getEfConstruction() {
+        return efConstruction;
+    }
+
+    public void setEfConstruction(Integer efConstruction) {
+        this.efConstruction = efConstruction;
+    }
+
+    @Override
+    public ByteString serialize() {
+        Search.HNSWIndexParameter.Builder builder = Search.HNSWIndexParameter.newBuilder();
+        if (m != null) {
+            builder.setM(m);
+        }
+        if (efConstruction != null) {
+            builder.setEfConstruction(efConstruction);
+        }
+        return builder.build().toByteString();
+    }
+
+    @Override
+    public String jsonize() {
+        StringBuilder stringBuilder = new StringBuilder();
+        jsonize(stringBuilder, "");
+        return stringBuilder.toString();
+    }
+
+    @Override
+    public void jsonize(StringBuilder sb, String newline) {
+        sb.append('{');
+        sb.append(newline);
+        sb.append("\"m\": ").append(m).append(",");
+        sb.append(newline);
+        sb.append("\"efConstruction\": ").append(efConstruction);
+        sb.append(newline);
+        sb.append('}');
+    }
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/VectorDataType.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/VectorDataType.java
new file mode 100644
index 0000000..7c0e03e
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/VectorDataType.java
@@ -0,0 +1,5 @@
+package com.alicloud.openservices.tablestore.model.search.vector;
+
+public enum VectorDataType {
+    FLOAT_32;
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/VectorIndexParameter.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/VectorIndexParameter.java
new file mode 100644
index 0000000..2588e24
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/VectorIndexParameter.java
@@ -0,0 +1,8 @@
+package com.alicloud.openservices.tablestore.model.search.vector;
+
+import com.alicloud.openservices.tablestore.core.utils.Jsonizable;
+import com.google.protobuf.ByteString;
+
+public interface VectorIndexParameter extends Jsonizable {
+    ByteString serialize();
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/VectorIndexType.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/VectorIndexType.java
new file mode 100644
index 0000000..d8123ab
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/VectorIndexType.java
@@ -0,0 +1,5 @@
+package com.alicloud.openservices.tablestore.model.search.vector;
+
+public enum VectorIndexType {
+    HNSW;
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/VectorMetricType.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/VectorMetricType.java
new file mode 100644
index 0000000..c9d510c
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/VectorMetricType.java
@@ -0,0 +1,7 @@
+package com.alicloud.openservices.tablestore.model.search.vector;
+
+public enum VectorMetricType {
+    EUCLIDEAN,
+    COSINE,
+    DOT_PRODUCT;
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/VectorOptions.java b/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/VectorOptions.java
new file mode 100644
index 0000000..4e2119d
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/search/vector/VectorOptions.java
@@ -0,0 +1,110 @@
+package com.alicloud.openservices.tablestore.model.search.vector;
+
+
+import com.alicloud.openservices.tablestore.core.utils.Jsonizable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class VectorOptions implements Jsonizable {
+    /**
+     * 向量的存储类型
+     */
+    private VectorDataType dataType;
+
+    /**
+     * 向量的维度
+     */
+    private Integer dimension;
+
+    /**
+     * 向量的相似度度量方式
+     */
+    private VectorMetricType metricType;
+
+    /**
+     * 向量索引的参数配置
+     */
+    private VectorIndexParameter indexParameter;
+
+    public VectorOptions() {
+    }
+
+    public VectorOptions(VectorDataType dataType, int dimension, VectorMetricType metricType, VectorIndexParameter indexParameter) {
+        this.dataType = dataType;
+        this.dimension = dimension;
+        this.metricType = metricType;
+        this.indexParameter = indexParameter;
+    }
+
+    public VectorDataType getDataType() {
+        return dataType;
+    }
+
+    public VectorOptions setDataType(VectorDataType dataType) {
+        this.dataType = dataType;
+        return this;
+    }
+
+    public Integer getDimension() {
+        return dimension;
+    }
+
+    public VectorOptions setDimension(Integer dimension) {
+        this.dimension = dimension;
+        return this;
+    }
+
+    public VectorMetricType getMetricType() {
+        return metricType;
+    }
+
+    public VectorOptions setMetricType(VectorMetricType metricType) {
+        this.metricType = metricType;
+        return this;
+    }
+
+    public VectorIndexParameter getIndexParameter() {
+        return indexParameter;
+    }
+
+    public VectorOptions setIndexParameter(VectorIndexParameter indexParameter) {
+        this.indexParameter = indexParameter;
+        return this;
+    }
+
+    @Override
+    public String jsonize() {
+        StringBuilder stringBuilder = new StringBuilder();
+        jsonize(stringBuilder, "\n");
+        return stringBuilder.toString();
+    }
+
+    @Override
+    public void jsonize(StringBuilder sb, String newline) {
+        sb.append('{');
+        sb.append(newline);
+        List<String> jsonItems = new ArrayList<String>();
+
+        if (dataType != null) {
+            jsonItems.add("\t\"dataType\": \"" + dataType.name() + "\"");
+        }
+        if (dimension != null) {
+            jsonItems.add("\t\"dimension\": " + dimension);
+        }
+        if (metricType != null) {
+            jsonItems.add("\t\"metricType\": \"" + metricType.name() + "\"");
+        }
+        if (indexParameter != null) {
+            jsonItems.add("\t\"indexParameter\": " + indexParameter.jsonize());
+        }
+        for (int i = 0; i < jsonItems.size(); i++) {
+            if (i != 0) {
+                sb.append(",").append(newline);
+            }
+            sb.append(jsonItems.get(i));
+        }
+        sb.append(newline);
+        sb.append('}');
+    }
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/sql/SQLRowsFBsColumnBased.java b/src/main/java/com/alicloud/openservices/tablestore/model/sql/SQLRowsFBsColumnBased.java
index c7a51a1..ab22d9b 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/sql/SQLRowsFBsColumnBased.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/sql/SQLRowsFBsColumnBased.java
@@ -169,17 +169,29 @@ public Object get(int rowIndex, int columnIndex) {
                         if(encodingType != DataType.LONG){
                             throw new UnsupportedOperationException("encoding Type need to be: " + DataType.LONG +" , but get: " + encodingType);
                         }
-                        return resolveDateTime(columnValue.longValues(rowIndex));
+                        if (columnValue.isNullvalues(rowIndex)) {
+                            return null;
+                        } else {
+                            return resolveDateTime(columnValue.longValues(rowIndex));
+                        }
                     case LogicType.TIME:
                         if(encodingType != DataType.LONG){
                             throw new UnsupportedOperationException("encoding Type need to be: " + DataType.LONG +" , but get: " + encodingType);
                         }
-                        return resolveTime(columnValue.longValues(rowIndex));
+                        if (columnValue.isNullvalues(rowIndex)) {
+                            return null;
+                        } else {
+                            return resolveTime(columnValue.longValues(rowIndex));
+                        }
                     case LogicType.DATE:
                         if(encodingType != DataType.LONG){
                             throw new UnsupportedOperationException("encoding Type need to be: " + DataType.LONG +" , but get: " + encodingType);
                         }
-                        return resolveDate(columnValue.longValues(rowIndex));
+                        if (columnValue.isNullvalues(rowIndex)) {
+                            return null;
+                        } else {
+                            return resolveDate(columnValue.longValues(rowIndex));
+                        }
                     default:
                         throw new UnsupportedOperationException("not supported Logic type in flatbuffers: " + logicType);
                 }
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/timeseries/DeleteTimeseriesAnalyticalStoreRequest.java b/src/main/java/com/alicloud/openservices/tablestore/model/timeseries/DeleteTimeseriesAnalyticalStoreRequest.java
index 9721166..3658e24 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/timeseries/DeleteTimeseriesAnalyticalStoreRequest.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/timeseries/DeleteTimeseriesAnalyticalStoreRequest.java
@@ -8,6 +8,7 @@ public class DeleteTimeseriesAnalyticalStoreRequest implements Request {
 
     private final String timeseriesTableName;
     private final String analyticalStoreName;
+    private boolean dropMappingTable = false;
 
     public DeleteTimeseriesAnalyticalStoreRequest(String timeseriesTableName, String analyticalStoreName) {
         Preconditions.checkArgument(
@@ -32,4 +33,12 @@ public String getTimeseriesTableName() {
     public String getAnalyticalStoreName() {
         return analyticalStoreName;
     }
+
+    public boolean isDropMappingTable() {
+        return dropMappingTable;
+    }
+
+    public void setDropMappingTable(boolean dropMappingTable) {
+        this.dropMappingTable = dropMappingTable;
+    }
 }
diff --git a/src/main/java/com/alicloud/openservices/tablestore/model/timeseries/PutTimeseriesDataRequest.java b/src/main/java/com/alicloud/openservices/tablestore/model/timeseries/PutTimeseriesDataRequest.java
index a8225b6..e834e0c 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/model/timeseries/PutTimeseriesDataRequest.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/model/timeseries/PutTimeseriesDataRequest.java
@@ -80,6 +80,7 @@ public PutTimeseriesDataRequest createRequestForRetry(List<PutTimeseriesDataResp
 
             request.addRow(rows.get(rowResult.getIndex()));
         }
+        request.setMetaUpdateMode(this.getMetaUpdateMode());
         return request;
     }
 }
diff --git a/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/TimeseriesWriterException.java b/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/TimeseriesWriterException.java
new file mode 100644
index 0000000..7b7504f
--- /dev/null
+++ b/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/TimeseriesWriterException.java
@@ -0,0 +1,31 @@
+package com.alicloud.openservices.tablestore.timeserieswriter;
+
+public class TimeseriesWriterException extends RuntimeException {
+
+    private static final long serialVersionUID = -8306502318732297905L;
+    private String errorCode;
+
+    public TimeseriesWriterException(String message, Throwable cause, String errorCode) {
+        super(message, cause);
+        this.errorCode = errorCode;
+    }
+
+    public TimeseriesWriterException(String message, String errorCode) {
+        super(message);
+        this.errorCode = errorCode;
+    }
+
+    public String getErrorCode() {
+        return errorCode;
+    }
+
+    public void setErrorCode(String errorCode) {
+        this.errorCode = errorCode;
+    }
+
+    public String toString() {
+        return "TimeseriesWriterException{" +
+                "errorCode='" + errorCode + '\'' +
+                '}';
+    }
+}
diff --git a/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/callback/TimeseriesFlushCallback.java b/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/callback/TimeseriesFlushCallback.java
index db1613e..ed45d6a 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/callback/TimeseriesFlushCallback.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/callback/TimeseriesFlushCallback.java
@@ -7,6 +7,7 @@
 import com.alicloud.openservices.tablestore.model.timeseries.PutTimeseriesDataResponse;
 import com.alicloud.openservices.tablestore.model.timeseries.TimeseriesRow;
 import com.alicloud.openservices.tablestore.model.timeseries.TimeseriesTableRow;
+import com.alicloud.openservices.tablestore.timeserieswriter.TimeseriesWriterException;
 import com.alicloud.openservices.tablestore.timeserieswriter.config.TimeseriesBucketConfig;
 import com.alicloud.openservices.tablestore.timeserieswriter.enums.TSWriteMode;
 import com.alicloud.openservices.tablestore.timeserieswriter.group.TimeseriesGroup;
@@ -168,6 +169,9 @@ public void onFailed(Req request, Exception ex) {
                     ((TableStoreException)ex).getErrorCode().equals("OTSParameterInvalid") &&
                     ((PutTimeseriesDataRequest) request).getRows().size() > 1) {
                 retryTimeseriesRow((PutTimeseriesDataRequest) request);
+            } else if (ex instanceof TimeseriesWriterException &&
+                    ((PutTimeseriesDataRequest) request).getRows().size() > 1) {
+                retryTimeseriesRow((PutTimeseriesDataRequest) request);
             } else {
                 failedOnException(request, ex);
             }
@@ -192,20 +196,15 @@ public void failedOnException(Req request, Exception ex) {
     }
 
     private void retryTimeseriesRow(PutTimeseriesDataRequest request) {
-        for (int i = 0; i < request.getRows().size(); i++) {
-            TimeseriesGroup timeseriesGroup = groupList.get(i);
-            retrySingleTimeseriesRow(request.getRows().get(i), timeseriesGroup, request.getTimeseriesTableName());
-        }
-    }
-
-
-    private void retrySingleTimeseriesRow(TimeseriesRow timeseriesRow, TimeseriesGroup timeseriesGroup, String tableName) {
-        timeseriesWriterHandleStatistics.incrementAndGetTotalSingleRowRequestCount();
-        timeseriesWriterHandleStatistics.incrementAndGetTotalRequestCount();
         if (TSWriteMode.SEQUENTIAL.equals(timeseriesBucketConfig.getWriteMode())) {
-            retrySequentialWriteSingleTimeseries(timeseriesRow, timeseriesGroup, tableName);
+            retrySequentialWriteSingleTimeseries(request.getRows(), groupList, request.getTimeseriesTableName(), 0);
         } else {
-            retryParallelWriteSingleTimeseries(timeseriesRow, timeseriesGroup, tableName);
+            for (int i = 0; i < request.getRows().size(); i++) {
+                TimeseriesGroup timeseriesGroup = groupList.get(i);
+                timeseriesWriterHandleStatistics.incrementAndGetTotalSingleRowRequestCount();
+                timeseriesWriterHandleStatistics.incrementAndGetTotalRequestCount();
+                retryParallelWriteSingleTimeseries(request.getRows().get(i), timeseriesGroup, request.getTimeseriesTableName());
+            }
         }
     }
 
@@ -222,22 +221,61 @@ private void retryParallelWriteSingleTimeseries(TimeseriesRow timeseriesRow, Tim
         request.addRows(list);
 
 
-        ots.putTimeseriesData(request, new TimeseriesFlushCallback<PutTimeseriesDataRequest, PutTimeseriesDataResponse>(ots, count, semaphore, callback,
-                executor, timeseriesWriterHandleStatistics, timeseriesBucketConfig, bucketSemaphore, subGroupList));
+        TableStoreCallback tableStoreCallback = new TimeseriesFlushCallback<PutTimeseriesDataRequest, PutTimeseriesDataResponse>(ots, count, semaphore, callback,
+                executor, timeseriesWriterHandleStatistics, timeseriesBucketConfig, bucketSemaphore, subGroupList);
+
+        tryPutTimeseriesData(request, tableStoreCallback);
     }
 
-    private void retrySequentialWriteSingleTimeseries(TimeseriesRow timeseriesRow, TimeseriesGroup timeseriesGroup, String tableName) {
-        PutTimeseriesDataRequest request = new PutTimeseriesDataRequest(tableName);
+    /**
+     * 调用异步putTimeseriesData接口，串行地重试数据
+     * @param timeseriesRows    待重试时序数据List
+     * @param timeseriesGroups  待重试时序数据的GroupList
+     * @param tableName         时序表名
+     * @param index             要重试的数据在List中的index
+     */
+    private void retrySequentialWriteSingleTimeseries(final List<TimeseriesRow> timeseriesRows, final List<TimeseriesGroup> timeseriesGroups, final String tableName, final int index) {
+        if (index >= timeseriesRows.size()) {
+            return;
+        }
+        final List<TimeseriesGroup> subGroupList = new ArrayList<TimeseriesGroup>(1);
+        subGroupList.add(timeseriesGroups.get(index));
+
+        this.count.incrementAndGet();
+        timeseriesWriterHandleStatistics.incrementAndGetTotalSingleRowRequestCount();
+        timeseriesWriterHandleStatistics.incrementAndGetTotalRequestCount();
+
+        final PutTimeseriesDataRequest request = new PutTimeseriesDataRequest(tableName);
         List<TimeseriesRow> list = new ArrayList<TimeseriesRow>();
-        list.add(timeseriesRow);
+        list.add(timeseriesRows.get(index));
         request.addRows(list);
-        try {
-            ots.asTimeseriesClientInterface().putTimeseriesData(request);
-            triggerSucceedCallback(new TimeseriesTableRow(timeseriesRow, tableName), timeseriesGroup);
-        } catch (Exception e) {
-            triggerFailedCallback(new TimeseriesTableRow(timeseriesRow, tableName), e, timeseriesGroup);
-        }
 
+        final TableStoreCallback<PutTimeseriesDataRequest, PutTimeseriesDataResponse> timeseriesFlushCallback = new TimeseriesFlushCallback<PutTimeseriesDataRequest, PutTimeseriesDataResponse>(ots, count, semaphore, callback,
+                executor, timeseriesWriterHandleStatistics, timeseriesBucketConfig, bucketSemaphore, subGroupList);
+
+        TableStoreCallback<PutTimeseriesDataRequest, PutTimeseriesDataResponse> tableStoreCallback = new TableStoreCallback<PutTimeseriesDataRequest, PutTimeseriesDataResponse>() {
+            public void onCompleted(PutTimeseriesDataRequest req, PutTimeseriesDataResponse res) {
+                // 迭代遍历
+                retrySequentialWriteSingleTimeseries(timeseriesRows, timeseriesGroups, tableName, index + 1);
+                timeseriesFlushCallback.onCompleted(req, res);
+            }
+            public void onFailed(PutTimeseriesDataRequest req, Exception ex) {
+                // 迭代遍历
+                retrySequentialWriteSingleTimeseries(timeseriesRows, timeseriesGroups, tableName, index + 1);
+                timeseriesFlushCallback.onFailed(req, ex);
+            }
+        };
+
+        tryPutTimeseriesData(request, tableStoreCallback);
+    }
 
+    private void tryPutTimeseriesData(PutTimeseriesDataRequest request,
+            TableStoreCallback<PutTimeseriesDataRequest, PutTimeseriesDataResponse> callback) {
+        try{
+            ots.putTimeseriesData(request, callback);
+        } catch (Exception e) {
+            logger.error("Failed while send request:", e);
+            callback.onFailed(request, new TimeseriesWriterException(e.getMessage(), e, "SendRequestError"));
+        }
     }
 }
diff --git a/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/dispatch/TimeseriesHashPKDispatcher.java b/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/dispatch/TimeseriesHashPKDispatcher.java
index ee9736b..d9f0dd9 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/dispatch/TimeseriesHashPKDispatcher.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/dispatch/TimeseriesHashPKDispatcher.java
@@ -1,14 +1,18 @@
 package com.alicloud.openservices.tablestore.timeserieswriter.dispatch;
 
+import com.alicloud.openservices.tablestore.DefaultTableStoreTimeseriesWriter;
 import com.alicloud.openservices.tablestore.model.timeseries.TimeseriesKey;
 import com.alicloud.openservices.tablestore.model.timeseries.TimeseriesRow;
-
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.concurrent.atomic.AtomicLong;
 
 public class TimeseriesHashPKDispatcher extends TimeseriesBaseDispatcher {
+    private Logger logger = LoggerFactory.getLogger(TimeseriesHashPKDispatcher.class);
+
     private AtomicLong counter = new AtomicLong(0);
     private int bucketCount;
 
@@ -37,7 +41,11 @@ public int getDispatchIndex(TimeseriesRow timeseriesRow) {
             addBucketCount(bucketIndex);
             return bucketIndex;
         } catch (NoSuchAlgorithmException e) {
-            throw new RuntimeException(e);
+            logger.error("Failed while get hash dispatch index,:", e);
+            return 0;
+        } catch (IllegalArgumentException e){
+            logger.error("Failed while get hash dispatch index,:", e);
+            return 0;
         }
 
 
diff --git a/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/handle/TimeseriesRowEventHandler.java b/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/handle/TimeseriesRowEventHandler.java
index c357833..68ecedc 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/handle/TimeseriesRowEventHandler.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/handle/TimeseriesRowEventHandler.java
@@ -107,18 +107,28 @@ public void onEvent(TimeseriesRowEvent timeseriesRowEvent, long l, boolean b) th
                         callback,
                         callbackSemaphore, bucketSemaphore));
             }
-
             boolean succeed = map.get(timeseriesTableRow.getTableName()).appendTimeseriesRow(timeseriesRowWithGroup);
+            // The first failure may be due to:
+            // 1. The number of rows has reached the maximum limit
+            // 2. The size of rows has reached the maximum limit
+            // 3. Duplicate timeseries key in cache
+            // 4. The format of the row is incorrect
             if (!succeed) {
-                timeseriesRequestWithGroupsMap.put(timeseriesTableRow.getTableName(), map.get(timeseriesTableRow.getTableName()).makeRequest(timeseriesTableRow.getTableName()));
+                // For the case of 1、2、3 above, make request and try to add row to the cache again
+                TimeseriesRequestWithGroups timeseriesRequestWithGroups = map.get(timeseriesTableRow.getTableName()).makeRequest(timeseriesTableRow.getTableName());
+                if (timeseriesRequestWithGroups != null) {
+                    timeseriesRequestWithGroupsMap.put(timeseriesTableRow.getTableName(), timeseriesRequestWithGroups);
+                }
+                // The second failure may be due to:
+                // 1. Only one row size reaches the maximum limit
+                // 2. The format of the row is incorrect
                 succeed = map.get(timeseriesTableRow.getTableName()).appendTimeseriesRow(timeseriesRowWithGroup);
-
                 if (!succeed) {
                     executor.execute(new Runnable() {
                         @Override
                         public void run() {
                             timeseriesWriterHandleStatistics.totalFailedRowsCount.incrementAndGet();
-                            ClientException exception = new ClientException("Can not even append only one row into buffer.");
+                            ClientException exception = new ClientException("Failed to append timeseries row into buffer.");
                             logger.error("RowChange Failed: ", exception);
                             timeseriesRowWithGroup.timeseriesGroup.failedOneRow(timeseriesRowWithGroup.timeseriesTableRow, exception);
                             if (callback != null) {
diff --git a/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/manager/TimeseriesBaseRequestManager.java b/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/manager/TimeseriesBaseRequestManager.java
index 3247695..b969c77 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/manager/TimeseriesBaseRequestManager.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/manager/TimeseriesBaseRequestManager.java
@@ -11,7 +11,6 @@
 import com.alicloud.openservices.tablestore.timeserieswriter.config.TimeseriesBucketConfig;
 import com.alicloud.openservices.tablestore.timeserieswriter.config.TimeseriesWriterConfig;
 import com.alicloud.openservices.tablestore.timeserieswriter.handle.TimeseriesWriterHandleStatistics;
-import com.alicloud.openservices.tablestore.writer.handle.BaseRequestManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -22,7 +21,7 @@
 import java.util.concurrent.Semaphore;
 
 public abstract class TimeseriesBaseRequestManager implements TimeseriesRequestManager {
-    private Logger logger = LoggerFactory.getLogger(BaseRequestManager.class);
+    private Logger logger = LoggerFactory.getLogger(TimeseriesBaseRequestManager.class);
 
     protected AsyncTimeseriesClientInterface ots;
     protected TimeseriesBucketConfig timeseriesBucketConfig;
@@ -63,29 +62,33 @@ public TimeseriesBaseRequestManager(AsyncTimeseriesClientInterface ots, Timeseri
                 timeseriesWriterHandleStatistics, timeseriesBucketConfig, bucketSemaphore);
     }
 
-
     @Override
     public boolean appendTimeseriesRow(TimeseriesRowWithGroup timeseriesRowWithGroup) {
-        if (totalSize + timeseriesRowWithGroup.timeseriesTableRow.getTimeseriesRow().getTimeseriesRowDataSize() > timeseriesWriterConfig.getMaxBatchSize()) {
-            return false;
-        }
-
-        if (totalRowsCount >= timeseriesWriterConfig.getMaxBatchRowsCount()) {
-            return false;
-        }
+        try {
+            if (totalSize + timeseriesRowWithGroup.timeseriesTableRow.getTimeseriesRow().getTimeseriesRowDataSize() > timeseriesWriterConfig.getMaxBatchSize()) {
+                return false;
+            }
 
-        if (!allowDuplicatedRowInBatchRequest) {
-            if (sendingTimeseriesKeys.contains(timeseriesRowWithGroup.timeseriesTableRow.getTimeseriesRow().getTimeseriesKey())) {
+            if (totalRowsCount >= timeseriesWriterConfig.getMaxBatchRowsCount()) {
                 return false;
-            } else {
-                sendingTimeseriesKeys.add(timeseriesRowWithGroup.timeseriesTableRow.getTimeseriesRow().getTimeseriesKey());
             }
-        }
 
-        timeseriesRowWithGroups.add(timeseriesRowWithGroup);
-        this.totalSize += timeseriesRowWithGroup.timeseriesTableRow.getTimeseriesRow().getTimeseriesRowDataSize();
-        this.totalRowsCount += 1;
-        return true;
+            if (!allowDuplicatedRowInBatchRequest) {
+                if (sendingTimeseriesKeys.contains(timeseriesRowWithGroup.timeseriesTableRow.getTimeseriesRow().getTimeseriesKey())) {
+                    return false;
+                } else {
+                    sendingTimeseriesKeys.add(timeseriesRowWithGroup.timeseriesTableRow.getTimeseriesRow().getTimeseriesKey());
+                }
+            }
+
+            timeseriesRowWithGroups.add(timeseriesRowWithGroup);
+            this.totalSize += timeseriesRowWithGroup.timeseriesTableRow.getTimeseriesRow().getTimeseriesRowDataSize();
+            this.totalRowsCount += 1;
+            return true;
+        } catch (Exception e) {
+            logger.error("Failed while append TimeseriesRow:", e);
+            return false;
+        }
     }
 
 
diff --git a/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/manager/TimeseriesBatchRequestManager.java b/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/manager/TimeseriesBatchRequestManager.java
index 1db42d0..f5aa408 100644
--- a/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/manager/TimeseriesBatchRequestManager.java
+++ b/src/main/java/com/alicloud/openservices/tablestore/timeserieswriter/manager/TimeseriesBatchRequestManager.java
@@ -1,9 +1,12 @@
 package com.alicloud.openservices.tablestore.timeserieswriter.manager;
 
 import com.alicloud.openservices.tablestore.AsyncTimeseriesClientInterface;
+import com.alicloud.openservices.tablestore.ClientException;
 import com.alicloud.openservices.tablestore.TableStoreCallback;
+import com.alicloud.openservices.tablestore.TableStoreException;
 import com.alicloud.openservices.tablestore.model.timeseries.PutTimeseriesDataRequest;
 import com.alicloud.openservices.tablestore.model.timeseries.TimeseriesTableRow;
+import com.alicloud.openservices.tablestore.timeserieswriter.TimeseriesWriterException;
 import com.alicloud.openservices.tablestore.timeserieswriter.callback.TimeseriesRowResult;
 import com.alicloud.openservices.tablestore.timeserieswriter.config.TimeseriesBucketConfig;
 import com.alicloud.openservices.tablestore.timeserieswriter.config.TimeseriesWriterConfig;
@@ -51,6 +54,12 @@ public TimeseriesRequestWithGroups makeRequest(String tableName) {
     public void sendRequest(TimeseriesRequestWithGroups timeseriesRequestWithGroups) {
         PutTimeseriesDataRequest finalRequest = (PutTimeseriesDataRequest) timeseriesRequestWithGroups.getRequest();
         List<TimeseriesGroup> finalGroupFuture = timeseriesRequestWithGroups.getGroupList();
-        ots.putTimeseriesData(finalRequest, callbackFactory.newInstance(finalGroupFuture));
+        TableStoreCallback tableStoreCallback = callbackFactory.newInstance(finalGroupFuture);
+        try{
+            ots.putTimeseriesData(finalRequest, tableStoreCallback);
+        } catch (Exception e) {
+            logger.error("Failed while send request:", e);
+            tableStoreCallback.onFailed(finalRequest, new TimeseriesWriterException(e.getMessage(), e, "SendRequestError"));
+        }
     }
 }
diff --git a/src/test/java/com/alicloud/openservices/tablestore/common/OTSHelper.java b/src/test/java/com/alicloud/openservices/tablestore/common/OTSHelper.java
index 2f7f5c8..9a03684 100644
--- a/src/test/java/com/alicloud/openservices/tablestore/common/OTSHelper.java
+++ b/src/test/java/com/alicloud/openservices/tablestore/common/OTSHelper.java
@@ -4,6 +4,9 @@
 import java.util.List;
 import java.util.Map;
 
+import com.alicloud.openservices.tablestore.TimeseriesClient;
+import com.alicloud.openservices.tablestore.model.timeseries.DeleteTimeseriesTableRequest;
+import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -112,6 +115,17 @@ public static void deleteAllTable(SyncClientInterface ots) throws Exception {
         }
         LOG.info("End deleteAllTable");
     }
+
+    public static void deleteTsTable(TimeseriesClient client) throws Exception {
+        LOG.info("Begin deleteTsTable");
+        ListTimeseriesTableResponse r = client.listTimeseriesTable();
+
+        for (String name : r.getTimeseriesTableNames()) {
+            LOG.info("delete : " + name);
+            client.deleteTimeseriesTable(new DeleteTimeseriesTableRequest(name));
+        }
+        LOG.info("End deleteTsTable");
+    }
     
     public static TableMeta getTableMeta(String tableName, List<PrimaryKeySchema> pk) {
         TableMeta meta = new TableMeta(tableName);
diff --git a/src/test/java/com/alicloud/openservices/tablestore/common/Utils.java b/src/test/java/com/alicloud/openservices/tablestore/common/Utils.java
index 96e2e72..0f8bece 100644
--- a/src/test/java/com/alicloud/openservices/tablestore/common/Utils.java
+++ b/src/test/java/com/alicloud/openservices/tablestore/common/Utils.java
@@ -78,6 +78,18 @@ public static SyncClientInterface getOTSInstance() {
         return getOTSInstance(null);
     }
 
+
+    public static TimeseriesClient getTsClient() {
+        ServiceSettings serviceSettings = ServiceSettings.load();
+        return new TimeseriesClient(
+                serviceSettings.getOTSEndpoint(),
+                serviceSettings.getOTSAccessKeyId(),
+                serviceSettings.getOTSAccessKeySecret(),
+                serviceSettings.getOTSInstanceName()
+        );
+    }
+
+
     public static SyncClientInterface getOTSInstance(ClientConfiguration configuration) {
         ServiceSettings serviceSettings = ServiceSettings.load();
         return new SyncClient(
diff --git a/src/test/java/com/alicloud/openservices/tablestore/core/protocol/BaseSearchTest.java b/src/test/java/com/alicloud/openservices/tablestore/core/protocol/BaseSearchTest.java
index a1395a6..79288a8 100644
--- a/src/test/java/com/alicloud/openservices/tablestore/core/protocol/BaseSearchTest.java
+++ b/src/test/java/com/alicloud/openservices/tablestore/core/protocol/BaseSearchTest.java
@@ -35,6 +35,10 @@
 import com.alicloud.openservices.tablestore.model.search.groupby.GroupByRange;
 import com.alicloud.openservices.tablestore.model.search.groupby.GroupByType;
 import com.alicloud.openservices.tablestore.model.search.groupby.Range;
+import com.alicloud.openservices.tablestore.model.search.highlight.Highlight;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightEncoder;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightFragmentOrder;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightParameter;
 import com.alicloud.openservices.tablestore.model.search.query.BoolQuery;
 import com.alicloud.openservices.tablestore.model.search.query.ConstScoreQuery;
 import com.alicloud.openservices.tablestore.model.search.query.ExistsQuery;
@@ -43,6 +47,8 @@
 import com.alicloud.openservices.tablestore.model.search.query.GeoBoundingBoxQuery;
 import com.alicloud.openservices.tablestore.model.search.query.GeoDistanceQuery;
 import com.alicloud.openservices.tablestore.model.search.query.GeoPolygonQuery;
+import com.alicloud.openservices.tablestore.model.search.query.KnnVectorQuery;
+import com.alicloud.openservices.tablestore.model.search.query.InnerHits;
 import com.alicloud.openservices.tablestore.model.search.query.MatchAllQuery;
 import com.alicloud.openservices.tablestore.model.search.query.MatchPhraseQuery;
 import com.alicloud.openservices.tablestore.model.search.query.MatchQuery;
@@ -56,6 +62,7 @@
 import com.alicloud.openservices.tablestore.model.search.query.TermQuery;
 import com.alicloud.openservices.tablestore.model.search.query.TermsQuery;
 import com.alicloud.openservices.tablestore.model.search.query.WildcardQuery;
+import com.alicloud.openservices.tablestore.model.search.sort.DocSort;
 import com.alicloud.openservices.tablestore.model.search.sort.FieldSort;
 import com.alicloud.openservices.tablestore.model.search.sort.GeoDistanceSort;
 import com.alicloud.openservices.tablestore.model.search.sort.GeoDistanceType;
@@ -70,6 +77,10 @@
 import com.alicloud.openservices.tablestore.model.search.sort.SortMode;
 import com.alicloud.openservices.tablestore.model.search.sort.SortOrder;
 import com.alicloud.openservices.tablestore.model.search.sort.SubAggSort;
+import com.alicloud.openservices.tablestore.model.search.vector.HNSWIndexParameter;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorDataType;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorMetricType;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorOptions;
 import com.google.common.base.Supplier;
 import com.google.gson.ExclusionStrategy;
 import com.google.gson.FieldAttributes;
@@ -150,7 +161,7 @@ public void testAllAggregationShouldBeTest() {
 
     @Test
     public void testAllSorterShouldBeTest() {
-        assertEquals("all Sort.Sorter should be test. if you add a new kind, please add it to here", 4, getAllSortSorterSupplier().size());
+        assertEquals("all Sort.Sorter should be test. if you add a new kind, please add it to here", 5, getAllSortSorterSupplier().size());
     }
 
     @Test
@@ -280,6 +291,13 @@ public static PrimaryKeySort randomPrimaryKeySort() {
         return sort;
     }
 
+    public static DocSort randomDocSort() {
+        DocSort sort = new DocSort();
+        sort.setOrder(randomSortOrder());
+        assertAllFieldTested(sort, 1);
+        return sort;
+    }
+
     public static SortMode randomSortMode() {
         return randomFrom(SortMode.values());
     }
@@ -333,6 +351,12 @@ public Sorter get() {
                 return randomPrimaryKeySort();
             }
         });
+        all.add(new Supplier<Sorter>() {
+            @Override
+            public Sorter get() {
+                return randomDocSort();
+            }
+        });
         return all;
     }
 
@@ -349,6 +373,77 @@ public static Query randomQuery() {
         return randomFrom(getAllQuerySupplier()).get();
     }
 
+    public static Highlight randomHighlight() {
+        Highlight.Builder highlightBuilder = Highlight.newBuilder();
+        switch (RANDOM.nextInt(3)) {
+            case 0:
+                highlightBuilder.highlightEncoder(HighlightEncoder.PLAIN);
+                break;
+            case 1:
+                highlightBuilder.highlightEncoder(HighlightEncoder.HTML);
+                break;
+            default:
+                break;
+        }
+
+        for (int i = 0; i < RANDOM.nextInt(10) ; i++) {
+            String fieldName = null;
+            if (RANDOM.nextBoolean()) {
+                fieldName = randomString(10);
+            }
+
+            HighlightParameter highlightParameter = new HighlightParameter();
+            switch (RANDOM.nextInt(3)) {
+                case 0:
+                    highlightParameter.setHighlightFragmentOrder(HighlightFragmentOrder.TEXT_SEQUENCE);
+                    break;
+                case 1:
+                    highlightParameter.setHighlightFragmentOrder(HighlightFragmentOrder.SCORE);
+                    break;
+                default:
+                    break;
+
+            }
+
+            if (RANDOM.nextBoolean()) {
+                highlightParameter.setPreTag(randomString(16));
+                highlightParameter.setPostTag(randomString(16));
+            }
+
+            if (RANDOM.nextBoolean()) {
+                highlightParameter.setNumberOfFragments(RANDOM.nextInt(10));
+            }
+
+            if (RANDOM.nextBoolean()) {
+                highlightParameter.setFragmentSize(RANDOM.nextInt(100));
+            }
+            highlightBuilder.addFieldHighlightParam(fieldName, highlightParameter);
+        }
+        return highlightBuilder.build();
+    }
+
+    public static InnerHits randomInnerHits() {
+        InnerHits.Builder innerHitsBuilder = InnerHits.newBuilder();
+
+        if (RANDOM.nextBoolean()) {
+            innerHitsBuilder.sort(randomSort());
+        }
+
+        if (RANDOM.nextBoolean()) {
+            innerHitsBuilder.offset(RANDOM.nextInt());
+        }
+
+        if (RANDOM.nextBoolean()) {
+            innerHitsBuilder.limit(RANDOM.nextInt());
+        }
+
+        if (RANDOM.nextBoolean()) {
+            innerHitsBuilder.highlight(randomHighlight());
+        }
+
+        return innerHitsBuilder.build();
+    }
+
     public static List<Supplier<Query>> getAllQuerySupplier() {
         List<Supplier<Query>> all = new ArrayList<Supplier<Query>>();
         all.add(new Supplier<Query>() {
@@ -441,6 +536,12 @@ public Query get() {
                 return randomConstScoreQuery();
             }
         });
+        all.add(new Supplier<Query>() {
+            @Override
+            public Query get() {
+                return randomKnnVectorQuery();
+            }
+        });
         all.add(new Supplier<Query>() {
             @Override
             public Query get() {
@@ -554,7 +655,7 @@ public static NestedQuery randomNestedQuery() {
             query.setWeight(RANDOM.nextFloat());
         }
         query.setScoreMode(randomScoreMode());
-        assertAllFieldTested(query, 5);
+        assertAllFieldTested(query, 6);
         return query;
     }
 
@@ -643,6 +744,23 @@ public static ConstScoreQuery randomConstScoreQuery() {
         return query;
     }
 
+    public static KnnVectorQuery randomKnnVectorQuery() {
+        KnnVectorQuery query = new KnnVectorQuery();
+        query.setFieldName(randomString(3));
+        query.setTopK(RANDOM.nextInt());
+        float[] floats = new float[RANDOM.nextInt(100) + 1];
+        for (int i = 0; i < floats.length; i++) {
+            floats[i] = RANDOM.nextFloat();
+        }
+        query.setFloat32QueryVector(floats);
+        byte[] bytes = new byte[RANDOM.nextInt(100) + 1];
+        RANDOM.nextBytes(bytes);
+        query.setFilter(randomQuery());
+        query.setWeight(RANDOM.nextFloat());
+        assertAllFieldTested(query, 7);
+        return query;
+    }
+
     public static BoolQuery randomBoolQuery() {
         BoolQuery query = new BoolQuery();
         if (RANDOM.nextBoolean()) {
@@ -940,13 +1058,16 @@ public static GroupByHistogram randomGroupByHistogram() {
         if (RANDOM.nextBoolean()) {
             groupBy.setMissing(randomNumberColumnValue());
         }
+        if (RANDOM.nextBoolean()) {
+            groupBy.setOffset(randomNumberColumnValue());
+        }
         if (RANDOM.nextBoolean()) {
             groupBy.setSubGroupBys(randomGroupBys());
         }
         if (RANDOM.nextBoolean()) {
             groupBy.setSubAggregations(randomAggregations());
         }
-        assertAllFieldTested(groupBy, 10);
+        assertAllFieldTested(groupBy, 11);
         return groupBy;
     }
 
@@ -980,6 +1101,9 @@ public static GroupByDateHistogram randomGroupByDateHistogram() {
         if (RANDOM.nextBoolean()) {
             groupBy.setMissing(randomNumberColumnValue());
         }
+        if (RANDOM.nextBoolean()) {
+            groupBy.setOffset(randomDateTimeValue());
+        }
         if (RANDOM.nextBoolean()) {
             groupBy.setTimeZone(randomString(10));
         }
@@ -989,7 +1113,7 @@ public static GroupByDateHistogram randomGroupByDateHistogram() {
         if (RANDOM.nextBoolean()) {
             groupBy.setSubAggregations(randomAggregations());
         }
-        assertAllFieldTested(groupBy, 11);
+        assertAllFieldTested(groupBy, 12);
         return groupBy;
     }
 
@@ -1072,6 +1196,9 @@ public static SearchQuery randomSearchQuery() {
         if (RANDOM.nextBoolean()) {
             searchQuery.setQuery(randomQuery());
         }
+        if (RANDOM.nextBoolean()) {
+            searchQuery.setHighlight(randomHighlight());
+        }
         if (RANDOM.nextBoolean()) {
             searchQuery.setSort(randomSort());
         }
@@ -1090,7 +1217,7 @@ public static SearchQuery randomSearchQuery() {
         if (RANDOM.nextBoolean()) {
             searchQuery.setGroupByList(randomGroupBys());
         }
-        assertAllFieldTested(searchQuery, 9);
+        assertAllFieldTested(searchQuery, 10);
         return searchQuery;
     }
 
@@ -1204,5 +1331,33 @@ public static ParallelScanRequest randomParallelScanRequest() {
         assertAllFieldTested(request, 6);
         return request;
     }
+
+    public static HNSWIndexParameter randomHNSWIndexParameter() {
+        HNSWIndexParameter hnswIndexParameter = new HNSWIndexParameter();
+        if (RANDOM.nextBoolean()) {
+            hnswIndexParameter.setM(RANDOM.nextInt());
+        }
+        if (RANDOM.nextBoolean()) {
+            hnswIndexParameter.setEfConstruction(RANDOM.nextInt());
+        }
+        return hnswIndexParameter;
+    }
+
+    public static VectorOptions randomVectorOptions() {
+        VectorOptions options = new VectorOptions();
+        if (RANDOM.nextBoolean()) {
+            options.setDataType(randomFrom(VectorDataType.values()));
+        }
+        if (RANDOM.nextBoolean()) {
+            options.setDimension(RANDOM.nextInt());
+        }
+        if (RANDOM.nextBoolean()) {
+            options.setMetricType(randomFrom(VectorMetricType.values()));
+        }
+        if (RANDOM.nextBoolean()) {
+            options.setIndexParameter(randomHNSWIndexParameter());
+        }
+        return options;
+    }
 }
 
diff --git a/src/test/java/com/alicloud/openservices/tablestore/core/protocol/TestScanQueryBuilder.java b/src/test/java/com/alicloud/openservices/tablestore/core/protocol/TestScanQueryBuilder.java
index 0539444..14494aa 100644
--- a/src/test/java/com/alicloud/openservices/tablestore/core/protocol/TestScanQueryBuilder.java
+++ b/src/test/java/com/alicloud/openservices/tablestore/core/protocol/TestScanQueryBuilder.java
@@ -44,7 +44,7 @@ public void testBuildParallelScanRequest() {
         builder1.setScanQuery(sq2);
         Search.ParallelScanRequest request2 = builder1.build();
 
-        assertEquals(request1, request2);
+        assertEquals(request1.toByteString(), request2.toByteString());
 
     }
 
@@ -72,7 +72,7 @@ public void testBuildScanQuery() {
         builder.setAliveTime(98);
         Search.ScanQuery sq2 = builder.build();
 
-        assertEquals(sq1, sq2);
+        assertEquals(sq1.toByteString(), sq2.toByteString());
 
 
     }
diff --git a/src/test/java/com/alicloud/openservices/tablestore/core/protocol/TestSearchProtocolBuilder.java b/src/test/java/com/alicloud/openservices/tablestore/core/protocol/TestSearchProtocolBuilder.java
index b460d59..d9b4e14 100644
--- a/src/test/java/com/alicloud/openservices/tablestore/core/protocol/TestSearchProtocolBuilder.java
+++ b/src/test/java/com/alicloud/openservices/tablestore/core/protocol/TestSearchProtocolBuilder.java
@@ -4,10 +4,19 @@
 import com.alicloud.openservices.tablestore.model.search.FieldSchema;
 import com.alicloud.openservices.tablestore.model.search.FieldType;
 import com.alicloud.openservices.tablestore.model.search.QueryFlowWeight;
+import com.alicloud.openservices.tablestore.model.search.SearchInnerHit;
 import com.alicloud.openservices.tablestore.model.search.UpdateSearchIndexRequest;
 import com.alicloud.openservices.tablestore.model.search.analysis.FuzzyAnalyzerParameter;
 import com.alicloud.openservices.tablestore.model.search.analysis.SingleWordAnalyzerParameter;
 import com.alicloud.openservices.tablestore.model.search.analysis.SplitAnalyzerParameter;
+import com.alicloud.openservices.tablestore.model.search.highlight.Highlight;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightEncoder;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightFragmentOrder;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightParameter;
+import com.alicloud.openservices.tablestore.model.search.query.InnerHits;
+import com.alicloud.openservices.tablestore.model.search.sort.DocSort;
+import com.alicloud.openservices.tablestore.model.search.sort.ScoreSort;
+import com.alicloud.openservices.tablestore.model.search.sort.Sort;
 import com.google.protobuf.InvalidProtocolBufferException;
 import org.junit.Test;
 
@@ -329,6 +338,75 @@ public void buildFieldSchema_MaxWord_IgnoreParam() throws InvalidProtocolBufferE
         assertFalse(pbFieldSchema.hasAnalyzerParameter());
     }
 
+    @Test
+    public void buildInnerHits() {
+        InnerHits.Builder innerHitsBuilder = InnerHits.newBuilder()
+                .limit(10)
+                .offset(0)
+                .sort(new Sort(Arrays.asList(
+                        new DocSort(),
+                        new ScoreSort())))
+                .highlight(Highlight.newBuilder()
+                        .highlightEncoder(HighlightEncoder.HTML)
+                        .addFieldHighlightParam("col1", HighlightParameter.newBuilder()
+                                .highlightFragmentOrder(HighlightFragmentOrder.SCORE)
+                                .fragmentSize(100)
+                                .numberOfFragments(50)
+                                .preTag("<em>")
+                                .postTag("</em>")
+                                .build())
+                        .build());
+        Search.InnerHits pbInnerHits = SearchInnerHitsBuilder.buildInnerHits(innerHitsBuilder.build());
+        assertEquals(0, pbInnerHits.getOffset());
+        assertEquals(10, pbInnerHits.getLimit());
+        assertEquals(2, pbInnerHits.getSort().getSorterCount());
+        assertTrue(pbInnerHits.getSort().getSorterList().get(0).hasDocSort());
+        assertTrue(pbInnerHits.getSort().getSorterList().get(1).hasScoreSort());
+        assertNotNull(pbInnerHits.getHighlight());
+
+        Search.Highlight pbHighlight = pbInnerHits.getHighlight();
+        assertEquals(Search.HighlightEncoder.HTML_MODE, pbHighlight.getHighlightEncoder());
+        assertEquals(1, pbHighlight.getHighlightParametersCount());
+        assertEquals(Search.HighlightFragmentOrder.SCORE, pbHighlight.getHighlightParameters(0).getFragmentsOrder());
+        assertEquals(100, pbHighlight.getHighlightParameters(0).getFragmentSize());
+        assertEquals(50, pbHighlight.getHighlightParameters(0).getNumberOfFragments());
+        assertEquals("<em>", pbHighlight.getHighlightParameters(0).getPreTag());
+        assertEquals("</em>", pbHighlight.getHighlightParameters(0).getPostTag());
+    }
+
+    @Test
+    public void buildHighlight() {
+        Highlight.Builder highlightBuilder = Highlight.newBuilder()
+                .highlightEncoder(HighlightEncoder.HTML)
+                .addFieldHighlightParam("col_name", HighlightParameter.newBuilder()
+                        .highlightFragmentOrder(HighlightFragmentOrder.SCORE)
+                        .fragmentSize(100)
+                        .numberOfFragments(50)
+                        .preTag("<em>")
+                        .postTag("</em>").build());
+        Search.Highlight pbHighlight = SearchHighlightBuilder.buildHighlight(highlightBuilder.build());
+        assertEquals(Search.HighlightEncoder.HTML_MODE, pbHighlight.getHighlightEncoder());
+        assertEquals(1, pbHighlight.getHighlightParametersCount());
+        assertEquals(Search.HighlightFragmentOrder.SCORE, pbHighlight.getHighlightParameters(0).getFragmentsOrder());
+        assertEquals(100, pbHighlight.getHighlightParameters(0).getFragmentSize());
+        assertEquals(50, pbHighlight.getHighlightParameters(0).getNumberOfFragments());
+        assertEquals("<em>", pbHighlight.getHighlightParameters(0).getPreTag());
+        assertEquals("</em>", pbHighlight.getHighlightParameters(0).getPostTag());
+
+        highlightBuilder = Highlight.newBuilder()
+                .highlightEncoder(null)
+                .addFieldHighlightParam(null, null);
+        pbHighlight = SearchHighlightBuilder.buildHighlight(highlightBuilder.build());
+        assertFalse(pbHighlight.hasHighlightEncoder());
+        assertEquals(1, pbHighlight.getHighlightParametersList().size());
+        assertFalse(pbHighlight.getHighlightParameters(0).hasFieldName());
+        assertFalse(pbHighlight.getHighlightParameters(0).hasPreTag());
+        assertFalse(pbHighlight.getHighlightParameters(0).hasPostTag());
+        assertFalse(pbHighlight.getHighlightParameters(0).hasFragmentSize());
+        assertFalse(pbHighlight.getHighlightParameters(0).hasNumberOfFragments());
+        assertFalse(pbHighlight.getHighlightParameters(0).hasFragmentsOrder());
+    }
+
     @Test
     public void buildFieldSchema_NoAnalyzer_WithParam() throws InvalidProtocolBufferException {
         // model
diff --git a/src/test/java/com/alicloud/openservices/tablestore/core/protocol/TestSearchProtocolParser.java b/src/test/java/com/alicloud/openservices/tablestore/core/protocol/TestSearchProtocolParser.java
index 77c6c51..4d40a58 100644
--- a/src/test/java/com/alicloud/openservices/tablestore/core/protocol/TestSearchProtocolParser.java
+++ b/src/test/java/com/alicloud/openservices/tablestore/core/protocol/TestSearchProtocolParser.java
@@ -15,6 +15,8 @@
 import com.alicloud.openservices.tablestore.model.search.analysis.SingleWordAnalyzerParameter;
 import com.alicloud.openservices.tablestore.model.search.analysis.SplitAnalyzerParameter;
 import com.alicloud.openservices.tablestore.model.search.groupby.GroupBy;
+import com.alicloud.openservices.tablestore.model.search.highlight.Highlight;
+import com.alicloud.openservices.tablestore.model.search.query.InnerHits;
 import com.alicloud.openservices.tablestore.model.search.query.Query;
 import com.alicloud.openservices.tablestore.model.search.sort.GroupBySorter;
 import com.alicloud.openservices.tablestore.model.search.sort.Sort;
@@ -23,6 +25,9 @@
 import java.io.IOException;
 import java.util.List;
 
+import static com.alicloud.openservices.tablestore.core.protocol.SearchInnerHitsBuilder.buildInnerHits;
+import static com.alicloud.openservices.tablestore.core.protocol.SearchInnerHitsBuilder.buildInnerHitsToBytes;
+import static com.alicloud.openservices.tablestore.core.protocol.SearchInnerHitsParser.toInnerHits;
 import static org.junit.Assert.*;
 
 public class TestSearchProtocolParser extends BaseSearchTest {
@@ -389,6 +394,38 @@ public void testQuerySerialization() throws IOException {
         }
     }
 
+    @Test
+    public void testHighlightSerialization() throws IOException {
+        {
+            Highlight originHighlight = randomHighlight();
+            Search.Highlight pbHighlight = SearchHighlightBuilder.buildHighlight(originHighlight);
+            Highlight newHighlight = SearchHighlightParser.toHighlight(pbHighlight);
+            assertJsonEquals(originHighlight, newHighlight);
+        }
+        {
+            Highlight originHighlight = randomHighlight();
+            byte[] pbHighlightBytes = SearchHighlightBuilder.buildHighlightToBytes(originHighlight);
+            Highlight newHighlight = SearchHighlightParser.toHighlight(pbHighlightBytes);
+            assertJsonEquals(originHighlight, newHighlight);
+        }
+    }
+
+    @Test
+    public void testInnerHitsSerialization() throws IOException {
+        {
+            InnerHits origiInnerHits = randomInnerHits();
+            Search.InnerHits pbInnerHits = buildInnerHits(origiInnerHits);
+            InnerHits newInnerHits = toInnerHits(pbInnerHits);
+            assertJsonEquals(origiInnerHits, newInnerHits);
+        }
+        {
+            InnerHits originInnerHits = randomInnerHits();
+            byte[] pbInnerHitsBytes = buildInnerHitsToBytes(originInnerHits);
+            InnerHits newInnerHits = toInnerHits(pbInnerHitsBytes);
+            assertJsonEquals(originInnerHits, newInnerHits);
+        }
+    }
+
     @Test
     public void testSearchQuerySerialization() throws IOException {
         {
diff --git a/src/test/java/com/alicloud/openservices/tablestore/functiontest/LocalTxnTest.java b/src/test/java/com/alicloud/openservices/tablestore/functiontest/LocalTxnTest.java
index ba731b7..673748b 100644
--- a/src/test/java/com/alicloud/openservices/tablestore/functiontest/LocalTxnTest.java
+++ b/src/test/java/com/alicloud/openservices/tablestore/functiontest/LocalTxnTest.java
@@ -78,7 +78,10 @@ public void TestStartTxnTwice() {
             client.startLocalTransaction(request);
         } catch (TableStoreException ex) {
             assertEquals("OTSRowOperationConflict", ex.getErrorCode());
-            assertEquals("Data is being modified by the other request.", ex.getMessage());
+            if (!(ex.getMessage().equals("Data is being modified by the other request.") ||
+                    ex.getMessage().equals("Failed to lock txn key: chengdu"))) {
+                fail(ex.getErrorCode());
+            }
         }
 
         commitTxn(txnId);
@@ -345,7 +348,10 @@ public void TestPutConfictTxn() {
             putRow("", "chengdu", 111L, 1099L);
         } catch (TableStoreException ex) {
             assertEquals("OTSRowOperationConflict", ex.getErrorCode());
-            assertEquals("Data is being modified by the other request.", ex.getMessage());
+            if (!(ex.getMessage().equals("Data is being modified by the other request.") ||
+                    ex.getMessage().equals("Transaction timeout because cannot acquire exclusive lock."))) {
+                fail(ex.getErrorCode());
+            }
         }
 
         commitTxn(txnId);
diff --git a/src/test/java/com/alicloud/openservices/tablestore/functiontest/RestrictedItemTest.java b/src/test/java/com/alicloud/openservices/tablestore/functiontest/RestrictedItemTest.java
index f8d6856..4256a97 100644
--- a/src/test/java/com/alicloud/openservices/tablestore/functiontest/RestrictedItemTest.java
+++ b/src/test/java/com/alicloud/openservices/tablestore/functiontest/RestrictedItemTest.java
@@ -29,11 +29,14 @@ public class RestrictedItemTest extends BaseFT {
     
     private static String tableName = "RestrictedItemFunctiontest";
     private static SyncClientInterface ots;
+
+    private static TimeseriesClient tsClient;
     private static final Logger LOG = LoggerFactory.getLogger(RestrictedItemTest.class);
     
     @BeforeClass
     public static void classBefore() throws JsonSyntaxException, IOException {
         ots = Utils.getOTSInstance();
+        tsClient = Utils.getTsClient();
     }
     
     @AfterClass
@@ -45,6 +48,8 @@ public static void classAfter() {
     public void setup() throws Exception {
         // 清理环境
         OTSHelper.deleteAllTable(ots);
+
+        OTSHelper.deleteTsTable(tsClient);
     }
     
     @After
diff --git a/src/test/java/com/alicloud/openservices/tablestore/functiontest/TimeseriesAnalyticalStoreTest.java b/src/test/java/com/alicloud/openservices/tablestore/functiontest/TimeseriesAnalyticalStoreTest.java
new file mode 100644
index 0000000..64f283a
--- /dev/null
+++ b/src/test/java/com/alicloud/openservices/tablestore/functiontest/TimeseriesAnalyticalStoreTest.java
@@ -0,0 +1,269 @@
+package com.alicloud.openservices.tablestore.functiontest;
+
+import com.alicloud.openservices.tablestore.SyncClient;
+import com.alicloud.openservices.tablestore.TimeseriesClient;
+import com.alicloud.openservices.tablestore.common.ServiceSettings;
+import com.alicloud.openservices.tablestore.model.*;
+import com.alicloud.openservices.tablestore.model.search.SyncStat;
+import com.alicloud.openservices.tablestore.model.sql.SQLQueryRequest;
+import com.alicloud.openservices.tablestore.model.sql.SQLQueryResponse;
+import com.alicloud.openservices.tablestore.model.sql.SQLResultSet;
+import com.alicloud.openservices.tablestore.model.sql.SQLRow;
+import com.alicloud.openservices.tablestore.model.timeseries.*;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TimeseriesAnalyticalStoreTest {
+
+    static TimeseriesClient client = null;
+    static SyncClient tableStoreClient = null;
+
+    @BeforeClass
+    public static void beforeClass() {
+        deleteTable("test_analytical_store1");
+        deleteTable("test_analytical_store2");
+        deleteTable("test_analytical_store3");
+        deleteTable("test_create_and_delete_analytical_store1");
+        deleteTable("test_create_and_delete_analytical_store2");
+        deleteTable("test_update_analytical_store");
+        deleteTable("test_describe_index_sync_phase");
+
+        ServiceSettings settings = ServiceSettings.load();
+        final String endPoint = settings.getOTSEndpoint();
+        final String accessId = settings.getOTSAccessKeyId();
+        final String accessKey = settings.getOTSAccessKeySecret();
+        final String instanceName = settings.getOTSInstanceName();
+
+        client = new TimeseriesClient(endPoint, accessId, accessKey, instanceName);
+        tableStoreClient = new SyncClient(endPoint, accessId, accessKey, instanceName);
+    }
+
+    @AfterClass
+    public static void afterClass() {
+        deleteTable("test_analytical_store1");
+        deleteTable("test_analytical_store2");
+        deleteTable("test_analytical_store3");
+        deleteTable("test_create_and_delete_analytical_store1");
+        deleteTable("test_create_and_delete_analytical_store2");
+        deleteTable("test_update_analytical_store");
+        deleteTable("test_describe_index_sync_phase");
+        client.shutdown();
+        tableStoreClient.shutdown();
+    }
+
+    static void deleteTable(String tableName) {
+        try {
+            client.deleteTimeseriesTable(new DeleteTimeseriesTableRequest(tableName));
+        } catch (Exception ignore) {}
+    }
+
+    @Test
+    public void testCreateTable() {
+        // create table with default analytical store
+        TimeseriesTableMeta meta = new TimeseriesTableMeta("test_analytical_store1");
+        meta.setTimeseriesMetaOptions(new TimeseriesMetaOptions());
+        CreateTimeseriesTableRequest createTimeseriesTableRequest = new CreateTimeseriesTableRequest(meta);
+        client.createTimeseriesTable(createTimeseriesTableRequest);
+        // describe table
+        DescribeTimeseriesTableRequest describeTableRequest = new DescribeTimeseriesTableRequest("test_analytical_store1");
+        DescribeTimeseriesTableResponse describeTableResponse = client.describeTimeseriesTable(describeTableRequest);
+        List<TimeseriesAnalyticalStore> analyticalStores = describeTableResponse.getAnalyticalStores();
+        Assert.assertEquals(1, analyticalStores.size());
+        Assert.assertEquals("default_analytical_store", analyticalStores.get(0).getAnalyticalStoreName());
+        Assert.assertEquals(-1, analyticalStores.get(0).getTimeToLive());
+        Assert.assertEquals(AnalyticalStoreSyncType.SYNC_TYPE_FULL, analyticalStores.get(0).getSyncOption());
+        // describe analytical store
+        DescribeTimeseriesAnalyticalStoreRequest describeRequest = new DescribeTimeseriesAnalyticalStoreRequest("test_analytical_store1", "default_analytical_store");
+        DescribeTimeseriesAnalyticalStoreResponse describeResponse = client.describeTimeseriesAnalyticalStore(describeRequest);
+        Assert.assertEquals( "default_analytical_store", describeResponse.getAnalyticalStore().getAnalyticalStoreName());
+        Assert.assertEquals( -1, describeResponse.getAnalyticalStore().getTimeToLive());
+        Assert.assertEquals( AnalyticalStoreSyncType.SYNC_TYPE_FULL, describeResponse.getAnalyticalStore().getSyncOption());
+        Assert.assertEquals(AnalyticalStoreSyncType.SYNC_TYPE_INCR, describeResponse.getSyncStat().getSyncPhase());
+        Assert.assertEquals(0, describeResponse.getSyncStat().getCurrentSyncTimestamp());
+        Assert.assertNull(describeResponse.getStorageSize());
+
+        // create table without analytical store
+        meta = new TimeseriesTableMeta("test_analytical_store2");
+        meta.setTimeseriesMetaOptions(new TimeseriesMetaOptions());
+        createTimeseriesTableRequest = new CreateTimeseriesTableRequest(meta);
+        createTimeseriesTableRequest.setEnableAnalyticalStore(false);
+        client.createTimeseriesTable(createTimeseriesTableRequest);
+        // describe table
+        describeTableRequest = new DescribeTimeseriesTableRequest("test_analytical_store2");
+        describeTableResponse = client.describeTimeseriesTable(describeTableRequest);
+        analyticalStores = describeTableResponse.getAnalyticalStores();
+        Assert.assertEquals(0, analyticalStores.size());
+
+        // create table with custom analytical store
+        meta = new TimeseriesTableMeta("test_analytical_store3");
+        meta.setTimeseriesMetaOptions(new TimeseriesMetaOptions());
+        createTimeseriesTableRequest = new CreateTimeseriesTableRequest(meta);
+        TimeseriesAnalyticalStore analyticalStore = new TimeseriesAnalyticalStore("custom_analytical_store");
+        analyticalStore.setSyncOption(AnalyticalStoreSyncType.SYNC_TYPE_FULL);
+        analyticalStore.setTimeToLive(86400 * 30);
+        List<TimeseriesAnalyticalStore> analyticalStoreList = new ArrayList<TimeseriesAnalyticalStore>();
+        analyticalStoreList.add(analyticalStore);
+        createTimeseriesTableRequest.setAnalyticalStores(analyticalStoreList);
+        client.createTimeseriesTable(createTimeseriesTableRequest);
+        // describe table
+        describeTableRequest = new DescribeTimeseriesTableRequest("test_analytical_store3");
+        describeTableResponse = client.describeTimeseriesTable(describeTableRequest);
+        analyticalStores = describeTableResponse.getAnalyticalStores();
+        Assert.assertEquals(1, analyticalStores.size());
+        Assert.assertEquals("custom_analytical_store", analyticalStores.get(0).getAnalyticalStoreName());
+        Assert.assertEquals(86400 * 30, analyticalStores.get(0).getTimeToLive());
+        Assert.assertEquals(AnalyticalStoreSyncType.SYNC_TYPE_FULL, analyticalStores.get(0).getSyncOption());
+    }
+
+    @Test
+    public void testCreateAndDelete() {
+        // create table
+        TimeseriesTableMeta meta = new TimeseriesTableMeta("test_create_and_delete_analytical_store1");
+        meta.setTimeseriesMetaOptions(new TimeseriesMetaOptions());
+        CreateTimeseriesTableRequest createTimeseriesTableRequest = new CreateTimeseriesTableRequest(meta);
+        createTimeseriesTableRequest.setEnableAnalyticalStore(false);
+        client.createTimeseriesTable(createTimeseriesTableRequest);
+        meta = new TimeseriesTableMeta("test_create_and_delete_analytical_store2");
+        meta.setTimeseriesMetaOptions(new TimeseriesMetaOptions());
+        createTimeseriesTableRequest = new CreateTimeseriesTableRequest(meta);
+        createTimeseriesTableRequest.setEnableAnalyticalStore(false);
+        client.createTimeseriesTable(createTimeseriesTableRequest);
+
+        // create full sync analytical store
+        TimeseriesAnalyticalStore analyticalStore = new TimeseriesAnalyticalStore("full_sync_analytical_store");
+        analyticalStore.setSyncOption(AnalyticalStoreSyncType.SYNC_TYPE_FULL);
+        analyticalStore.setTimeToLive(-1);
+        CreateTimeseriesAnalyticalStoreRequest createRequest = new CreateTimeseriesAnalyticalStoreRequest("test_create_and_delete_analytical_store1", analyticalStore);
+        client.createTimeseriesAnalyticalStore(createRequest);
+        DescribeTimeseriesAnalyticalStoreRequest describeRequest = new DescribeTimeseriesAnalyticalStoreRequest("test_create_and_delete_analytical_store1", "full_sync_analytical_store");
+        DescribeTimeseriesAnalyticalStoreResponse describeResponse = client.describeTimeseriesAnalyticalStore(describeRequest);
+        Assert.assertEquals( "full_sync_analytical_store", describeResponse.getAnalyticalStore().getAnalyticalStoreName());
+        Assert.assertEquals( -1, describeResponse.getAnalyticalStore().getTimeToLive());
+        Assert.assertEquals( AnalyticalStoreSyncType.SYNC_TYPE_FULL, describeResponse.getAnalyticalStore().getSyncOption());
+        Assert.assertEquals(AnalyticalStoreSyncType.SYNC_TYPE_FULL, describeResponse.getSyncStat().getSyncPhase());
+        Assert.assertEquals(0, describeResponse.getSyncStat().getCurrentSyncTimestamp());
+        Assert.assertNull(describeResponse.getStorageSize());
+
+        // delete analytical store without mapping table
+        DeleteTimeseriesAnalyticalStoreRequest deleteRequest = new DeleteTimeseriesAnalyticalStoreRequest("test_create_and_delete_analytical_store1", "full_sync_analytical_store");
+        client.deleteTimeseriesAnalyticalStore(deleteRequest);
+
+        // create incremental sync analytical store
+        analyticalStore = new TimeseriesAnalyticalStore("incr_sync_analytical_store");
+        analyticalStore.setSyncOption(AnalyticalStoreSyncType.SYNC_TYPE_INCR);
+        analyticalStore.setTimeToLive(86400*30);
+        createRequest = new CreateTimeseriesAnalyticalStoreRequest("test_create_and_delete_analytical_store2", analyticalStore);
+        client.createTimeseriesAnalyticalStore(createRequest);
+        describeRequest = new DescribeTimeseriesAnalyticalStoreRequest("test_create_and_delete_analytical_store2", "incr_sync_analytical_store");
+        describeResponse = client.describeTimeseriesAnalyticalStore(describeRequest);
+        Assert.assertEquals( "incr_sync_analytical_store", describeResponse.getAnalyticalStore().getAnalyticalStoreName());
+        Assert.assertEquals( 86400*30, describeResponse.getAnalyticalStore().getTimeToLive());
+        Assert.assertEquals( AnalyticalStoreSyncType.SYNC_TYPE_INCR, describeResponse.getAnalyticalStore().getSyncOption());
+        Assert.assertEquals(AnalyticalStoreSyncType.SYNC_TYPE_INCR, describeResponse.getSyncStat().getSyncPhase());
+        Assert.assertEquals(0, describeResponse.getSyncStat().getCurrentSyncTimestamp());
+        Assert.assertNull(describeResponse.getStorageSize());
+
+        // create sql mapping table
+        SQLQueryRequest sqlQueryRequest = new SQLQueryRequest("CREATE TABLE `test_create_and_delete_analytical_store2::cpu` (" +
+            "`_m_name` varchar(1024) NOT NULL," +
+            "`_data_source` varchar(1024) NOT NULL," +
+            "`_tags` varchar(1024) NOT NULL," +
+            "`_time` bigint(20) NOT NULL," +
+            "PRIMARY KEY (`_m_name`,`_data_source`,`_tags`,`_time`)" +
+            ") ENGINE=AnalyticalStore");
+        tableStoreClient.sqlQuery(sqlQueryRequest);
+
+        // delete analytical store with mapping table
+        try {
+            deleteRequest = new DeleteTimeseriesAnalyticalStoreRequest("test_create_and_delete_analytical_store2", "incr_sync_analytical_store");
+            client.deleteTimeseriesAnalyticalStore(deleteRequest);
+            Assert.fail();
+        } catch (Exception e) {
+            Assert.assertTrue(e.toString().contains("OTSParameterInvalid"));
+        }
+
+        // delete analytical store and drop mapping table
+        deleteRequest = new DeleteTimeseriesAnalyticalStoreRequest("test_create_and_delete_analytical_store2", "incr_sync_analytical_store");
+        deleteRequest.setDropMappingTable(true);
+        client.deleteTimeseriesAnalyticalStore(deleteRequest);
+        SQLQueryResponse showTablesResponse = tableStoreClient.sqlQuery(new SQLQueryRequest("SHOW TABLES"));
+        SQLResultSet resultSet = showTablesResponse.getSQLResultSet();
+        while (resultSet.hasNext()) {
+            SQLRow row = resultSet.next();
+            Assert.assertFalse(row.getString(0).equals("test_create_and_delete_analytical_store2::cpu"));
+        }
+    }
+
+    @Test
+    public void testUpdate() {
+        // create table
+        TimeseriesTableMeta meta = new TimeseriesTableMeta("test_update_analytical_store");
+        meta.setTimeseriesMetaOptions(new TimeseriesMetaOptions());
+        CreateTimeseriesTableRequest createTimeseriesTableRequest = new CreateTimeseriesTableRequest(meta);
+        client.createTimeseriesTable(createTimeseriesTableRequest);
+        DescribeTimeseriesAnalyticalStoreRequest describeRequest = new DescribeTimeseriesAnalyticalStoreRequest("test_update_analytical_store", "default_analytical_store");
+        DescribeTimeseriesAnalyticalStoreResponse describeResponse = client.describeTimeseriesAnalyticalStore(describeRequest);
+        Assert.assertEquals( "default_analytical_store", describeResponse.getAnalyticalStore().getAnalyticalStoreName());
+        Assert.assertEquals( -1, describeResponse.getAnalyticalStore().getTimeToLive());
+
+        // update analytical store
+        TimeseriesAnalyticalStore analyticalStore = new TimeseriesAnalyticalStore("default_analytical_store");
+        analyticalStore.setTimeToLive(86400*30);
+        UpdateTimeseriesAnalyticalStoreRequest updateRequest = new UpdateTimeseriesAnalyticalStoreRequest("test_update_analytical_store");
+        updateRequest.setAnalyticStore(analyticalStore);
+        client.updateTimeseriesAnalyticalStore(updateRequest);
+        describeResponse = client.describeTimeseriesAnalyticalStore(describeRequest);
+        Assert.assertEquals( "default_analytical_store", describeResponse.getAnalyticalStore().getAnalyticalStoreName());
+        Assert.assertEquals( 86400*30, describeResponse.getAnalyticalStore().getTimeToLive());
+    }
+
+    @Test
+    public void testDescribeIndexSyncPhase() {
+        // create table
+        TimeseriesTableMeta meta = new TimeseriesTableMeta("test_describe_index_sync_phase");
+        meta.setTimeseriesMetaOptions(new TimeseriesMetaOptions());
+        CreateTimeseriesTableRequest createTimeseriesTableRequest = new CreateTimeseriesTableRequest(meta);
+        client.createTimeseriesTable(createTimeseriesTableRequest);
+
+        // describe table
+        DescribeTableRequest describeTableRequest = new DescribeTableRequest("test_describe_index_sync_phase#timeseries");
+        DescribeTableResponse describeTableResponse = tableStoreClient.describeTable(describeTableRequest);
+        List<IndexMeta> indexMetas = describeTableResponse.getIndexMeta();
+        Assert.assertEquals(1, indexMetas.size());
+        Assert.assertEquals(SyncStat.SyncPhase.INCR, indexMetas.get(0).getIndexSyncPhase());
+
+        // delete default analytical store
+        DeleteTimeseriesAnalyticalStoreRequest deleteRequest = new DeleteTimeseriesAnalyticalStoreRequest("test_describe_index_sync_phase", "default_analytical_store");
+        client.deleteTimeseriesAnalyticalStore(deleteRequest);
+
+        // write data
+        PutTimeseriesDataRequest putRequest = new PutTimeseriesDataRequest("test_describe_index_sync_phase");
+        for (int i = 0; i < 100; i++) {
+            TimeseriesKey key = new TimeseriesKey("cpu", "intel");
+            TimeseriesRow row = new TimeseriesRow(key);
+            row.setTimeInUs(System.currentTimeMillis() * 1000 + i);
+            row.addField("usage", ColumnValue.fromLong(i));
+            putRequest.addRow(row);
+        }
+        client.putTimeseriesData(putRequest);
+
+        // create full sync analytical store
+        TimeseriesAnalyticalStore analyticalStore = new TimeseriesAnalyticalStore("full_sync_analytical_store");
+        analyticalStore.setSyncOption(AnalyticalStoreSyncType.SYNC_TYPE_FULL);
+        analyticalStore.setTimeToLive(-1);
+        CreateTimeseriesAnalyticalStoreRequest createRequest = new CreateTimeseriesAnalyticalStoreRequest("test_describe_index_sync_phase", analyticalStore);
+        client.createTimeseriesAnalyticalStore(createRequest);
+
+        // describe table
+        describeTableRequest = new DescribeTableRequest("test_describe_index_sync_phase#timeseries");
+        describeTableResponse = tableStoreClient.describeTable(describeTableRequest);
+        indexMetas = describeTableResponse.getIndexMeta();
+        Assert.assertEquals(1, indexMetas.size());
+        Assert.assertEquals(SyncStat.SyncPhase.FULL, indexMetas.get(0).getIndexSyncPhase());
+    }
+}
diff --git a/src/test/java/com/alicloud/openservices/tablestore/model/TestBatchWriteRowRequest.java b/src/test/java/com/alicloud/openservices/tablestore/model/TestBatchWriteRowRequest.java
index d92f16f..5b92943 100644
--- a/src/test/java/com/alicloud/openservices/tablestore/model/TestBatchWriteRowRequest.java
+++ b/src/test/java/com/alicloud/openservices/tablestore/model/TestBatchWriteRowRequest.java
@@ -21,6 +21,74 @@ public void testEmptyRequest() {
         assertTrue(request.getRowChange("NonExistTable", 0) == null);
     }
 
+    @Test
+    public void testCreateRequestForRetry() {
+        BatchWriteRowRequest request = new BatchWriteRowRequest();
+        String tableName = "MyTable";
+
+        PrimaryKeySchema[] schema = TestUtil.randomPrimaryKeySchema(5);
+        List<PrimaryKey> pks = new ArrayList<PrimaryKey>();
+        for (int i = 0; i < 100; i++) {
+            pks.add(TestUtil.randomPrimaryKey(schema));
+        }
+        for (int i = 0; i < 100; i++) {
+            RowPutChange rowChange = new RowPutChange(tableName, pks.get(i));
+            rowChange.addColumn("column" + i, ColumnValue.fromString("HelloWorld"));
+            request.addRowChange(rowChange);
+        }
+        assertEquals(request.getRowChange().size(), 1);
+        assertEquals(request.getRowChange().get(tableName).size(), 100);
+
+        List<BatchWriteRowResponse.RowResult> rowResults = new ArrayList<BatchWriteRowResponse.RowResult>();
+        rowResults.add(new BatchWriteRowResponse.RowResult(tableName, null, new Error("Code", "Msg"), 10));
+        rowResults.add(new BatchWriteRowResponse.RowResult(tableName, null, new Error("Code", "Msg"), 20));
+
+        {
+            BatchWriteRowRequest requestForRetry = request.createRequestForRetry(rowResults);
+            assertEquals(requestForRetry.getRowChange().size(), 1);
+            assertEquals(requestForRetry.getRowChange().get(tableName).size(), 2);
+            assertEquals(requestForRetry.getRowChange(tableName, 0).getPrimaryKey(), pks.get(10));
+            assertEquals(requestForRetry.getRowChange(tableName, 1).getPrimaryKey(), pks.get(20));
+            assertFalse(requestForRetry.hasSetTransactionId());
+            assertFalse(requestForRetry.isAtomicSet());
+        }
+
+        request.setAtomic(true);
+        {
+            BatchWriteRowRequest requestForRetry = request.createRequestForRetry(rowResults);
+            assertEquals(requestForRetry.getRowChange().size(), 1);
+            assertEquals(requestForRetry.getRowChange().get(tableName).size(), 2);
+            assertEquals(requestForRetry.getRowChange(tableName, 0).getPrimaryKey(), pks.get(10));
+            assertEquals(requestForRetry.getRowChange(tableName, 1).getPrimaryKey(), pks.get(20));
+            assertFalse(requestForRetry.hasSetTransactionId());
+            assertTrue(requestForRetry.isAtomicSet());
+            assertTrue(requestForRetry.isAtomic());
+        }
+        request.setAtomic(false);
+        {
+            BatchWriteRowRequest requestForRetry = request.createRequestForRetry(rowResults);
+            assertEquals(requestForRetry.getRowChange().size(), 1);
+            assertEquals(requestForRetry.getRowChange().get(tableName).size(), 2);
+            assertEquals(requestForRetry.getRowChange(tableName, 0).getPrimaryKey(), pks.get(10));
+            assertEquals(requestForRetry.getRowChange(tableName, 1).getPrimaryKey(), pks.get(20));
+            assertFalse(requestForRetry.hasSetTransactionId());
+            assertTrue(requestForRetry.isAtomicSet());
+            assertFalse(requestForRetry.isAtomic());
+        }
+        request.setTransactionId("xxx");
+        {
+            BatchWriteRowRequest requestForRetry = request.createRequestForRetry(rowResults);
+            assertEquals(requestForRetry.getRowChange().size(), 1);
+            assertEquals(requestForRetry.getRowChange().get(tableName).size(), 2);
+            assertEquals(requestForRetry.getRowChange(tableName, 0).getPrimaryKey(), pks.get(10));
+            assertEquals(requestForRetry.getRowChange(tableName, 1).getPrimaryKey(), pks.get(20));
+            assertTrue(requestForRetry.hasSetTransactionId());
+            assertEquals(requestForRetry.getTransactionId(), "xxx");
+            assertTrue(requestForRetry.isAtomicSet());
+            assertFalse(requestForRetry.isAtomic());
+        }
+    }
+
     @Test
     public void testRequest_RowChange_WithOneTable() {
         BatchWriteRowRequest request = new BatchWriteRowRequest();
diff --git a/src/test/java/com/alicloud/openservices/tablestore/model/search/SearchQueryTest.java b/src/test/java/com/alicloud/openservices/tablestore/model/search/SearchQueryTest.java
index 1d70934..7eef3f1 100644
--- a/src/test/java/com/alicloud/openservices/tablestore/model/search/SearchQueryTest.java
+++ b/src/test/java/com/alicloud/openservices/tablestore/model/search/SearchQueryTest.java
@@ -58,7 +58,10 @@ public void testQueryBuildersCount() {
                 methodList.add(method);
             }
         }
-        assertEquals("QueryBuilders is incomplete", QueryType.values().length - 1, methodList.size());
+        assertEquals("QueryBuilders is incomplete, Maybe the new query lacks builders implementation",
+                QueryType.values().length - 1,
+                methodList.size()
+        );
     }
 
     /**
diff --git a/src/test/java/com/alicloud/openservices/tablestore/model/search/TestDescribeSearchIndexResponse.java b/src/test/java/com/alicloud/openservices/tablestore/model/search/TestDescribeSearchIndexResponse.java
index 78127e4..e602d57 100644
--- a/src/test/java/com/alicloud/openservices/tablestore/model/search/TestDescribeSearchIndexResponse.java
+++ b/src/test/java/com/alicloud/openservices/tablestore/model/search/TestDescribeSearchIndexResponse.java
@@ -67,6 +67,7 @@ public void jsonizeAll() {
         JsonElement jsonElement = new Gson().toJsonTree(json);
         assertNotNull(jsonElement);
         assertEquals("{\n" +
+                "  \"IndexStatus\": null,\n" +
                 "  \"IndexSchema\": {\n" +
                 "    \"IndexSetting\": {\"RoutingFields\": [\"routing_field1\", \"routing_field2\"]},\n" +
                 "    \"FieldSchemas\": [{\n" +
diff --git a/src/test/java/com/alicloud/openservices/tablestore/model/search/TestFieldSchema.java b/src/test/java/com/alicloud/openservices/tablestore/model/search/TestFieldSchema.java
index 258baf1..d7481b6 100644
--- a/src/test/java/com/alicloud/openservices/tablestore/model/search/TestFieldSchema.java
+++ b/src/test/java/com/alicloud/openservices/tablestore/model/search/TestFieldSchema.java
@@ -5,7 +5,13 @@
 import com.alicloud.openservices.tablestore.model.search.analysis.FuzzyAnalyzerParameter;
 import com.alicloud.openservices.tablestore.model.search.analysis.SingleWordAnalyzerParameter;
 import com.alicloud.openservices.tablestore.model.search.analysis.SplitAnalyzerParameter;
+import com.alicloud.openservices.tablestore.model.search.vector.HNSWIndexParameter;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorDataType;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorIndexParameter;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorMetricType;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorOptions;
 import com.google.common.base.Supplier;
+import org.junit.Assert;
 import org.junit.Test;
 import static org.junit.Assert.*;
 
@@ -375,4 +381,36 @@ public String get() {
         assertEquals("f1", fieldSchemaMap.get("FieldName"));
         assertEquals(formats, fieldSchemaMap.get("DateFormats"));
     }
+
+    @Test
+    public void testVectorOptions() {
+        FieldType fieldType = randomFrom(FieldType.values());
+        FieldSchema fieldSchema = new FieldSchema("f1", fieldType);
+        VectorOptions options = new VectorOptions(VectorDataType.FLOAT_32, 12, VectorMetricType.COSINE, new HNSWIndexParameter(13, 14));
+        fieldSchema.setVectorOptions(options);
+        assertNotNull(fieldSchema.getVectorOptions());
+        VectorOptions vectorOptions = fieldSchema.getVectorOptions();
+        assertEquals(VectorDataType.FLOAT_32, vectorOptions.getDataType());
+        assertEquals(12, vectorOptions.getDimension().intValue());
+        assertEquals(VectorMetricType.COSINE, vectorOptions.getMetricType());
+
+        VectorIndexParameter indexParameter = options.getIndexParameter();
+        Assert.assertTrue(indexParameter instanceof HNSWIndexParameter);
+        HNSWIndexParameter hnswIndexParameter = (HNSWIndexParameter) indexParameter;
+        Assert.assertEquals(13, hnswIndexParameter.getM().intValue());
+        Assert.assertEquals(14, hnswIndexParameter.getEfConstruction().intValue());
+    }
+
+    @Test
+    public void testVectorOptionsJsonize() {
+        FieldType fieldType = randomFrom(FieldType.values());
+        FieldSchema fieldSchema = new FieldSchema("f1", fieldType);
+        VectorOptions options = new VectorOptions(VectorDataType.FLOAT_32, 12, VectorMetricType.COSINE, new HNSWIndexParameter(13, 14));
+        fieldSchema.setVectorOptions(options);
+        assertNotNull(fieldSchema.getVectorOptions());
+        String jsonString = fieldSchema.jsonize();
+        System.out.println(jsonString);
+        Map<?, ?> fieldSchemaMap = new Gson().fromJson(jsonString, Map.class);
+        assertEquals("f1", fieldSchemaMap.get("FieldName"));
+    }
 }
diff --git a/src/test/java/com/alicloud/openservices/tablestore/model/search/groupby/GroupByBuildersTest.java b/src/test/java/com/alicloud/openservices/tablestore/model/search/groupby/GroupByBuildersTest.java
index c503fec..8970878 100644
--- a/src/test/java/com/alicloud/openservices/tablestore/model/search/groupby/GroupByBuildersTest.java
+++ b/src/test/java/com/alicloud/openservices/tablestore/model/search/groupby/GroupByBuildersTest.java
@@ -4,6 +4,7 @@
 import com.alicloud.openservices.tablestore.model.ColumnType;
 import com.alicloud.openservices.tablestore.model.ColumnValue;
 import com.alicloud.openservices.tablestore.core.protocol.BaseSearchTest;
+import com.alicloud.openservices.tablestore.model.search.DateTimeUnit;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 
@@ -156,6 +157,7 @@ public void testgroupByHistogram() throws Exception {
             g1.setFieldName("g1");
             g1.setInterval(ValueUtil.toColumnValue(5.0));
             g1.setMissing(new ColumnValue(1, ColumnType.INTEGER));
+            g1.setOffset(ValueUtil.toColumnValue(1));
             g1.setMinDocCount(10L);
             g1.setFieldRange(
                 new FieldRange(new ColumnValue(1.0, ColumnType.DOUBLE), new ColumnValue(5.0, ColumnType.DOUBLE)));
@@ -172,6 +174,7 @@ public void testgroupByHistogram() throws Exception {
             GroupByHistogram.Builder builder1 = GroupByBuilders.groupByHistogram("n1", "g1")
                 .interval(5.0)
                 .missing(1)
+                .offset(1)
                 .minDocCount(10L)
                 .addFieldRange(1.0, 5.0)
                 .addGroupBySorter(Arrays.asList(GroupBySorter.groupKeySortInAsc(), GroupBySorter.rowCountSortInDesc()));
@@ -227,4 +230,93 @@ public void testgroupByHistogram() throws Exception {
             assertEquals(gson.toJson(builder1.build()), gson.toJson(g1));
         }
     }
+
+    /**
+     *  test group by date histogram
+     */
+    @Test
+    public void testGroupByDateHistogram() {
+        {
+            GroupByDateHistogram groupByDateHistogram = new GroupByDateHistogram();
+            groupByDateHistogram.setGroupByName("n1");
+            groupByDateHistogram.setFieldName("g1");
+            groupByDateHistogram.setInterval(1, DateTimeUnit.HOUR);
+            groupByDateHistogram.setOffset(30, DateTimeUnit.MINUTE);
+            groupByDateHistogram.setFieldRange(
+                    new FieldRange(new ColumnValue(1, ColumnType.INTEGER), new ColumnValue(10, ColumnType.INTEGER)));
+            groupByDateHistogram.setMissing(ValueUtil.toColumnValue(1));
+            GroupKeySort groupKeySort = new GroupKeySort();
+            groupKeySort.setOrder(SortOrder.ASC);
+            RowCountSort rowCountSort = new RowCountSort();
+            rowCountSort.setOrder(SortOrder.DESC);
+            GroupBySorter groupBySorter1 = new GroupBySorter();
+            GroupBySorter groupBySorter2 = new GroupBySorter();
+            groupBySorter1.setGroupKeySort(groupKeySort);
+            groupBySorter2.setRowCountSort(rowCountSort);
+            groupByDateHistogram.setGroupBySorters(Arrays.asList(groupBySorter1, groupBySorter2));
+            groupByDateHistogram.setSubAggregations(Arrays.asList(AggregationBuilders.max("m1", "m1").build(),
+                    AggregationBuilders.count("m2", "m2").build(),
+                    AggregationBuilders.count("m3", "m3").build()));
+
+            GroupByDateHistogram.Builder builder = GroupByBuilders.groupByDateHistogram("n1", "g1")
+                    .interval(1, DateTimeUnit.HOUR)
+                    .offset(30, DateTimeUnit.MINUTE)
+                    .fieldRange(1, 10)
+                    .missing(1)
+                    .addGroupBySorter(Arrays.asList(GroupBySorter.groupKeySortInAsc(), GroupBySorter.rowCountSortInDesc()))
+                    .addSubAggregation(AggregationBuilders.max("m1", "m1"))
+                    .addSubAggregation(AggregationBuilders.count("m2", "m2"))
+                    .addSubAggregation(AggregationBuilders.count("m3", "m3"));
+
+            Gson gson = new GsonBuilder()
+                    .disableHtmlEscaping()
+                    .disableInnerClassSerialization()
+                    .serializeNulls()
+                    .serializeSpecialFloatingPointValues()
+                    .enableComplexMapKeySerialization().create();
+
+            assertEquals(gson.toJson(builder.build()), gson.toJson(groupByDateHistogram));
+        }
+        {
+            GroupByDateHistogram groupByDateHistogram = new GroupByDateHistogram();
+            groupByDateHistogram.setGroupByName("n1");
+            groupByDateHistogram.setFieldName("g1");
+            groupByDateHistogram.setInterval(1, DateTimeUnit.HOUR);
+            groupByDateHistogram.setOffset(30, DateTimeUnit.MILLISECOND);
+            groupByDateHistogram.setFieldRange(
+                    new FieldRange(new ColumnValue(1, ColumnType.INTEGER), new ColumnValue(10, ColumnType.INTEGER)));
+            groupByDateHistogram.setMissing(ValueUtil.toColumnValue(1));
+            GroupKeySort groupKeySort = new GroupKeySort();
+            groupKeySort.setOrder(SortOrder.ASC);
+            RowCountSort rowCountSort = new RowCountSort();
+            rowCountSort.setOrder(SortOrder.DESC);
+            GroupBySorter groupBySorter1 = new GroupBySorter();
+            GroupBySorter groupBySorter2 = new GroupBySorter();
+            groupBySorter1.setGroupKeySort(groupKeySort);
+            groupBySorter2.setRowCountSort(rowCountSort);
+            groupByDateHistogram.setGroupBySorters(Arrays.asList(groupBySorter1, groupBySorter2));
+            groupByDateHistogram.setSubAggregations(Arrays.asList(AggregationBuilders.max("m1", "m1").build(),
+                    AggregationBuilders.count("m2", "m2").build(),
+                    AggregationBuilders.count("m3", "m3").build()));
+
+            GroupByDateHistogram.Builder builder = GroupByBuilders.groupByDateHistogram("n1", "g1")
+                    .interval(1, DateTimeUnit.HOUR)
+                    .offset(30, DateTimeUnit.MILLISECOND)
+                    .fieldRange(1, 10)
+                    .missing(1)
+                    .addGroupBySorter(Arrays.asList(GroupBySorter.groupKeySortInAsc(), GroupBySorter.rowCountSortInDesc()))
+                    .addSubAggregation(AggregationBuilders.max("m1", "m1"))
+                    .addSubAggregation(AggregationBuilders.count("m2", "m2"))
+                    .addSubAggregation(AggregationBuilders.count("m3", "m3"));
+
+            Gson gson = new GsonBuilder()
+                    .disableHtmlEscaping()
+                    .disableInnerClassSerialization()
+                    .serializeNulls()
+                    .serializeSpecialFloatingPointValues()
+                    .enableComplexMapKeySerialization().create();
+
+            assertEquals(gson.toJson(builder.build()), gson.toJson(groupByDateHistogram));
+        }
+    }
 } 
diff --git a/src/test/java/com/alicloud/openservices/tablestore/model/search/query/KnnVectorQueryTest.java b/src/test/java/com/alicloud/openservices/tablestore/model/search/query/KnnVectorQueryTest.java
new file mode 100644
index 0000000..afea000
--- /dev/null
+++ b/src/test/java/com/alicloud/openservices/tablestore/model/search/query/KnnVectorQueryTest.java
@@ -0,0 +1,84 @@
+package com.alicloud.openservices.tablestore.model.search.query;
+
+import com.alicloud.openservices.tablestore.core.protocol.BaseSearchTest;
+import com.alicloud.openservices.tablestore.core.protocol.Search;
+import com.google.protobuf.ByteString;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class KnnVectorQueryTest extends BaseSearchTest {
+
+    @Test
+    public void testGetFieldName() {
+        KnnVectorQuery query = new KnnVectorQuery();
+        query.setFieldName("field1");
+        assertEquals(query.getFieldName(), "field1");
+    }
+
+    @Test
+    public void testQueryType() {
+        KnnVectorQuery query = new KnnVectorQuery();
+        assertEquals(query.getQueryType(), QueryType.QueryType_KnnVectorQuery);
+    }
+
+    @Test
+    public void testTopK() {
+        KnnVectorQuery query = new KnnVectorQuery();
+        query.setTopK(998);
+        assertEquals(query.getTopK().intValue(), 998);
+    }
+
+    @Test
+    public void testFloatVector() {
+        float[] floats = new float[random().nextInt(100) + 1];
+        for (int i = 0; i < floats.length; i++) {
+            floats[i] = random().nextFloat();
+        }
+        KnnVectorQuery query = new KnnVectorQuery();
+        query.setFloat32QueryVector(floats);
+        assertEquals(query.getFloat32QueryVector(), floats);
+    }
+
+    @Test
+    public void testSerialize() {
+        KnnVectorQuery query = new KnnVectorQuery();
+        query.setFieldName("field1");
+        ByteString actual = query.serialize();
+
+        Search.KnnVectorQuery.Builder builder = Search.KnnVectorQuery.newBuilder();
+        builder.setFieldName("field1");
+        ByteString expected = builder.build().toByteString();
+
+        assertEquals(expected, actual);
+    }
+
+    @Test
+    public void testBuilder() {
+        KnnVectorQuery query = new KnnVectorQuery();
+        String fieldName = randomString(3);
+        query.setFieldName(fieldName);
+        int topK = random().nextInt();
+        query.setTopK(topK);
+        float[] floats = new float[random().nextInt(100) + 1];
+        for (int i = 0; i < floats.length; i++) {
+            floats[i] = random().nextFloat();
+        }
+        query.setFloat32QueryVector(floats);
+        byte[] bytes = new byte[random().nextInt(100) + 1];
+        random().nextBytes(bytes);
+        Query filter = randomQuery();
+        query.setFilter(filter);
+        float weight = random().nextFloat();
+        query.setWeight(weight);
+
+
+        KnnVectorQuery.Builder builder = KnnVectorQuery.newBuilder()
+                .field(fieldName)
+                .topK(topK)
+                .queryVector(floats)
+                .filter(filter)
+                .weight(weight);
+        assertEquals(query.serialize(), builder.build().serialize());
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/com/alicloud/openservices/tablestore/model/search/vector/HNSWIndexParameterTest.java b/src/test/java/com/alicloud/openservices/tablestore/model/search/vector/HNSWIndexParameterTest.java
new file mode 100644
index 0000000..b8bd703
--- /dev/null
+++ b/src/test/java/com/alicloud/openservices/tablestore/model/search/vector/HNSWIndexParameterTest.java
@@ -0,0 +1,31 @@
+package com.alicloud.openservices.tablestore.model.search.vector;
+
+import com.alicloud.openservices.tablestore.core.protocol.BaseSearchTest;
+import com.alicloud.openservices.tablestore.core.protocol.Search;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class HNSWIndexParameterTest extends BaseSearchTest {
+
+    @Test
+    public void testSerialize() {
+        int m = random().nextInt();
+        int ef = random().nextInt();
+        HNSWIndexParameter hnswIndexParameter = new HNSWIndexParameter(m, ef);
+
+        byte[] byteArray = Search.HNSWIndexParameter.newBuilder()
+                .setM(m)
+                .setEfConstruction(ef)
+                .build().toByteArray();
+
+        Assert.assertArrayEquals(byteArray, hnswIndexParameter.serialize().toByteArray());
+    }
+
+    @Test
+    public void testJsonize() {
+        int m = random().nextInt();
+        int ef = random().nextInt();
+        HNSWIndexParameter hnswIndexParameter = new HNSWIndexParameter(m, ef);
+        System.out.println(hnswIndexParameter.jsonize());
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/com/alicloud/openservices/tablestore/model/search/vector/VectorOptionsTest.java b/src/test/java/com/alicloud/openservices/tablestore/model/search/vector/VectorOptionsTest.java
new file mode 100644
index 0000000..81e89a8
--- /dev/null
+++ b/src/test/java/com/alicloud/openservices/tablestore/model/search/vector/VectorOptionsTest.java
@@ -0,0 +1,74 @@
+package com.alicloud.openservices.tablestore.model.search.vector;
+
+import com.alicloud.openservices.tablestore.core.protocol.BaseSearchTest;
+import com.alicloud.openservices.tablestore.core.protocol.Search;
+import com.alicloud.openservices.tablestore.core.protocol.SearchProtocolBuilder;
+import com.alicloud.openservices.tablestore.core.protocol.SearchProtocolParser;
+import com.alicloud.openservices.tablestore.core.utils.Repeat;
+import com.alicloud.openservices.tablestore.model.search.FieldSchema;
+import com.alicloud.openservices.tablestore.model.search.FieldType;
+import com.google.gson.Gson;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class VectorOptionsTest extends BaseSearchTest {
+
+    @Test
+    public void testGetDataType() {
+        VectorOptions options = new VectorOptions(VectorDataType.FLOAT_32, 12, VectorMetricType.COSINE, new HNSWIndexParameter(12, 14));
+        Assert.assertEquals(VectorDataType.FLOAT_32, options.getDataType());
+    }
+
+    @Test
+    public void testGetDimension() {
+        VectorOptions options = new VectorOptions(VectorDataType.FLOAT_32, 12, VectorMetricType.COSINE, new HNSWIndexParameter(12, 14));
+        Assert.assertEquals(12, options.getDimension().intValue());
+
+    }
+
+    @Test
+    public void testGetMetricType() {
+        VectorOptions options = new VectorOptions(VectorDataType.FLOAT_32, 12, VectorMetricType.COSINE, new HNSWIndexParameter(12, 14));
+        Assert.assertEquals(VectorMetricType.COSINE, options.getMetricType());
+
+    }
+
+    @Test
+    public void testGetIndexParameter() {
+        VectorOptions options = new VectorOptions(VectorDataType.FLOAT_32, 12, VectorMetricType.COSINE, new HNSWIndexParameter(12, 14));
+        VectorIndexParameter indexParameter = options.getIndexParameter();
+        Assert.assertTrue(indexParameter instanceof HNSWIndexParameter);
+        HNSWIndexParameter hnswIndexParameter = (HNSWIndexParameter) indexParameter;
+        Assert.assertEquals(12, hnswIndexParameter.getM().intValue());
+        Assert.assertEquals(14, hnswIndexParameter.getEfConstruction().intValue());
+    }
+
+    @Test
+    @Repeat(1)
+    public void testJsonize() {
+        VectorOptions options = new VectorOptions(VectorDataType.FLOAT_32, 12, VectorMetricType.COSINE, new HNSWIndexParameter(12, 14));
+        System.out.println(options.jsonize());
+
+        FieldSchema fieldSchema = new FieldSchema("testName", FieldType.VECTOR);
+        fieldSchema.setVectorOptions(options);
+        System.out.println(fieldSchema.jsonize());
+    }
+
+    @Test
+    @Repeat(100)
+    public void testParse() {
+        Gson gson = new Gson();
+        {
+            VectorOptions options = new VectorOptions(VectorDataType.FLOAT_32, 12, VectorMetricType.COSINE, new HNSWIndexParameter(12, 14));
+            Search.VectorOptions pb = SearchProtocolBuilder.buildVectorOptions(options);
+            VectorOptions vectorOptions = SearchProtocolParser.toVectorOptions(pb);
+            Assert.assertEquals(gson.toJson(options), gson.toJson(vectorOptions));
+        }
+        {
+            VectorOptions options = randomVectorOptions();
+            Search.VectorOptions pb = SearchProtocolBuilder.buildVectorOptions(options);
+            VectorOptions vectorOptions = SearchProtocolParser.toVectorOptions(pb);
+            Assert.assertEquals(gson.toJson(options), gson.toJson(vectorOptions));
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/examples/SearchIndexSample.java b/src/test/java/examples/SearchIndexSample.java
index 64ba01c..b816c91 100644
--- a/src/test/java/examples/SearchIndexSample.java
+++ b/src/test/java/examples/SearchIndexSample.java
@@ -4,6 +4,7 @@
 import com.alicloud.openservices.tablestore.SyncClient;
 import com.alicloud.openservices.tablestore.SyncClientInterface;
 import com.alicloud.openservices.tablestore.TableStoreException;
+import com.alicloud.openservices.tablestore.core.utils.StringUtils;
 import com.alicloud.openservices.tablestore.model.*;
 import com.alicloud.openservices.tablestore.model.iterator.RowIterator;
 import com.alicloud.openservices.tablestore.model.search.*;
@@ -15,6 +16,7 @@
 import com.alicloud.openservices.tablestore.model.search.analysis.AnalyzerParameter;
 import com.alicloud.openservices.tablestore.model.search.analysis.SplitAnalyzerParameter;
 import com.alicloud.openservices.tablestore.model.search.groupby.GroupByBuilders;
+import com.alicloud.openservices.tablestore.model.search.groupby.GroupByDateHistogramItem;
 import com.alicloud.openservices.tablestore.model.search.groupby.GroupByFieldResult;
 import com.alicloud.openservices.tablestore.model.search.groupby.GroupByFieldResultItem;
 import com.alicloud.openservices.tablestore.model.search.groupby.GroupByFilterResult;
@@ -23,14 +25,22 @@
 import com.alicloud.openservices.tablestore.model.search.groupby.GroupByHistogramResult;
 import com.alicloud.openservices.tablestore.model.search.groupby.GroupByRangeResult;
 import com.alicloud.openservices.tablestore.model.search.groupby.GroupByRangeResultItem;
+import com.alicloud.openservices.tablestore.model.search.highlight.Highlight;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightField;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightFragmentOrder;
+import com.alicloud.openservices.tablestore.model.search.highlight.HighlightParameter;
 import com.alicloud.openservices.tablestore.model.search.query.*;
+import com.alicloud.openservices.tablestore.model.search.sort.DocSort;
 import com.alicloud.openservices.tablestore.model.search.sort.FieldSort;
+import com.alicloud.openservices.tablestore.model.search.sort.ScoreSort;
 import com.alicloud.openservices.tablestore.model.search.sort.Sort;
 import com.alicloud.openservices.tablestore.model.search.sort.SortOrder;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 public class SearchIndexSample {
 
@@ -98,6 +108,10 @@ public static void main(String[] args) {
             System.out.println("MatchQuery...");
             matchQuery(client);
 
+            // 使用MatchQuery查询数据并高亮关键词
+            System.out.println("MatchQuery with Highlighting...");
+            matchQueryWithHighlighting(client);
+
             // 使用RangeQuery查询数据，并排序
             System.out.println("RangeQuery...");
             rangeQuery(client);
@@ -128,7 +142,11 @@ public static void main(String[] args) {
 
             // 使用groupByHistogram查询数据
             System.out.println("groupByHistogram...");
-            groupByHistogram( client);
+            groupByHistogram(client);
+
+            // 使用groupByDateHistogram查询数据
+            System.out.println("groupByDateHistogram...");
+            groupByDateHistogram(client);
 
             // 使用percentilesAggLong查询数据
             System.out.println("percentilesAggLong(client);...");
@@ -178,10 +196,20 @@ private static void createSearchIndex(SyncClient client) {
         request.setIndexName(INDEX_NAME);
         IndexSchema indexSchema = new IndexSchema();
         indexSchema.setFieldSchemas(Arrays.asList(
-            new FieldSchema("Col_Keyword", FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true),
-            new FieldSchema("Col_Long", FieldType.LONG).setIndex(true).setEnableSortAndAgg(true),
-            new FieldSchema("Col_Long_sec", FieldType.LONG).setIndex(true).setEnableSortAndAgg(true),
-            new FieldSchema("Col_Text", FieldType.TEXT).setIndex(true)));
+                new FieldSchema("Col_Keyword", FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true),
+                new FieldSchema("Col_Long", FieldType.LONG).setIndex(true).setEnableSortAndAgg(true),
+                new FieldSchema("Col_Long_sec", FieldType.LONG).setIndex(true).setEnableSortAndAgg(true),
+                new FieldSchema("Col_Double", FieldType.DOUBLE).setIndex(true).setEnableSortAndAgg(true),
+                new FieldSchema("Col_Text", FieldType.TEXT).setIndex(true).setEnableHighlighting(true),
+                new FieldSchema("Col_Date", FieldType.DATE).setIndex(true).setDateFormats(Collections.singletonList("yyyy-MM-dd HH:mm:ss")),
+                new FieldSchema("Col_Nested", FieldType.NESTED).setIndex(true)
+                        .setSubFieldSchemas(Arrays.asList(
+                                new FieldSchema("Level1_Col1_Text", FieldType.TEXT).setIndex(true).setStore(true).setEnableHighlighting(true),
+                                new FieldSchema("Level1_Col2_Nested", FieldType.NESTED).setIndex(true)
+                                        .setSubFieldSchemas(Collections.singletonList(
+                                                new FieldSchema("Level2_Col1_Text", FieldType.TEXT).setIndex(true).setStore(true).setEnableHighlighting(true)
+                                        ))
+                        ))));
         request.setIndexSchema(indexSchema);
         client.createSearchIndex(request);
     }
@@ -196,7 +224,7 @@ private static void createSearchIndexWithAnalyzer(SyncClient client) {
         IndexSchema indexSchema = new IndexSchema();
         indexSchema.setFieldSchemas(Arrays.asList(
             new FieldSchema("Col_Text", FieldType.TEXT).setIndex(true).setAnalyzer(analyzer)
-                .setAnalyzerParameter(analyzerParameter)));
+                .setAnalyzerParameter(analyzerParameter).setEnableHighlighting(true)));
         request.setIndexSchema(indexSchema);
         client.createSearchIndex(request);
     }
@@ -209,6 +237,7 @@ private static void createSearchIndexWithIndexSort(SyncClient client) {
         indexSchema.setFieldSchemas(Arrays.asList(
             new FieldSchema("Col_Keyword", FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true),
             new FieldSchema("Col_Long", FieldType.LONG).setIndex(true).setEnableSortAndAgg(true),
+            new FieldSchema("Col_Double", FieldType.DOUBLE).setIndex(true).setEnableSortAndAgg(true),
             new FieldSchema("Col_Text", FieldType.TEXT).setIndex(true),
             new FieldSchema("Timestamp", FieldType.LONG).setIndex(true).setEnableSortAndAgg(true)));
         indexSchema.setIndexSort(new Sort(
@@ -275,7 +304,18 @@ private static void deleteTable(SyncClient client) {
     private static void putRow(SyncClient client) {
         String[] keywords = {"hangzhou", "beijing", "shanghai", "hangzhou shanghai", "hangzhou beijing shanghai"};
         long[] longValues = {1, 2, 3, 4, 5, 6, 7};
+        double[] doubleValues = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
         for (int i = 0; i < 5; i++) {
+            // 构造Nested属性列
+            String stringBuilder = "[{" +
+                "\"Level1_Col1_Text\":\"" + keywords[i] + " " + i + "_1" + "\"," +
+                "\"Level1_Col2_Nested\":" + "[{" +
+                "\"Level2_Col1_Text\":\"" + keywords[i] + " " + i + "_1" + "\"" + "}]}," +
+                "{" +
+                "\"Level1_Col1_Text\":\"" + keywords[i] + " " + i + "_2" + "\"," +
+                "\"Level1_Col2_Nested\":" + "[{" +
+                "\"Level2_Col1_Text\":\"" + keywords[i] + " " + i + "_2" + "\"" + "}]}]";
+
             // 构造主键
             PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
             primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.fromString("sample"));
@@ -288,9 +328,10 @@ private static void putRow(SyncClient client) {
             rowPutChange.addColumn("Col_Keyword", ColumnValue.fromString(keywords[i]));
             rowPutChange.addColumn("Col_Long", ColumnValue.fromLong(longValues[i]));
             rowPutChange.addColumn("Col_Long_sec", ColumnValue.fromLong(longValues[i]));
-
+            rowPutChange.addColumn("Col_Double", ColumnValue.fromDouble(doubleValues[i]));
             rowPutChange.addColumn("Col_Text", ColumnValue.fromString(keywords[i]));
             rowPutChange.addColumn("Col_Boolean", ColumnValue.fromBoolean(i % 2 == 0 ? true : false));
+            rowPutChange.addColumn("Col_Nested", ColumnValue.fromString(stringBuilder));
             client.putRow(new PutRowRequest(rowPutChange));
         }
         {   // 构造一行缺失 Col_Keyword 和 Col_Text列
@@ -1169,6 +1210,42 @@ public static void groupByHistogram(SyncClient client) {
         }
     }
 
+    /**
+     * 日期直方图统计：假设表中存储的是订单数据，如下代码实现按照1天的维度统计卖出的订单数，并通过添加subAgg统计每一天卖出价格的最大值
+     */
+    public static void groupByDateHistogram(SyncClient client) {
+        //构建查询语句。
+        SearchRequest searchRequest = SearchRequest.newBuilder()
+                .returnAllColumns(false)
+                .tableName(TABLE_NAME)
+                .indexName(INDEX_NAME)
+                .searchQuery(
+                        SearchQuery.newBuilder()
+                                .query(QueryBuilders.matchAll())
+                                .limit(0)
+                                .getTotalCount(false)
+                                .addGroupBy(GroupByBuilders
+                                        .groupByDateHistogram("groupByDateHistogram", "Col_Date")
+                                        .interval(1, DateTimeUnit.DAY)  // 一天一个分组
+                                        .minDocCount(1)     // 分组内个数大于1才会返回该分组
+                                        .timeZone("+05:30")  // 假如'Col_Date'字段内没有时区相关信息，可以指定timeZone，统计分组时候会该时间会落入哪一天的分组，以印度时区为例可以填写: +05:30
+                                        .missing("2017-05-10 12:00:00") // 如果某一行数据的'Col_Date'字段为空，使用该值进行统计
+                                        .fieldRange("2017-05-01 00:00", "2017-05-21 00:00:00")  // 只统计5月1号到5月21号期间
+                                        .addSubAggregation(AggregationBuilders.max("subAggName", "Column_Price")) // 添加子统计聚合，求每个分组内部的价格最大值
+                                )
+                                .build())
+                .build();
+        //执行查询。
+        SearchResponse resp = client.search(searchRequest);
+        //获取日期直方图的统计聚合结果。
+        List<GroupByDateHistogramItem> items = resp.getGroupByResults().getAsGroupByDateHistogramResult("groupByDateHistogram").getGroupByDateHistogramItems();
+        for (GroupByDateHistogramItem item : items) {
+            // 获取分组内的价格最大值
+            double maxPrice = item.getSubAggregationResults().getAsMaxAggregationResult("subAggName").getValue();
+            System.out.printf("millisecondTimestamp:%d, count:%d, maxPrice:%s \n", item.getTimestamp(), item.getRowCount(), maxPrice);
+        }
+    }
+
     /**
      * 在 MatchQuery 的结果上进行百分比统计。
      */
@@ -1233,6 +1310,55 @@ public static void percentilesAggLong(SyncClient client) {
         }
     }
 
+    /**
+     * MatchQuery关键词高亮
+     */
+    public static void matchQueryWithHighlighting(SyncClient client) {
+        SearchRequest searchRequest = SearchRequest.newBuilder()
+            .tableName(TABLE_NAME)
+            .indexName(INDEX_NAME)
+            .returnAllColumnsFromIndex(true)
+            .searchQuery(SearchQuery.newBuilder()
+                .limit(5)
+                .query(QueryBuilders.bool()
+                    .should(QueryBuilders.match("Col_Text", "hangzhou shanghai"))
+                    .should(QueryBuilders.nested()
+                        .path("Col_Nested")
+                        .scoreMode(ScoreMode.Min)
+                        .query(QueryBuilders.bool()
+                            .should(QueryBuilders.match("Col_Nested.Level1_Col1_Text", "hangzhou shanghai"))
+                            .should(QueryBuilders.nested()
+                                .path("Col_Nested.Level1_Col2_Nested")
+                                .scoreMode(ScoreMode.Min)
+                                .query(QueryBuilders.match("Col_Nested.Level1_Col2_Nested.Level2_Col1_Text", "hangzhou shanghai"))
+                                .innerHits(InnerHits.newBuilder()
+                                    .highlight(Highlight.newBuilder()
+                                        .addFieldHighlightParam("Col_Nested.Level1_Col2_Nested.Level2_Col1_Text", HighlightParameter.newBuilder().build())
+                                        .build())
+                                    .build())))
+                        .innerHits(InnerHits.newBuilder()
+                            .sort(new Sort(Arrays.asList(
+                                new ScoreSort(),
+                                new DocSort()
+                            )))
+                            .highlight(Highlight.newBuilder()
+                                .addFieldHighlightParam("Col_Nested.Level1_Col1_Text", HighlightParameter.newBuilder().build())
+                                .build())
+                            .build())))
+                .highlight(Highlight.newBuilder()
+                    .addFieldHighlightParam("Col_Text", HighlightParameter.newBuilder()
+                        .highlightFragmentOrder(HighlightFragmentOrder.TEXT_SEQUENCE)
+                        .preTag("<b>")
+                        .postTag("</b>")
+                        .build())
+                    .build())
+                .build())
+            .build();
+        SearchResponse resp = client.search(searchRequest);
+
+        printSearchHit(resp.getSearchHits(), "");
+    }
+
     /**
      * ScanQuery获取数据，遇到异常进行重试。
      */
@@ -1315,4 +1441,43 @@ public void run() {
         }
         System.out.println("all thread done!");
     }
+
+    /**
+     * 打印searchHit内容
+     * @param searchHits
+     * @param prefix
+     */
+    private static void printSearchHit(List<SearchHit> searchHits, String prefix) {
+        for (SearchHit searchHit : searchHits) {
+            if (searchHit.getScore() != null) {
+                System.out.printf("%s Score: %s\n", prefix, searchHit.getScore());
+            }
+
+            if (searchHit.getOffset() != null) {
+                System.out.printf("%s Offset: %s\n", prefix, searchHit.getOffset());
+            }
+
+            if (searchHit.getRow() != null) {
+                System.out.printf("%s Row: %s\n", prefix, searchHit.getRow().toString());
+            }
+
+            if (searchHit.getHighlightResultItem() != null) {
+                System.out.printf("%s Highlight: \n", prefix);
+                StringBuilder strBuilder = new StringBuilder();
+                for (Map.Entry<String, HighlightField> entry : searchHit.getHighlightResultItem().getHighlightFields().entrySet()) {
+                    strBuilder.append(entry.getKey()).append(":").append("[");
+                    strBuilder.append(StringUtils.join(",", entry.getValue().getFragments())).append("]\n");
+                }
+                System.out.printf("%s   %s", prefix, strBuilder);
+            }
+
+            for (SearchInnerHit searchInnerHit : searchHit.getSearchInnerHits().values()) {
+                System.out.printf("%s Path: %s\n", prefix, searchInnerHit.getPath());
+                System.out.printf("%s InnerHit: \n", prefix);
+                printSearchHit(searchInnerHit.getSubSearchHits(), prefix + "    ");
+            }
+
+            System.out.println();
+        }
+    }
 }
diff --git a/src/test/java/examples/SearchKnnVectorSample.java b/src/test/java/examples/SearchKnnVectorSample.java
new file mode 100644
index 0000000..43f64b3
--- /dev/null
+++ b/src/test/java/examples/SearchKnnVectorSample.java
@@ -0,0 +1,169 @@
+package examples;
+
+import com.alicloud.openservices.tablestore.ClientException;
+import com.alicloud.openservices.tablestore.SyncClient;
+import com.alicloud.openservices.tablestore.TableStoreException;
+import com.alicloud.openservices.tablestore.model.ColumnValue;
+import com.alicloud.openservices.tablestore.model.CreateTableRequest;
+import com.alicloud.openservices.tablestore.model.PrimaryKey;
+import com.alicloud.openservices.tablestore.model.PrimaryKeyBuilder;
+import com.alicloud.openservices.tablestore.model.PrimaryKeySchema;
+import com.alicloud.openservices.tablestore.model.PrimaryKeyType;
+import com.alicloud.openservices.tablestore.model.PrimaryKeyValue;
+import com.alicloud.openservices.tablestore.model.PutRowRequest;
+import com.alicloud.openservices.tablestore.model.RowPutChange;
+import com.alicloud.openservices.tablestore.model.TableMeta;
+import com.alicloud.openservices.tablestore.model.TableOptions;
+import com.alicloud.openservices.tablestore.model.search.CreateSearchIndexRequest;
+import com.alicloud.openservices.tablestore.model.search.FieldSchema;
+import com.alicloud.openservices.tablestore.model.search.FieldType;
+import com.alicloud.openservices.tablestore.model.search.IndexSchema;
+import com.alicloud.openservices.tablestore.model.search.SearchQuery;
+import com.alicloud.openservices.tablestore.model.search.SearchRequest;
+import com.alicloud.openservices.tablestore.model.search.SearchResponse;
+import com.alicloud.openservices.tablestore.model.search.query.KnnVectorQuery;
+import com.alicloud.openservices.tablestore.model.search.query.MatchAllQuery;
+import com.alicloud.openservices.tablestore.model.search.query.QueryBuilders;
+import com.alicloud.openservices.tablestore.model.search.sort.ScoreSort;
+import com.alicloud.openservices.tablestore.model.search.sort.Sort;
+import com.alicloud.openservices.tablestore.model.search.vector.HNSWIndexParameter;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorDataType;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorMetricType;
+import com.alicloud.openservices.tablestore.model.search.vector.VectorOptions;
+
+import java.util.Arrays;
+import java.util.Collections;
+
+public class SearchKnnVectorSample {
+
+    private static final String TABLE_NAME = "search_index_sample_table";
+    private static final String INDEX_NAME = "test_index";
+    private static final String PRIMARY_KEY_NAME_1 = "pk1";
+
+    public static void main(String[] args) {
+
+        final String endPoint = "";
+        final String accessId = "";
+        final String accessKey = "";
+        final String instanceName = "";
+
+        SyncClient client = new SyncClient(endPoint, accessId, accessKey, instanceName);
+
+        try {
+            // 建表
+            createTable(client);
+
+            System.out.println("create table succeeded.");
+
+            // 创建一个SearchIndex
+            createSearchIndex(client);
+            System.out.println("create search index succeeded.");
+
+            // putRow写入几行数据
+            putRow(client);
+            System.out.println("put row succeeded.");
+
+            // 等待数据同步到SearchIndex
+            waitUntilAllDataSync(client, INDEX_NAME, 2);
+
+            // 使用向量查询
+            knnVectorQuery(client);
+
+        } catch (TableStoreException e) {
+            System.err.println("操作失败，详情：" + e.getMessage());
+            System.err.println("Request ID:" + e.getRequestId());
+        } catch (ClientException e) {
+            System.err.println("请求失败，详情：" + e.getMessage());
+        }
+        client.shutdown();
+    }
+
+    private static void createTable(SyncClient client) {
+        TableMeta tableMeta = new TableMeta(TABLE_NAME);
+        tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema(PRIMARY_KEY_NAME_1, PrimaryKeyType.STRING));
+
+        int timeToLive = -1; // 数据的过期时间, 单位秒, -1代表永不过期. 假如设置过期时间为一年, 即为 365 * 24 * 3600.
+        int maxVersions = 1; // 保存的最大版本数, 设置为1即代表每列上最多保存一个版本(保存最新的版本).
+
+        TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
+        CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
+        client.createTable(request);
+    }
+
+    private static void createSearchIndex(SyncClient client) {
+        CreateSearchIndexRequest request = new CreateSearchIndexRequest();
+        request.setTableName(TABLE_NAME);
+        request.setIndexName(INDEX_NAME);
+        IndexSchema indexSchema = new IndexSchema();
+        indexSchema.setFieldSchemas(Arrays.asList(
+                new FieldSchema("Col_Keyword", FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true),
+                new FieldSchema("Col_Vector", FieldType.VECTOR).setIndex(true).setVectorOptions(new VectorOptions(VectorDataType.FLOAT_32, 4, VectorMetricType.COSINE, new HNSWIndexParameter(16, 100)))
+        ));
+        request.setIndexSchema(indexSchema);
+        client.createSearchIndex(request);
+    }
+
+    private static void putRow(SyncClient client) {
+        String[] keywords = {"hangzhou", "beijing", "shanghai", "hangzhou shanghai", "hangzhou beijing shanghai"};
+        for (int i = 0; i < 5; i++) {
+            // 构造主键
+            PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
+            primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.fromString("pk1" + i));
+            PrimaryKey primaryKey = primaryKeyBuilder.build();
+
+            RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);
+
+            //加入一些属性列
+            rowPutChange.addColumn("Col_Keyword", ColumnValue.fromString(keywords[i]));
+            // 写入向量字段
+            rowPutChange.addColumn("Col_Vector", ColumnValue.fromString("[0.1, 1,2, 0.6, " + i + "]"));
+            client.putRow(new PutRowRequest(rowPutChange));
+        }
+    }
+
+    private static void waitUntilAllDataSync(SyncClient client, String indexName, long expectTotalHit) {
+        long begin = System.currentTimeMillis();
+        while (true) {
+            SearchQuery searchQuery = new SearchQuery();
+            searchQuery.setQuery(new MatchAllQuery());
+            searchQuery.setGetTotalCount(true);
+            SearchRequest searchRequest = new SearchRequest(TABLE_NAME, indexName, searchQuery);
+            SearchResponse resp = client.search(searchRequest);
+            if (resp.getTotalCount() == expectTotalHit) {
+                break;
+            }
+            if (System.currentTimeMillis() - begin > 150 * 1000) {
+                throw new RuntimeException("Wait timeout.");
+            }
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    private static void knnVectorQuery(SyncClient client) {
+        SearchQuery searchQuery = new SearchQuery();
+        KnnVectorQuery query = new KnnVectorQuery();
+        query.setFieldName("Col_Vector");
+        query.setTopK(10);
+        query.setFloat32QueryVector(new float[]{0.1f, 0.2f, 0.3f, 0.4f});
+
+        // 最相近的向量需要满足: Col_Keyword=hangzhou
+        query.setFilter(QueryBuilders.term("Col_Keyword", "hangzhou"));
+
+        searchQuery.setQuery(query);
+        // 按照分数排序
+        searchQuery.setSort(new Sort(Collections.singletonList(new ScoreSort())));
+        SearchRequest searchRequest = new SearchRequest(TABLE_NAME, INDEX_NAME, searchQuery);
+
+        SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
+        columnsToGet.setReturnAll(true);
+        searchRequest.setColumnsToGet(columnsToGet);
+
+        SearchResponse resp = client.search(searchRequest);
+        System.out.println("TotalCount: " + resp.getTotalCount()); // 匹配到的总行数，非返回行数
+        System.out.println("Row: " + resp.getRows());
+    }
+}
