Browse Source

Merge branch 'feature/20240403/sunxy/addIndexPushFrom' of algorithm/recommend-server into master

sunxiaoyi 1 năm trước cách đây
mục cha
commit
2a1cddfa39

+ 1 - 1
recommend-server-client/pom.xml

@@ -10,7 +10,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>recommend-server-client</artifactId>
-    <version>1.1.1</version>
+    <version>1.1.3</version>
 
     <dependencies>
         <dependency>

+ 752 - 0
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/PushFromIndex.java

@@ -0,0 +1,752 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/server/recommend.proto
+
+package com.tzld.piaoquan.recommend.server.gen.recommend;
+
+/**
+ * Protobuf type {@code PushFromIndex}
+ */
+public final class PushFromIndex extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:PushFromIndex)
+    PushFromIndexOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use PushFromIndex.newBuilder() to construct.
+  private PushFromIndex(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private PushFromIndex() {
+    pushFrom_ = "";
+    index_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new PushFromIndex();
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet
+  getUnknownFields() {
+    return this.unknownFields;
+  }
+  private PushFromIndex(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          case 10: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            pushFrom_ = s;
+            break;
+          }
+          case 18: {
+            java.lang.String s = input.readStringRequireUtf8();
+            if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+              index_ = new com.google.protobuf.LazyStringArrayList();
+              mutable_bitField0_ |= 0x00000001;
+            }
+            index_.add(s);
+            break;
+          }
+          default: {
+            if (!parseUnknownField(
+                input, unknownFields, extensionRegistry, tag)) {
+              done = true;
+            }
+            break;
+          }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
+    } finally {
+      if (((mutable_bitField0_ & 0x00000001) != 0)) {
+        index_ = index_.getUnmodifiableView();
+      }
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_PushFromIndex_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_PushFromIndex_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.class, com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.Builder.class);
+  }
+
+  public static final int PUSH_FROM_FIELD_NUMBER = 1;
+  private volatile java.lang.Object pushFrom_;
+  /**
+   * <code>string push_from = 1;</code>
+   * @return The pushFrom.
+   */
+  @java.lang.Override
+  public java.lang.String getPushFrom() {
+    java.lang.Object ref = pushFrom_;
+    if (ref instanceof java.lang.String) {
+      return (java.lang.String) ref;
+    } else {
+      com.google.protobuf.ByteString bs = 
+          (com.google.protobuf.ByteString) ref;
+      java.lang.String s = bs.toStringUtf8();
+      pushFrom_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string push_from = 1;</code>
+   * @return The bytes for pushFrom.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getPushFromBytes() {
+    java.lang.Object ref = pushFrom_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      pushFrom_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int INDEX_FIELD_NUMBER = 2;
+  private com.google.protobuf.LazyStringList index_;
+  /**
+   * <code>repeated string index = 2;</code>
+   * @return A list containing the index.
+   */
+  public com.google.protobuf.ProtocolStringList
+      getIndexList() {
+    return index_;
+  }
+  /**
+   * <code>repeated string index = 2;</code>
+   * @return The count of index.
+   */
+  public int getIndexCount() {
+    return index_.size();
+  }
+  /**
+   * <code>repeated string index = 2;</code>
+   * @param index The index of the element to return.
+   * @return The index at the given index.
+   */
+  public java.lang.String getIndex(int index) {
+    return index_.get(index);
+  }
+  /**
+   * <code>repeated string index = 2;</code>
+   * @param index The index of the value to return.
+   * @return The bytes of the index at the given index.
+   */
+  public com.google.protobuf.ByteString
+      getIndexBytes(int index) {
+    return index_.getByteString(index);
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    if (!getPushFromBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, pushFrom_);
+    }
+    for (int i = 0; i < index_.size(); i++) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, index_.getRaw(i));
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!getPushFromBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, pushFrom_);
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < index_.size(); i++) {
+        dataSize += computeStringSizeNoTag(index_.getRaw(i));
+      }
+      size += dataSize;
+      size += 1 * getIndexList().size();
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex)) {
+      return super.equals(obj);
+    }
+    com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex other = (com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex) obj;
+
+    if (!getPushFrom()
+        .equals(other.getPushFrom())) return false;
+    if (!getIndexList()
+        .equals(other.getIndexList())) return false;
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (37 * hash) + PUSH_FROM_FIELD_NUMBER;
+    hash = (53 * hash) + getPushFrom().hashCode();
+    if (getIndexCount() > 0) {
+      hash = (37 * hash) + INDEX_FIELD_NUMBER;
+      hash = (53 * hash) + getIndexList().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * Protobuf type {@code PushFromIndex}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:PushFromIndex)
+      com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndexOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_PushFromIndex_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_PushFromIndex_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.class, com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.Builder.class);
+    }
+
+    // Construct using com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3
+              .alwaysUseFieldBuilders) {
+      }
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      pushFrom_ = "";
+
+      index_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000001);
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_PushFromIndex_descriptor;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex build() {
+      com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex buildPartial() {
+      com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex result = new com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex(this);
+      int from_bitField0_ = bitField0_;
+      result.pushFrom_ = pushFrom_;
+      if (((bitField0_ & 0x00000001) != 0)) {
+        index_ = index_.getUnmodifiableView();
+        bitField0_ = (bitField0_ & ~0x00000001);
+      }
+      result.index_ = index_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex) {
+        return mergeFrom((com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex other) {
+      if (other == com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.getDefaultInstance()) return this;
+      if (!other.getPushFrom().isEmpty()) {
+        pushFrom_ = other.pushFrom_;
+        onChanged();
+      }
+      if (!other.index_.isEmpty()) {
+        if (index_.isEmpty()) {
+          index_ = other.index_;
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          ensureIndexIsMutable();
+          index_.addAll(other.index_);
+        }
+        onChanged();
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+    private int bitField0_;
+
+    private java.lang.Object pushFrom_ = "";
+    /**
+     * <code>string push_from = 1;</code>
+     * @return The pushFrom.
+     */
+    public java.lang.String getPushFrom() {
+      java.lang.Object ref = pushFrom_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        pushFrom_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string push_from = 1;</code>
+     * @return The bytes for pushFrom.
+     */
+    public com.google.protobuf.ByteString
+        getPushFromBytes() {
+      java.lang.Object ref = pushFrom_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        pushFrom_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string push_from = 1;</code>
+     * @param value The pushFrom to set.
+     * @return This builder for chaining.
+     */
+    public Builder setPushFrom(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      pushFrom_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string push_from = 1;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearPushFrom() {
+      
+      pushFrom_ = getDefaultInstance().getPushFrom();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string push_from = 1;</code>
+     * @param value The bytes for pushFrom to set.
+     * @return This builder for chaining.
+     */
+    public Builder setPushFromBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      pushFrom_ = value;
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.LazyStringList index_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+    private void ensureIndexIsMutable() {
+      if (!((bitField0_ & 0x00000001) != 0)) {
+        index_ = new com.google.protobuf.LazyStringArrayList(index_);
+        bitField0_ |= 0x00000001;
+       }
+    }
+    /**
+     * <code>repeated string index = 2;</code>
+     * @return A list containing the index.
+     */
+    public com.google.protobuf.ProtocolStringList
+        getIndexList() {
+      return index_.getUnmodifiableView();
+    }
+    /**
+     * <code>repeated string index = 2;</code>
+     * @return The count of index.
+     */
+    public int getIndexCount() {
+      return index_.size();
+    }
+    /**
+     * <code>repeated string index = 2;</code>
+     * @param index The index of the element to return.
+     * @return The index at the given index.
+     */
+    public java.lang.String getIndex(int index) {
+      return index_.get(index);
+    }
+    /**
+     * <code>repeated string index = 2;</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the index at the given index.
+     */
+    public com.google.protobuf.ByteString
+        getIndexBytes(int index) {
+      return index_.getByteString(index);
+    }
+    /**
+     * <code>repeated string index = 2;</code>
+     * @param index The index to set the value at.
+     * @param value The index to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIndex(
+        int index, java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureIndexIsMutable();
+      index_.set(index, value);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>repeated string index = 2;</code>
+     * @param value The index to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIndex(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureIndexIsMutable();
+      index_.add(value);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>repeated string index = 2;</code>
+     * @param values The index to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllIndex(
+        java.lang.Iterable<java.lang.String> values) {
+      ensureIndexIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, index_);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>repeated string index = 2;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIndex() {
+      index_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000001);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>repeated string index = 2;</code>
+     * @param value The bytes of the index to add.
+     * @return This builder for chaining.
+     */
+    public Builder addIndexBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      ensureIndexIsMutable();
+      index_.add(value);
+      onChanged();
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:PushFromIndex)
+  }
+
+  // @@protoc_insertion_point(class_scope:PushFromIndex)
+  private static final com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex();
+  }
+
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<PushFromIndex>
+      PARSER = new com.google.protobuf.AbstractParser<PushFromIndex>() {
+    @java.lang.Override
+    public PushFromIndex parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return new PushFromIndex(input, extensionRegistry);
+    }
+  };
+
+  public static com.google.protobuf.Parser<PushFromIndex> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<PushFromIndex> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+

+ 46 - 0
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/PushFromIndexOrBuilder.java

@@ -0,0 +1,46 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/server/recommend.proto
+
+package com.tzld.piaoquan.recommend.server.gen.recommend;
+
+public interface PushFromIndexOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:PushFromIndex)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <code>string push_from = 1;</code>
+   * @return The pushFrom.
+   */
+  java.lang.String getPushFrom();
+  /**
+   * <code>string push_from = 1;</code>
+   * @return The bytes for pushFrom.
+   */
+  com.google.protobuf.ByteString
+      getPushFromBytes();
+
+  /**
+   * <code>repeated string index = 2;</code>
+   * @return A list containing the index.
+   */
+  java.util.List<java.lang.String>
+      getIndexList();
+  /**
+   * <code>repeated string index = 2;</code>
+   * @return The count of index.
+   */
+  int getIndexCount();
+  /**
+   * <code>repeated string index = 2;</code>
+   * @param index The index of the element to return.
+   * @return The index at the given index.
+   */
+  java.lang.String getIndex(int index);
+  /**
+   * <code>repeated string index = 2;</code>
+   * @param index The index of the value to return.
+   * @return The bytes of the index at the given index.
+   */
+  com.google.protobuf.ByteString
+      getIndexBytes(int index);
+}

+ 21 - 8
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/Recommend.java

@@ -39,6 +39,11 @@ public final class Recommend {
   static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_VideoProto_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_PushFromIndex_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_PushFromIndex_fieldAccessorTable;
 
   public static com.google.protobuf.Descriptors.FileDescriptor
       getDescriptor() {
@@ -69,17 +74,19 @@ public final class Recommend {
       "\022\020\n\010platform\030\003 \001(\t\022\023\n\013sdk_version\030\004 \001(\t\022" +
       "\016\n\006system\030\005 \001(\t\022\026\n\016wechat_version\030\006 \001(\t\"" +
       "H\n\021RecommendResponse\022\027\n\006result\030\001 \001(\0132\007.R" +
-      "esult\022\032\n\005video\030\002 \003(\0132\013.VideoProto\"\265\001\n\nVi" +
+      "esult\022\032\n\005video\030\002 \003(\0132\013.VideoProto\"\336\001\n\nVi" +
       "deoProto\022\020\n\010video_id\030\001 \001(\003\022\021\n\trov_score\030" +
       "\002 \001(\001\022\021\n\tpush_from\030\003 \001(\t\022\017\n\007ab_code\030\004 \001(" +
       "\t\022\022\n\nsort_score\030\005 \001(\001\022\020\n\010position\030\006 \001(\005\022" +
       "\021\n\tflow_pool\030\007 \001(\t\022\027\n\017is_in_flow_pool\030\010 " +
-      "\001(\005\022\014\n\004rand\030\t \001(\0012\212\001\n\020RecommendService\022:" +
-      "\n\021HomepageRecommend\022\021.RecommendRequest\032\022" +
-      ".RecommendResponse\022:\n\021RelevantRecommend\022" +
-      "\021.RecommendRequest\032\022.RecommendResponseB7" +
-      "\n0com.tzld.piaoquan.recommend.server.gen" +
-      ".recommendP\001\210\001\001b\006proto3"
+      "\001(\005\022\014\n\004rand\030\t \001(\001\022\'\n\017push_from_index\030\n \003" +
+      "(\0132\016.PushFromIndex\"1\n\rPushFromIndex\022\021\n\tp" +
+      "ush_from\030\001 \001(\t\022\r\n\005index\030\002 \003(\t2\212\001\n\020Recomm" +
+      "endService\022:\n\021HomepageRecommend\022\021.Recomm" +
+      "endRequest\032\022.RecommendResponse\022:\n\021Releva" +
+      "ntRecommend\022\021.RecommendRequest\032\022.Recomme" +
+      "ndResponseB7\n0com.tzld.piaoquan.recommen" +
+      "d.server.gen.recommendP\001\210\001\001b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -116,7 +123,13 @@ public final class Recommend {
     internal_static_VideoProto_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_VideoProto_descriptor,
-        new java.lang.String[] { "VideoId", "RovScore", "PushFrom", "AbCode", "SortScore", "Position", "FlowPool", "IsInFlowPool", "Rand", });
+        new java.lang.String[] { "VideoId", "RovScore", "PushFrom", "AbCode", "SortScore", "Position", "FlowPool", "IsInFlowPool", "Rand", "PushFromIndex", });
+    internal_static_PushFromIndex_descriptor =
+      getDescriptor().getMessageTypes().get(4);
+    internal_static_PushFromIndex_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_PushFromIndex_descriptor,
+        new java.lang.String[] { "PushFrom", "Index", });
     com.google.protobuf.AnyProto.getDescriptor();
     com.tzld.piaoquan.recommend.server.gen.common.Common.getDescriptor();
   }

+ 351 - 0
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/VideoProto.java

@@ -23,6 +23,7 @@ private static final long serialVersionUID = 0L;
     pushFrom_ = "";
     abCode_ = "";
     flowPool_ = "";
+    pushFromIndex_ = java.util.Collections.emptyList();
   }
 
   @java.lang.Override
@@ -45,6 +46,7 @@ private static final long serialVersionUID = 0L;
     if (extensionRegistry == null) {
       throw new java.lang.NullPointerException();
     }
+    int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
     try {
@@ -103,6 +105,15 @@ private static final long serialVersionUID = 0L;
             rand_ = input.readDouble();
             break;
           }
+          case 82: {
+            if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+              pushFromIndex_ = new java.util.ArrayList<com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex>();
+              mutable_bitField0_ |= 0x00000001;
+            }
+            pushFromIndex_.add(
+                input.readMessage(com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.parser(), extensionRegistry));
+            break;
+          }
           default: {
             if (!parseUnknownField(
                 input, unknownFields, extensionRegistry, tag)) {
@@ -118,6 +129,9 @@ private static final long serialVersionUID = 0L;
       throw new com.google.protobuf.InvalidProtocolBufferException(
           e).setUnfinishedMessage(this);
     } finally {
+      if (((mutable_bitField0_ & 0x00000001) != 0)) {
+        pushFromIndex_ = java.util.Collections.unmodifiableList(pushFromIndex_);
+      }
       this.unknownFields = unknownFields.build();
       makeExtensionsImmutable();
     }
@@ -315,6 +329,46 @@ private static final long serialVersionUID = 0L;
     return rand_;
   }
 
