# Unknown key for a START\_OBJECT in \[knn\]

**URL:** <https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381>\
**Category:** Elasticsearch\
**Tags:** vector-search\
**Created:** [November 21, 2022, 1:31am UTC](https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381 "2022-11-21T01:31:01Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![Scott\_M](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/scott_m/32/99073_2.png) [@Scott\_M](https://discuss.elastic.co/u/Scott_M)\
**Post date:** [November 21, 2022, 1:31am UTC](https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381/1 "2022-11-21T01:31:01Z")

</div>

Has anybody actually used the knn sample in the documentation here:[k-nearest neighbor (kNN) search | Elasticsearch Guide [master] | Elastic](https://www.elastic.co/guide/en/elasticsearch/reference/master/knn-search.html) ?

Here is their sample:

```auto
POST image-index/_search
{
  "query": {
    "match": {
      "title": {
        "query": "mountain lake",
        "boost": 0.9
      }
    }
  },
  "knn": {
    "field": "image-vector",
    "query_vector": [54, 10, -2],
    "k": 5,
    "num_candidates": 50,
    "boost": 0.1
  },
  "size": 10
}

```

Here is my code based on that:

```auto
      hybrid_lex_sem = self.es.search(index=indexn, body= {
                                          "query": {
                                            "match": {
                                              "question": {
                                                "query": cleanq,
                                                "boost": 0.9
                                              },
                                            },
                                          },
                                          "knn": {
                                            "field": "question_vector",
                                            "query_vector": question_embedding,
                                            "k": 5,
                                            "num_candidates": 50,
                                            "boost": 0.1
                                          },
                                          "size": 10
                                        }
                                      )

```

Here is the parsing exception I get from the above (Python)

'parsing\_exception', 'reason': 'Unknown key for a START\_OBJECT in [knn].'

The fields in my query all work fine with a regular dense vector search(non knn).

Can somebody direct me where the syntax error is in my version of the documentation's own sample? Thank you very much.

---

<div class="post-metadata">

**Author:** ![RabBit\_BR](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rabbit_br/32/82261_2.png) [@RabBit\_BR](https://discuss.elastic.co/u/RabBit_BR)\
**Post date:** [November 21, 2022, 1:38am UTC](https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381/2 "2022-11-21T01:38:51Z")

</div>

Hi @Scott_M

What is your version ES?

---

<div class="post-metadata">

**Author:** ![Scott\_M](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/scott_m/32/99073_2.png) [@Scott\_M](https://discuss.elastic.co/u/Scott_M)\
**Post date:** [November 21, 2022, 1:39am UTC](https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381/3 "2022-11-21T01:39:15Z")

</div>

It is 8.5, I believe latest?

---

<div class="post-metadata">

**Author:** ![RabBit\_BR](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/rabbit_br/32/82261_2.png) [@RabBit\_BR](https://discuss.elastic.co/u/RabBit_BR)\
**Post date:** [November 21, 2022, 1:47am UTC](https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381/4 "2022-11-21T01:47:58Z")

</div>

I tested with successful in version 8.4. I imagined you using version minor.

---

<div class="post-metadata">

**Author:** ![Scott\_M](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/scott_m/32/99073_2.png) [@Scott\_M](https://discuss.elastic.co/u/Scott_M)\
**Post date:** [November 21, 2022, 1:54am UTC](https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381/5 "2022-11-21T01:54:42Z")

</div>

Thank you very much. I tried 8.4 version now and got same error. Much appreciated though, that was a good idea!

Must be something wrong in my syntax, because it cannot even _parse_ my query:

'parsing\_exception', 'reason': 'Unknown key for a START\_OBJECT in [knn].'

---

<div class="post-metadata">

**Author:** ![BenTrent](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/bentrent/32/33915_2.png) [@BenTrent](https://discuss.elastic.co/u/BenTrent)\
**Post date:** [November 21, 2022, 4:33pm UTC](https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381/6 "2022-11-21T16:33:07Z")

</div>

What is your python client version? The search body looks OK at first glance. Maybe the python client is doing something unexpected, I know in later versions of the client, you specify each part of the search body instead of the whole thing.

Maybe something like:

```python
hybrid_lex_sem = self.es.search(index=indexn, query= {
                                            "match": {
                                              "question": {
                                                "query": cleanq,
                                                "boost": 0.9
                                              },
                                            },
                                          }
                                          knn= {
                                            "field": "question_vector",
                                            "query_vector": question_embedding,
                                            "k": 5,
                                            "num_candidates": 50,
                                            "boost": 0.1
                                          },
                                          size= 10
                                      )

```

---

<div class="post-metadata">

**Author:** ![Scott\_M](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/scott_m/32/99073_2.png) [@Scott\_M](https://discuss.elastic.co/u/Scott_M)\
**Post date:** [November 21, 2022, 5:25pm UTC](https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381/7 "2022-11-21T17:25:02Z")

</div>

Thank you for great idea to try. Really appreciate. For some reason even with your excellent suggestion, I still get the same:

'parsing\_exception', 'reason': 'Unknown key for a START\_OBJECT in [knn].', 'line': 1, 'col': 8}

I wonder what "unknown key" really means... those dict key names like "field" and "query\_vector" are taken from their own example, in the documentation.

---

<div class="post-metadata">

**Author:** ![Scott\_M](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/scott_m/32/99073_2.png) [@Scott\_M](https://discuss.elastic.co/u/Scott_M)\
**Post date:** [November 21, 2022, 11:53pm UTC](https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381/8 "2022-11-21T23:53:31Z")

</div>

RabBit\_BR, you seem to be the only person in the known universe who's ever actually run this. Even the ES support people don't have an answer.

Could I trouble you to show me exactly how you called with that query? Did you use request/curl or straight python or how exactly did you get that to parse??

Thank you so much in advance!

---

<div class="post-metadata">

**Author:** ![Jiaxiang\_Wang](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jiaxiang_wang/32/114051_2.png) [@Jiaxiang\_Wang](https://discuss.elastic.co/u/Jiaxiang_Wang)\
**Post date:** [November 25, 2022, 4:07am UTC](https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381/9 "2022-11-25T04:07:37Z")

</div>

Same Problem meet in dotnet:

Client: Elastic.Clients.Elasticsearch 8.0.1  
Elasticsearch DB version: 8

### How I made request in C# Code:

```auto
        var response = await _client.SearchAsync<ImageSearchDocument>(
            s => s
                .Knn(k => k
                    .QueryVector(embedding_vector) // ICollection<double>
                    .Field(_EmbeddingVectorStr) // string
                    .k(searchTotal) // long
                    .NumCandidates(numCandidate) // long
                 )
                .SourceExcludes(_EmbeddingVectorStr) // string
                .Index(FullImageSearchIndexName) //string
        );

```

### Request Body

```auto
{
   "knn":{
      "field":"embedding_vector",
      "k":10,
      "num_candidates":20,
      "query_vector":[
      ]
   }
}

```

### Error Response

```auto
{"error":{"root_cause":[{"type":"parsing_exception","reason":"Unknown key for a START_OBJECT in [knn].","line":1,"col":8}],"type":"parsing_exception","reason":"Unknown key for a START_OBJECT in [knn].","line":1,"col":8},"status":400}

```

This issue has confused me for 2 days. Any hints will be appreciated.

---

<div class="post-metadata">

**Author:** ![Scott\_M](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/scott_m/32/99073_2.png) [@Scott\_M](https://discuss.elastic.co/u/Scott_M)\
**Post date:** [November 25, 2022, 5:41am UTC](https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381/10 "2022-11-25T05:41:42Z")

</div>

> [@Jiaxiang\_Wang](#):
>
> Client: Elastic.Clients.Elasticsearch 8.0.1

FIrst thing, I believe you better upgrade your deployment (on dashboard)  
to 8.5.2 of the core Elasticsearch service ( and separately, make sure your client is the matching latest version, e.g. for me with Python that is 8.5)

---

<div class="post-metadata">

**Author:** ![Jiaxiang\_Wang](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jiaxiang_wang/32/114051_2.png) [@Jiaxiang\_Wang](https://discuss.elastic.co/u/Jiaxiang_Wang)\
**Post date:** [November 25, 2022, 6:09am UTC](https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381/11 "2022-11-25T06:09:36Z")

</div>

Thank you for your reply. I double check that my ES is 8.3.2 and my es dotnet client(Elastic.Clients.Elasticsearch) is the last stable version 8.0.1  
The Postman request successfully receive response with provided `Request Body`. Still trying to figure out why it doesn't work.

---

<div class="post-metadata">

**Author:** ![Scott\_M](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/scott_m/32/99073_2.png) [@Scott\_M](https://discuss.elastic.co/u/Scott_M)\
**Post date:** [November 25, 2022, 6:32am UTC](https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381/12 "2022-11-25T06:32:15Z")

</div>

oh ok  
Just curious why is your query\_vector empty?

"query\_vector":[  
]

---

<div class="post-metadata">

**Author:** ![Jiaxiang\_Wang](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jiaxiang_wang/32/114051_2.png) [@Jiaxiang\_Wang](https://discuss.elastic.co/u/Jiaxiang_Wang)\
**Post date:** [November 25, 2022, 6:46am UTC](https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381/13 "2022-11-25T06:46:28Z")

</div>

I remove the float number inside for visibility. (Previously is has a list of 256 float number)

---

<div class="post-metadata">

**Author:** ![Jiaxiang\_Wang](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/jiaxiang_wang/32/114051_2.png) [@Jiaxiang\_Wang](https://discuss.elastic.co/u/Jiaxiang_Wang)\
**Post date:** [November 25, 2022, 7:22am UTC](https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381/14 "2022-11-25T07:22:12Z")

</div>

@Scott_M I think the issue in your case is that you are using `search`. What I suggest is to use `knn_search` instead of it.

#### Below Python code works for me:

```auto
target_float_list = [...]// a list of 256 floating number
res = client.knn_search(
                index=client._active_index, knn={"field": "embedding_vector", "query_vector": target_float_list, "k": 10, "num_candidates": 100})   

```

#### My Request Body

```auto
{
   "knn":{
      "field":"embedding_vector",
      "query_vector":[],
      "k":10,
      "num_candidates":100
   },
   "_source":{
      "excludes":[
         "embedding_vector"
      ]
   }
}

```

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [December 23, 2022, 7:23am UTC](https://discuss.elastic.co/t/unknown-key-for-a-start-object-in-knn/319381/15 "2022-12-23T07:23:02Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
