in java/core/src/main/java/com/aliyun/openservices/tablestore/agent/knowledge/KnowledgeStoreImpl.java [316:365]
public Response<DocumentHit> searchDocuments(KnowledgeSearchRequest searchRequest) {
if (log.isDebugEnabled()) {
log.debug("before search documents:{}", searchRequest);
}
ValidationUtils.ensureNotNull(searchRequest, "KnowledgeSearchRequest");
Filter filter = wrapTenantIds(searchRequest.getTenantIds(), searchRequest.getMetadataFilter());
Query query = TablestoreHelper.parserSearchFilters(filter);
Sort otsSort = TablestoreHelper.toOtsSort(searchRequest.getSorts());
byte[] nextToken = null;
if (searchRequest.getNextToken() != null) {
nextToken = Base64.getDecoder().decode(searchRequest.getNextToken());
}
SearchQuery searchQuery = SearchQuery.newBuilder()
.query(query)
.getTotalCount(false)
.limit(searchRequest.getLimit())
.offset(0)
.sort(otsSort)
.token(nextToken)
.build();
SearchRequest otsSearchRequest = new SearchRequest(tableName, searchIndexName, searchQuery);
List<PrimaryKey> routingValues = getRoutingValues(searchRequest);
if (!routingValues.isEmpty()) {
otsSearchRequest.setRoutingValues(routingValues);
}
otsSearchRequest.setColumnsToGet(toColumnsToGet(searchRequest.getColumnsToGet()));
try {
SearchResponse searchResponse = client.search(otsSearchRequest);
log.info("search documents:{}, request_id:{}", searchRequest, searchResponse.getRequestId());
Triple<List<Document>, String, List<Double>> triple = TablestoreHelper.parserSearchResponse(
searchResponse,
r -> TablestoreHelper.rowToDocument(r, textField, embeddingField)
);
List<Document> documents = triple.getLeft();
String nextTokenStr = triple.getMiddle();
List<Double> scores = triple.getRight();
List<DocumentHit> documentHits = new ArrayList<>(documents.size());
for (int i = 0; i < documents.size(); i++) {
documentHits.add(new DocumentHit(documents.get(i), scores.get(i)));
}
return new Response<>(documentHits, nextTokenStr);
} catch (TableStoreException e) {
throw Exceptions.runtimeThrowable(String.format("search documents failed, request_id:%s, query:[%s]", e.getRequestId(), searchRequest), e);
} catch (Exception e) {
throw Exceptions.runtimeThrowable(String.format("search documents failed, query:[%s]", searchRequest), e);
}
}