import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.nio.conn.ssl.SSLIOSessionStrategy;
import org.apache.http.ssl.SSLContextBuilder;
import org.opensearch.action.search.SearchRequest;
import org.opensearch.action.search.SearchResponse;
import org.opensearch.client.*;
import org.opensearch.index.query.WrapperQueryBuilder;
import org.opensearch.script.ScriptType;
import org.opensearch.script.mustache.SearchTemplateRequest;
import org.opensearch.script.mustache.SearchTemplateResponse;
import org.opensearch.search.builder.SearchSourceBuilder;
import javax.net.ssl.SSLContext;
private static final ObjectMapper objectMapper = new ObjectMapper();
RestHighLevelClient initRestHighLevelClientWithCA(List<HttpHost> hosts, String user, String password) throws Exception {
if (hosts == null || hosts.isEmpty()) {
throw new IllegalArgumentException("invalid empty hosts");
final CredentialsProvider provider = new BasicCredentialsProvider();
provider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(user, password));
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (x509Certificates, s) -> true).build();
RestClientBuilder builder = RestClient.builder(hosts.toArray(new HttpHost[0]))
.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
.setDefaultCredentialsProvider(provider)
.setSSLStrategy(new SSLIOSessionStrategy(sslContext, NoopHostnameVerifier.INSTANCE))
.setRequestConfigCallback(requestBuilder -> requestBuilder
.setConnectionRequestTimeout(5000)
.setSocketTimeout(60000)
.setConnectTimeout(5000));
return new RestHighLevelClient(builder);
public static void main(String[] args) throws Exception {
System.out.println("Hello world!");
RestHighLevelClient client = new Main().initRestHighLevelClientWithCA(Arrays.asList(new HttpHost("xxx", 9200, "https")), "xxx", "xxx");
SearchRequest searchRequest1 = new SearchRequest();
SearchSourceBuilder searchSourceBuilder1 = new SearchSourceBuilder();
searchSourceBuilder1.query(new WrapperQueryBuilder(
" \"id\": \"0a655b1f2c18632a534796bbf46a4ff7\"\n" +
searchRequest1.indices("imagesearch").source(searchSourceBuilder1);
SearchResponse docRes = client.search(searchRequest1, RequestOptions.DEFAULT);
String docJson = Arrays.stream(docRes.getHits().getHits()).findFirst().get().getSourceAsString();
JsonNode docJsonRoot = objectMapper.readTree(docJson);
List<Double> vecList = new ArrayList<>();
for (JsonNode vecNode : docJsonRoot.get("vector")) {
vecList.add(vecNode.asDouble());
SearchRequest searchRequest = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(new WrapperQueryBuilder(String.format("{\n" +
" \"vector\": " + objectMapper.writeValueAsString(vecList) + ",\n" +
searchRequest.indices("imagesearch").source(searchSourceBuilder);
SearchResponse responseKnn = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(responseKnn);