+  public static final int PUSH_FROM_INDEX_FIELD_NUMBER = 10;
+  private java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex> pushFromIndex_;
+  /**
+   * <code>repeated .PushFromIndex push_from_index = 10;</code>
+   */
+  @java.lang.Override
+  public java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex> getPushFromIndexList() {
+    return pushFromIndex_;
+  }
+  /**
+   * <code>repeated .PushFromIndex push_from_index = 10;</code>
+   */
+  @java.lang.Override
+  public java.util.List<? extends com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndexOrBuilder> 
+      getPushFromIndexOrBuilderList() {
+    return pushFromIndex_;
+  }
+  /**
+   * <code>repeated .PushFromIndex push_from_index = 10;</code>
+   */
+  @java.lang.Override
+  public int getPushFromIndexCount() {
+    return pushFromIndex_.size();
+  }
+  /**
+   * <code>repeated .PushFromIndex push_from_index = 10;</code>
+   */
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex getPushFromIndex(int index) {
+    return pushFromIndex_.get(index);
+  }
+  /**
+   * <code>repeated .PushFromIndex push_from_index = 10;</code>
+   */
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndexOrBuilder getPushFromIndexOrBuilder(
+      int index) {
+    return pushFromIndex_.get(index);
+  }
+
   private byte memoizedIsInitialized = -1;
   @java.lang.Override
   public final boolean isInitialized() {
@@ -356,6 +410,9 @@ private static final long serialVersionUID = 0L;
     if (rand_ != 0D) {
       output.writeDouble(9, rand_);
     }
+    for (int i = 0; i < pushFromIndex_.size(); i++) {
+      output.writeMessage(10, pushFromIndex_.get(i));
+    }
     unknownFields.writeTo(output);
   }
 
