Loading

Search using LTR

Stack Serverless

Note

This feature was introduced in version 8.12.0 and is only available to certain subscription levels. For more information, see https://www.elastic.co/subscriptions.

Once your LTR model is trained and deployed in Elasticsearch, there are two ways to use it with the search API to improve your search results:

  1. As a rescorer
  2. As a retriever

To use your LTR model as a rescorer in the search API, follow this example:

 GET my-index/_search {
  "query": {
    "multi_match": {
      "fields": ["title", "content"],
      "query": "the quick brown fox"
    }
  },
  "rescore": {
    "learning_to_rank": {
      "model_id": "ltr-model",
      "params": {
        "query_text": "the quick brown fox"
      }
    },
    "window_size": 100
  }
}
  1. First pass query providing documents to be rescored.
  2. The unique identifier of the trained model uploaded to Elasticsearch.
  3. Named parameters to be passed to the query templates used for feature.
  4. The number of documents that should be examined by the rescorer on each shard.

Stack Planned Serverless

LTR models can also be used as a retriever in the search pipeline. You can implement this with a rescorer retriever as shown in the following example:

 GET my-index/_search {
  "retriever": {
    "rescorer": {
      "rescore": {
        "window_size": 100,
        "learning_to_rank": {
          "model_id": "ltr-model",
          "params": {
            "query_text": "the quick brown fox"
          }
        }
      },
      "retrievers": [
        {
          "standard": {
            "query": {
              "multi_match": {
                "fields": ["title", "content"],
                "query": "the quick brown fox"
              }
            }
          }
        }
      ]
    }
  }
}
  1. First pass retrievers used to retrieve documents to be rescored
  2. The unique identifier of the trained model uploaded to Elasticsearch.
  3. Named parameters to be passed to the query templates used for feature extraction.
  4. The number of documents that should be examined by the rescorer.

Scores returned by LTR models are usually not comparable with the scores issued by the first pass query and can be lower than the non-rescored score. This can cause the non-rescored result document to be ranked higher than the rescored document. To prevent this, the window_size parameter is mandatory for LTR rescorers and should be greater than or equal to from + size.

When exposing pagination to users, window_size should remain constant as each page is progressed by passing different from values. Changing the window_size can alter the top hits causing results to confusingly shift as the user steps through pages.