public Response searchDocuments()

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);
        }
    }