@@ -398,6 +455,10 @@ private static final long serialVersionUID = 0L;
       size += com.google.protobuf.CodedOutputStream
         .computeDoubleSize(9, rand_);
     }
+    for (int i = 0; i < pushFromIndex_.size(); i++) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(10, pushFromIndex_.get(i));
+    }
     size += unknownFields.getSerializedSize();
     memoizedSize = size;
     return size;
@@ -434,6 +495,8 @@ private static final long serialVersionUID = 0L;
     if (java.lang.Double.doubleToLongBits(getRand())
         != java.lang.Double.doubleToLongBits(
             other.getRand())) return false;
+    if (!getPushFromIndexList()
+        .equals(other.getPushFromIndexList())) return false;
     if (!unknownFields.equals(other.unknownFields)) return false;
     return true;
   }
@@ -467,6 +530,10 @@ private static final long serialVersionUID = 0L;
     hash = (37 * hash) + RAND_FIELD_NUMBER;
     hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
         java.lang.Double.doubleToLongBits(getRand()));
+    if (getPushFromIndexCount() > 0) {
+      hash = (37 * hash) + PUSH_FROM_INDEX_FIELD_NUMBER;
+      hash = (53 * hash) + getPushFromIndexList().hashCode();
+    }
     hash = (29 * hash) + unknownFields.hashCode();
     memoizedHashCode = hash;
     return hash;
