elastic / elasticsearch-net

This strongly-typed, client library enables working with Elasticsearch. It is the official client maintained and supported by Elastic.
https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/index.html
Apache License 2.0
16 stars 1.15k forks source link

MaxScore not filled on SearchResponse at the root level but only in the HitsMetadata #7886

Open TheFireCookie opened 1 year ago

TheFireCookie commented 1 year ago

Elastic.Clients.Elasticsearch version: 8.9.1

Elasticsearch version: 8.9.0

.NET runtime version: 7.0.10

Operating system version: Windows 11

Description of the problem including expected versus actual behavior: Do a search with .TrackScore() enabled and then look at the value of the MaxScore property of the SearchResponse, it's always at null even if there is a value in the JSON.

Steps to reproduce:

  1. Do a search with .TrackScore() enabled
  2. Check the JSON answered, the max_score property is there
  3. Check the SearchResponse class, no MaxScore property is set at the root level even if the property is available only at the HitsMetadata level.

Expected behavior MaxScore is set correctly at both level or root level is deleted.

Json sent:

{
    "track_scores": true
}

Json received:

{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 5,
            "relation": "eq"
        },
        "max_score": 1.0,
....
}

.NET code image

flobernd commented 1 year ago

The client just deserializes what the server sends and in this case, the server does not send the max_score field on top level at all. I have to check if the top level max_score field should even exists. It is defined in the current specification, but that might as well be a bug. Will come back to you after clarifying.

TheFireCookie commented 1 year ago

I think the good fix is just to remove that property at the root, it's a little bit like the settings issue that I found with the slow settings: https://github.com/elastic/elasticsearch-net/issues/7865

flobernd commented 2 months ago

Same seems to apply to ScrollResponse, SearchTemplateResponse and others.