elasticsearch-net icon indicating copy to clipboard operation
elasticsearch-net copied to clipboard

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

Open TheFireCookie opened this issue 1 year ago • 3 comments

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

TheFireCookie avatar Aug 09 '23 15:08 TheFireCookie

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.

flobernd avatar Aug 11 '23 08:08 flobernd

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

TheFireCookie avatar Aug 12 '23 13:08 TheFireCookie