@@ -599,6 +666,7 @@ private static final long serialVersionUID = 0L;
     private void maybeForceBuilderInitialization() {
       if (com.google.protobuf.GeneratedMessageV3
               .alwaysUseFieldBuilders) {
+        getPushFromIndexFieldBuilder();
       }
     }
     @java.lang.Override
@@ -622,6 +690,12 @@ private static final long serialVersionUID = 0L;
 
       rand_ = 0D;
 
+      if (pushFromIndexBuilder_ == null) {
+        pushFromIndex_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+      } else {
+        pushFromIndexBuilder_.clear();
+      }
       return this;
     }
 
@@ -648,6 +722,7 @@ private static final long serialVersionUID = 0L;
     @java.lang.Override
     public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto buildPartial() {
       com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto result = new com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto(this);
+      int from_bitField0_ = bitField0_;
       result.videoId_ = videoId_;
       result.rovScore_ = rovScore_;
       result.pushFrom_ = pushFrom_;
@@ -657,6 +732,15 @@ private static final long serialVersionUID = 0L;
       result.flowPool_ = flowPool_;
       result.isInFlowPool_ = isInFlowPool_;
       result.rand_ = rand_;
+      if (pushFromIndexBuilder_ == null) {
+        if (((bitField0_ & 0x00000001) != 0)) {
+          pushFromIndex_ = java.util.Collections.unmodifiableList(pushFromIndex_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.pushFromIndex_ = pushFromIndex_;
+      } else {
+        result.pushFromIndex_ = pushFromIndexBuilder_.build();
+      }
       onBuilt();
       return result;
     }
@@ -735,6 +819,32 @@ private static final long serialVersionUID = 0L;
       if (other.getRand() != 0D) {
         setRand(other.getRand());
       }
+      if (pushFromIndexBuilder_ == null) {
+        if (!other.pushFromIndex_.isEmpty()) {
+          if (pushFromIndex_.isEmpty()) {
+            pushFromIndex_ = other.pushFromIndex_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensurePushFromIndexIsMutable();
+            pushFromIndex_.addAll(other.pushFromIndex_);
+          }
+          onChanged();
+        }
+      } else {
+        if (!other.pushFromIndex_.isEmpty()) {
+          if (pushFromIndexBuilder_.isEmpty()) {
+            pushFromIndexBuilder_.dispose();
+            pushFromIndexBuilder_ = null;
+            pushFromIndex_ = other.pushFromIndex_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+            pushFromIndexBuilder_ = 
+              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                 getPushFromIndexFieldBuilder() : null;
+          } else {
+            pushFromIndexBuilder_.addAllMessages(other.pushFromIndex_);
+          }
+        }
+      }
       this.mergeUnknownFields(other.unknownFields);
       onChanged();
       return this;
@@ -763,6 +873,7 @@ private static final long serialVersionUID = 0L;
       }
       return this;
     }
