This page lists the changes to the /multi-search
route to allow for federated search.
A federated search is a multi-search in which the results of the various queries are combined in some way instead of returned serially.
federation
to /multi-search
requestsPOST /multi-search
requests may now include an optional federation
key.
federation
key is included and non null
, then the multi-search returns a single search result object, whose list of hits is built by merging the hits coming from all the queries, in descending ranking score order.federation
key is missing or null
, then the multi-search behaves as in v1.9, returning a list of search result objects, with each search result item from the list corresponding to a search query in the request.POST /multi-search
{
// ✨NEW✨
// null, or an object with the described fields
// optional, defaults to `null`
// if `null`, the behavior of the multi-search is the same as in v1.9
"federation": {
// number of results in the merged list
// optional, defaults to 20
"limit": 20,
// number of results to skip in the merged list
// optional, defaults to 0
"offset": 0,
}
// same as before
"queries": [
{
"q": "Batman",
"indexUid": "movies"
// the following attributes cause an error if present:
// "offset", "limit", "page", "hitsPerPage"
// "facets" is **ignored** if present
},
{
"q": "Batman",
"indexUid": "comics"
}
]
}
A response to a federated search call looks like the following:
{
hits: [
{
"id": 42,
"title": "Batman returns",
"overview": "..",
// ✨NEW✨
// `_federation` field injected in the returned hit, indicating the
// index of origin and query index of origin
"_federation": {
// index of origin of this document
"indexUid": "movies",
// index of the query in the `queries` array that caused this document
// to appear in the hits at this rank
"queriesPosition": 0
}
},
{
"comicsId": "batman-killing-joke",
"description": "..",
"title": "Batman: the killing joke",
"_federation": {
"indexUid": "comics",
"queriesPosition": 1
}
},
..
],
processingTimeMs: 0,
limit: 20,
offset: 0,
estimatedTotalHits: 2,
semanticHitCount: 0,
}
The merged results are returned in decreasing ranking score. Results from different queries must be compatible for the comparison to be possible. Otherwise, an invalid_multi_search_ranking_rules_query_ranking_rules
error is returned.
The ranking scores are compared in the following way: