Hi @prashardan,
1. Create Amazon Kendra Index
Reference: https://docs.aws.amazon.com/kendra/latest/dg/getting-started.html
2. Add AWS SDK Dependency in core/pom.xml
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>kendra</artifactId>
<version>2.25.14</version>
</dependency>
Reference: https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/kendra/KendraClient.html
3. Create Sling Servlet to Query Kendra
Use KendraClient in a servlet to query based on user input.
Basic steps:
4. Test Endpoint
Access your servlet via:
http://localhost:4502/bin/kendra/search?q=your+query
5. Security Note
For local, use AWS credentials via ~/.aws/credentials.
Reference: https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html
More Useful References:
A Sample Servlet to Query Amazon Kendra that might helps you:
@SlingServletPaths("/bin/kendra/search")
public class KendraSearchServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String queryText = req.getParameter("q");
Region region = Region.US_EAST_1;
KendraClient kendraClient = KendraClient.builder()
.region(region)
.credentialsProvider(ProfileCredentialsProvider.create()) // Use env or IAM for production
.build();
QueryRequest queryRequest = QueryRequest.builder()
.indexId("your-kendra-index-id")
.queryText(queryText)
.build();
QueryResponse queryResponse = kendraClient.query(queryRequest);
List<QueryResultItem> items = queryResponse.resultItems();
JSONArray jsonArray = new JSONArray();
for (QueryResultItem item : items) {
JSONObject json = new JSONObject();
json.put("title", item.documentTitle().text());
json.put("excerpt", item.documentExcerpt().text());
json.put("uri", item.documentURI());
jsonArray.put(json);
}
resp.setContentType("application/json");
resp.getWriter().write(jsonArray.toString());
}
}