+    private int bitField0_;
 
     private long videoId_ ;
     /**
@@ -1177,6 +1288,246 @@ private static final long serialVersionUID = 0L;
       onChanged();
       return this;
     }
+
+    private java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex> pushFromIndex_ =
+      java.util.Collections.emptyList();
+    private void ensurePushFromIndexIsMutable() {
+      if (!((bitField0_ & 0x00000001) != 0)) {
+        pushFromIndex_ = new java.util.ArrayList<com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex>(pushFromIndex_);
+        bitField0_ |= 0x00000001;
+       }
+    }
+
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+        com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex, com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.Builder, com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndexOrBuilder> pushFromIndexBuilder_;
+
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex> getPushFromIndexList() {
+      if (pushFromIndexBuilder_ == null) {
+        return java.util.Collections.unmodifiableList(pushFromIndex_);
+      } else {
+        return pushFromIndexBuilder_.getMessageList();
+      }
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public int getPushFromIndexCount() {
+      if (pushFromIndexBuilder_ == null) {
+        return pushFromIndex_.size();
+      } else {
+        return pushFromIndexBuilder_.getCount();
+      }
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex getPushFromIndex(int index) {
+      if (pushFromIndexBuilder_ == null) {
+        return pushFromIndex_.get(index);
+      } else {
+        return pushFromIndexBuilder_.getMessage(index);
+      }
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public Builder setPushFromIndex(
+        int index, com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex value) {
+      if (pushFromIndexBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensurePushFromIndexIsMutable();
+        pushFromIndex_.set(index, value);
+        onChanged();
+      } else {
+        pushFromIndexBuilder_.setMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public Builder setPushFromIndex(
+        int index, com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.Builder builderForValue) {
+      if (pushFromIndexBuilder_ == null) {
+        ensurePushFromIndexIsMutable();
+        pushFromIndex_.set(index, builderForValue.build());
+        onChanged();
+      } else {
+        pushFromIndexBuilder_.setMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public Builder addPushFromIndex(com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex value) {
+      if (pushFromIndexBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensurePushFromIndexIsMutable();
+        pushFromIndex_.add(value);
+        onChanged();
+      } else {
+        pushFromIndexBuilder_.addMessage(value);
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public Builder addPushFromIndex(
+        int index, com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex value) {
+      if (pushFromIndexBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensurePushFromIndexIsMutable();
+        pushFromIndex_.add(index, value);
+        onChanged();
+      } else {
+        pushFromIndexBuilder_.addMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public Builder addPushFromIndex(
+        com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.Builder builderForValue) {
+      if (pushFromIndexBuilder_ == null) {
+        ensurePushFromIndexIsMutable();
+        pushFromIndex_.add(builderForValue.build());
+        onChanged();
+      } else {
+        pushFromIndexBuilder_.addMessage(builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public Builder addPushFromIndex(
+        int index, com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.Builder builderForValue) {
+      if (pushFromIndexBuilder_ == null) {
+        ensurePushFromIndexIsMutable();
+        pushFromIndex_.add(index, builderForValue.build());
+        onChanged();
+      } else {
+        pushFromIndexBuilder_.addMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public Builder addAllPushFromIndex(
+        java.lang.Iterable<? extends com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex> values) {
+      if (pushFromIndexBuilder_ == null) {
+        ensurePushFromIndexIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(
+            values, pushFromIndex_);
+        onChanged();
+      } else {
+        pushFromIndexBuilder_.addAllMessages(values);
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public Builder clearPushFromIndex() {
+      if (pushFromIndexBuilder_ == null) {
+        pushFromIndex_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+      } else {
+        pushFromIndexBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public Builder removePushFromIndex(int index) {
+      if (pushFromIndexBuilder_ == null) {
+        ensurePushFromIndexIsMutable();
+        pushFromIndex_.remove(index);
+        onChanged();
+      } else {
+        pushFromIndexBuilder_.remove(index);
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.Builder getPushFromIndexBuilder(
+        int index) {
+      return getPushFromIndexFieldBuilder().getBuilder(index);
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndexOrBuilder getPushFromIndexOrBuilder(
+        int index) {
+      if (pushFromIndexBuilder_ == null) {
+        return pushFromIndex_.get(index);  } else {
+        return pushFromIndexBuilder_.getMessageOrBuilder(index);
+      }
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public java.util.List<? extends com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndexOrBuilder> 
+         getPushFromIndexOrBuilderList() {
+      if (pushFromIndexBuilder_ != null) {
+        return pushFromIndexBuilder_.getMessageOrBuilderList();
+      } else {
+        return java.util.Collections.unmodifiableList(pushFromIndex_);
+      }
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.Builder addPushFromIndexBuilder() {
+      return getPushFromIndexFieldBuilder().addBuilder(
+          com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.getDefaultInstance());
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.Builder addPushFromIndexBuilder(
+        int index) {
+      return getPushFromIndexFieldBuilder().addBuilder(
+          index, com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.getDefaultInstance());
+    }
+    /**
+     * <code>repeated .PushFromIndex push_from_index = 10;</code>
+     */
+    public java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.Builder> 
+         getPushFromIndexBuilderList() {
+      return getPushFromIndexFieldBuilder().getBuilderList();
+    }
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+        com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex, com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.Builder, com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndexOrBuilder> 
+        getPushFromIndexFieldBuilder() {
+      if (pushFromIndexBuilder_ == null) {
+        pushFromIndexBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+            com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex, com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex.Builder, com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndexOrBuilder>(
+                pushFromIndex_,
+                ((bitField0_ & 0x00000001) != 0),
+                getParentForChildren(),
+                isClean());
+        pushFromIndex_ = null;
+      }
+      return pushFromIndexBuilder_;
+    }
     @java.lang.Override
     public final Builder setUnknownFields(
         final com.google.protobuf.UnknownFieldSet unknownFields) {

+ 24 - 0
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/VideoProtoOrBuilder.java

@@ -78,4 +78,28 @@ public interface VideoProtoOrBuilder extends
    * @return The rand.
    */
   double getRand();
+
+  /**
+   * <code>repeated .PushFromIndex push_from_index = 10;</code>
+   */
+  java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex> 
+      getPushFromIndexList();
+  /**
+   * <code>repeated .PushFromIndex push_from_index = 10;</code>
+   */
+  com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex getPushFromIndex(int index);
+  /**
+   * <code>repeated .PushFromIndex push_from_index = 10;</code>
+   */
+  int getPushFromIndexCount();
+  /**
+   * <code>repeated .PushFromIndex push_from_index = 10;</code>
+   */
+  java.util.List<? extends com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndexOrBuilder> 
+      getPushFromIndexOrBuilderList();
+  /**
+   * <code>repeated .PushFromIndex push_from_index = 10;</code>
+   */
+  com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndexOrBuilder getPushFromIndexOrBuilder(
+      int index);
 }

