Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Copyright (C) 2023 Tencent Cloud.
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the vectordb-sdk-java), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is furnished
* to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.tencent.tcvectordb.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.tencent.tcvectordb.model.param.collection.FieldType;
import com.tencent.tcvectordb.utils.JsonUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
/**
* VectorDB Document
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Document {
private String id;
private List vector;
private Double score;
private String doc;
private List docFields;
private Map docKeyValue;
public String getId() {
return id;
}
public Double getScore() {
return score;
}
public String getDoc() {
return doc;
}
public List getDocFields() {
return docFields;
}
public Map getDocKeyValue() {
return docKeyValue;
}
public List getVector() {
if (vector==null || vector.isEmpty()){
return Collections.EMPTY_LIST;
}
return Collections.unmodifiableList(vector);
}
public void setId(String id) {
this.id = id;
}
public void setVector(List vector) {
this.vector = vector;
}
public void setScore(Double score) {
this.score = score;
}
public void setDoc(String doc) {
this.doc = doc;
}
public void setDocFields(List docFields) {
this.docFields = docFields;
}
public Object getObject(String key) {
if (Objects.isNull(docFields) || docFields.isEmpty()) {
return null;
}
ensureDocKeyValue();
return docKeyValue.get(key);
}
private void ensureDocKeyValue() {
if (Objects.isNull(docKeyValue)) {
docKeyValue = new TreeMap<>();
for (DocField docField : docFields) {
docKeyValue.put(docField.getName(), docField.getValue());
}
}
}
@Override
public String toString() {
ObjectNode node = JsonNodeFactory.instance.objectNode();
if (StringUtils.isNotBlank(id)) {
node.put("id", id);
}
if (vector != null && !vector.isEmpty()) {
ArrayNode vectorNode = JsonNodeFactory.instance.arrayNode();
vector.forEach(vectorNode::add);
node.set("vector", vectorNode);
}
if (score != null) {
node.put("score", score);
}
if (StringUtils.isNotEmpty(doc)) {
node.put("doc", doc);
}
if (docFields != null && !docFields.isEmpty()) {
for (DocField field : docFields) {
switch (field.getFieldType()) {
case Uint64:
node.put(field.getName(), Long.valueOf(field.getStringValue()));
break;
case Array:
List strValues = (List) ((List) field.getValue());
ArrayNode strNode = JsonNodeFactory.instance.arrayNode();
strValues.forEach(strNode::add);
node.set(field.getName(), strNode);
break;
default:
node.put(field.getName(), field.getStringValue());
}
}
}
return node.toString();
}
private Document(Builder builder) {
this.id = builder.id;
this.vector = builder.vector;
this.doc = builder.doc;
this.score = builder.score;
this.docFields = builder.docFields;
}
public static Builder newBuilder() {
return new Builder();
}
public static class Builder {
private String id;
private List vector;
private Double score;
private String doc;
private List docFields;
public Builder() {
this.docFields = new ArrayList<>();
}
public Builder withId(String id) {
this.id = id;
return this;
}
public Builder withVector(List vector) {
this.vector = vector;
return this;
}
public Builder withDoc(String doc) {
this.doc = doc;
return this;
}
public Builder withScore(Double score) {
this.score = score;
return this;
}
/**
* This is a deprecated method.
*
* @param field
* @return
* @deprecated This method is deprecated and should not be used anymore. Please use the
* addDocField(DocField field) or addDocFields(List docFields) instead.
*/
@Deprecated
public Builder addFilterField(DocField field) {
this.docFields.add(field);
return this;
}
public Builder addDocField(DocField docField) {
this.docFields.add(docField);
return this;
}
public Builder addDocFields(List docFields) {
this.docFields.addAll(docFields);
return this;
}
public Document build() {
return new Document(this);
}
}
}