# k-NN Query from ES High Level Client

**URL:** <https://forum.opensearch.org/t/k-nn-query-from-es-high-level-client/3155>\
**Category:** k-NN\
**Created:** [June 23, 2020, 7:04pm UTC](https://forum.opensearch.org/t/k-nn-query-from-es-high-level-client/3155 "2020-06-23T19:04:46Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![dnock](https://avatars.discourse-cdn.com/v4/letter/d/919ad9/32.png) [@dnock](https://forum.opensearch.org/u/dnock)\
**Post date:** [June 23, 2020, 7:04pm UTC](https://forum.opensearch.org/t/k-nn-query-from-es-high-level-client/3155/1 "2020-06-23T19:04:46Z")

</div>

Hello! I was wondering if there were any examples of using the k-NN query interface with the elasticsearch high level rest client for java? This query type isn’t part of elasticsearch core therefore there isn’t a predefined builder packaged with the high level client.

Thanks,  
Dylan

---

<div class="post-metadata">

**Author:** ![jmazane](https://avatars.discourse-cdn.com/v4/letter/j/f4b2a3/32.png) [@jmazane](https://forum.opensearch.org/u/jmazane)\
**Post date:** [June 23, 2020, 9:21pm UTC](https://forum.opensearch.org/t/k-nn-query-from-es-high-level-client/3155/2 "2020-06-23T21:21:38Z")

</div>

Hi @dnock,

We use the high level client in our [Rest Test Cases](https://github.com/opendistro-for-elasticsearch/k-NN/blob/master/src/test/java/com/amazon/opendistroforelasticsearch/knn/KNNRestTestCase.java#L113). But, in those we use the KNNQueryBuilder. This is probably not accessible. So, something like this should work:

```auto
        Request request = new Request(
                "POST",
                "/<index_name>/_search"
        );

        request.addParameter("size", size);

        XContentBuilder builder = XContentFactory.jsonBuilder().startObject().startObject("query");
        builder.startObject("knn");
        builder.startObject("<field_name>");
        builder.field("vector", vectors);
        builder.field("k", k);
        builder.endObject().endObject().endObject().endObject();

        request.setJsonEntity(Strings.toString(builder));

```

---

<div class="post-metadata">

**Author:** ![dnock](https://avatars.discourse-cdn.com/v4/letter/d/919ad9/32.png) [@dnock](https://forum.opensearch.org/u/dnock)\
**Post date:** [June 23, 2020, 10:15pm UTC](https://forum.opensearch.org/t/k-nn-query-from-es-high-level-client/3155/3 "2020-06-23T22:15:03Z")

</div>

I’m similarly passing a serialized request to the low level client. A QueryBuilder integration with the high level client would be amazing! Thanks for the response!