+ 6 - 0
recommend-server-client/src/main/proto/com/tzld/piaoquan/recommend/server/recommend.proto

@@ -63,6 +63,12 @@ message VideoProto{
   string flow_pool = 7;
   int32 is_in_flow_pool = 8;
   double rand = 9;
+  repeated PushFromIndex push_from_index = 10;
+}
+
+message PushFromIndex {
+  string push_from = 1;
+  repeated string index = 2;
 }
 
 service RecommendService {

+ 1 - 1
recommend-server-service/pom.xml

@@ -153,7 +153,7 @@
         <dependency>
             <groupId>com.tzld.piaoquan</groupId>
             <artifactId>recommend-server-client</artifactId>
-            <version>1.1.1</version>
+            <version>1.1.3</version>
         </dependency>
         <dependency>
             <groupId>com.tzld.piaoquan</groupId>

+ 6 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/implement/TopRecommendPipeline.java

@@ -6,6 +6,7 @@ import com.google.common.base.Stopwatch;
 import com.google.common.reflect.TypeToken;
 import com.tzld.piaoquan.recommend.server.common.base.RankItem;
 import com.tzld.piaoquan.recommend.server.framework.candidiate.Candidate;
+import com.tzld.piaoquan.recommend.server.framework.candidiate.CandidateInfo;
 import com.tzld.piaoquan.recommend.server.framework.common.User;
 import com.tzld.piaoquan.recommend.server.framework.merger.MergeUtils;
 import com.tzld.piaoquan.recommend.server.framework.merger.StrategyQueue;
@@ -319,6 +320,11 @@ public class TopRecommendPipeline {
             video.setSortScore(score);
             video.setScoreStr(item.getScoreStr());
             video.setScoresMap(item.getScoresMap());
+
+            Map<String, List<String>> pushFromIndex = new HashMap<>();
+            pushFromIndex.put(item.getQueue(), item.getCandidateInfoList().stream()
+                    .map(CandidateInfo::getCandidateQueueName).collect(Collectors.toList()));
+            video.setPushFromIndex(pushFromIndex);
             result.add(video);
         }
         Collections.sort(result, Comparator.comparingDouble(o -> -o.getSortScore()));

+ 1 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/model/Video.java

@@ -37,5 +37,6 @@ public class Video {
     public double score = 0.0D;
     public double scoreRegion = 0.0D;
     public Map<String, Double> scoresMap = new HashMap<>();
+    public Map<String, List<String>> pushFromIndex = new HashMap<>();
 
 }

+ 12 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/VideoRecommendService.java

@@ -6,6 +6,7 @@ import com.google.common.base.Strings;
 import com.tzld.piaoquan.recommend.server.common.ThreadPoolFactory;
 import com.tzld.piaoquan.recommend.server.framework.common.User;
 import com.tzld.piaoquan.recommend.server.gen.common.Result;
+import com.tzld.piaoquan.recommend.server.gen.recommend.PushFromIndex;
 import com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest;
 import com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse;
 import com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto;
@@ -18,6 +19,7 @@ import com.tzld.piaoquan.recommend.server.service.rank.RankResult;
 import com.tzld.piaoquan.recommend.server.service.rank.strategy.RankStrategy4RegionMergeModelV547;
 import com.tzld.piaoquan.recommend.server.util.JSONUtils;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -97,6 +99,15 @@ public class VideoRecommendService {
         // 更新position
         List<VideoProto> vps = new ArrayList<>();
         for (int i = 0; i < videos.size(); i++) {
+            Map<String, List<String>> pushFromIndex = videos.get(i).getPushFromIndex();
+            List<PushFromIndex> pushFromIndexList = new ArrayList<>();
+            if (MapUtils.isNotEmpty(pushFromIndex)) {
+                pushFromIndex.forEach((k, v) -> {
+                    PushFromIndex.Builder builder = PushFromIndex.newBuilder().setPushFrom(k);
+                    v.forEach(builder::addIndex);
+                    pushFromIndexList.add(builder.build());
+                });
+            }
             vps.add(VideoProto.newBuilder()
                     .setPosition(i + 1)
                     .setPushFrom(Strings.nullToEmpty(videos.get(i).getPushFrom()))
@@ -107,6 +118,7 @@ public class VideoRecommendService {
                     .setFlowPool(Strings.nullToEmpty(videos.get(i).getFlowPool()))
                     .setIsInFlowPool(videos.get(i).isInFlowPool() ? 1 : 0)
                     .setRand(videos.get(i).getRand())
+                    .addAllPushFromIndex(pushFromIndexList)
                     .build());
         }