Aws Kendra 和 Spring 启动

Aws Kendra and Spring boot

我想将 spring boot 与 aws kendra 查询集成 index.I 想利用 kendra 作为弹性搜索,我在其中进行 api 搜索查询,然后获得相同的结果通过 api.

文档没有明确提及连接 procedure/steps。不确定那是否可能。

P.s 作为网络爬虫创建了索引和数据源。现在下一步是什么。

您可以使用 AWS SDK for Java 对 AWS 服务进行 API 调用。您可以在上面的 link 中找到代码示例。

设置您的 Kendra 客户端将如下所示:

String accessKey = "YOUR_ACCESS_KEY";
String secretKey = "YOUR_SECRET_KEY";
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
AWSkendra kendraClient = AWSkendraClientBuilder
                .standard()
                .withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
                .build();

设置 Kendra 客户端后,您可以使用 query method 查询您的 Kendra 索引。

有一些示例说明如何从 Spring BOOT 应用程序调用 AWS 服务。以下是一些显示 AWS SDK for Java V2:

的使用
  1. Creating your first AWS Java web application
  2. Creating a dynamic web application that analyzes photos using the AWS SDK for Java.
  3. Creating the Amazon DynamoDB web application item tracker

Spring BOOT/AWS 服务示例 Github

虽然(还)没有 Spring Kendra 客户端的 BOOT 示例,但模式是相同的。您可以构建一个 MVC 应用程序并构建一个使用 https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/kendra/KendraClient.html.

的服务

我们可以按照官方AWS documentation查询一个索引。棘手的部分是在构建 KendraClient 对象时提供凭据。代码主要取自 link 中提到的添加创建 Kendra 客户端的代码。

示例代码如下所示 -

import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.AwsCredentials;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.kendra.KendraClient;
import software.amazon.awssdk.services.kendra.model.QueryRequest;
import software.amazon.awssdk.services.kendra.model.QueryResponse;
import software.amazon.awssdk.services.kendra.model.QueryResultItem;

public class SearchKendraIndex {

    public static void main(String[] args) {

        String accessKey = "your-access-key";
        String secretKey = "your-secret-key";

        AwsCredentials awsCredentials = AwsBasicCredentials.create(accessKey, secretKey);

        KendraClient kendra = KendraClient
                .builder()
                .region(Region.AP_SOUTHEAST_1) // Change it with your region
                .credentialsProvider(() -> awsCredentials)
                .build();

        String query = "your-search-term";
        String indexId = "your-index-id";

        QueryRequest queryRequest = QueryRequest
                .builder()
                .queryText(query)
                .indexId(indexId)
                .build();

        QueryResponse queryResponse = kendra.query(queryRequest);

        System.out.printf("\nSearch results for query: %s%n", query);
        for (QueryResultItem item : queryResponse.resultItems()) {
            System.out.println("----------------------");
            System.out.printf("Type: %s%n", item.type());
            switch (item.type()) {
                case QUESTION_ANSWER, ANSWER -> {
                    String answerText = item.documentExcerpt().text();
                    System.out.println(answerText);
                }
                case DOCUMENT -> {
                    String documentTitle = item.documentTitle().text();
                    System.out.printf("Title: %s%n", documentTitle);
                    String documentExcerpt = item.documentExcerpt().text();
                    System.out.printf("Excerpt: %s%n", documentExcerpt);
                }
                default -> System.out.printf("Unknown query result type: %s%n", item.type());
            }
            System.out.println("-----------------------\n");
        }
    }
}