Implement federated multi search
Pull Request
Related issue
Fixes #609
What does this PR do?
This PR adds types and methods to use the federated multi search API. There are multiple ways to add this to this library, depending on how strictly one wants to type everything. I decided to:
- Add a new
FederatedMultiSearchResponse, which also required a newClient::execute_federated_multi_search_query. The response of federated searches is just very different from normal multi searches, and I didn't think having an enum returned byexecute_multi_search_querywas a particularly nice design (and it would have been a breaking change). - Add a
federation: Option<FederationHitInfo>to eachSearchResult(which isNonefor non-federated searches). I don't think it's worth to have a dedicatedFederatedSearchResult. - Add
MultiSearchQuery::with_federationwhich returns a newFederatedMultiSearchQuery. One could also changeMultiSearchQueryto be able to represent federated queries, but I had a slight preference for my solution.
PR checklist
Please check if your PR fulfills the following requirements:
- [x] Does this PR fix an existing issue, or have you listed the changes applied in the PR description (and why they are needed)?
- [x] Have you read the contributing guidelines?
- [x] Have you made sure that the title is accurate and descriptive of the changes?
Thank you so much for contributing to Meilisearch!
Summary by CodeRabbit
-
New Features
- Introduced federated multi-search, allowing users to combine results from multiple indexes into a single, merged list.
- Added support for specifying federation options such as weighting, offsets, limits, and facet merging in multi-search queries.
- Search results now include federation metadata, providing more context about each hit in federated searches.
- Enhanced test support for federated multi-search scenarios across diverse document types.
- Improved test macro to support automatic creation and management of multiple indexes in test functions.
-
Documentation
- Expanded documentation to explain federated search usage and options in multi-search queries.
- Clarified test macro documentation to reflect support for multiple index parameters in tests.
[!IMPORTANT]
Review skipped
Auto reviews are disabled on base/target branches other than the default branch.
Please check the settings in the CodeRabbit UI or the
.coderabbit.yamlfile in this repository. To trigger a single review, invoke the@coderabbitai reviewcommand.You can disable this status message by setting the
reviews.review_statustofalsein the CodeRabbit configuration file.
"""
Walkthrough
The changes introduce federated multi-search support by adding new query and response types, federation-specific options, and related metadata structures. The client gains an asynchronous method to execute federated multi-search queries. Documentation is updated to explain usage and type requirements for federated queries. No changes to error handling or unrelated functionality are made.
Changes
| File(s) | Change Summary |
|---|---|
| src/client.rs | Added execute_federated_multi_search_query async method to Client for federated multi-search; expanded documentation for multi_search to explain federated search usage and type requirements. |
| src/search.rs | Added federated multi-search support: - Added FederatedMultiSearchQuery, FederationOptions, FederatedMultiSearchResponse, FederationHitInfo, and QueryFederationOptions structs.- Enhanced MultiSearchQuery and SearchQuery with federation methods and fields.- Updated SearchResult to include federation metadata.- Replaced manual Serialize impl for MultiSearchQuery with derived version.- Added tests for federated multi-search functionality. |
| meilisearch-test-macro/src/lib.rs | Modified meilisearch_test macro to support multiple Index parameters by creating and managing separate indices for each parameter instead of a single shared index. |
| meilisearch-test-macro/README.md | Updated documentation to clarify that multiple Index parameters are supported and multiple indices are created automatically. |
Sequence Diagram(s)
sequenceDiagram
participant User
participant Client
participant Server
User->>Client: Build MultiSearchQuery
User->>Client: Call with_federation(federation_options)
User->>Client: Call execute() on FederatedMultiSearchQuery
Client->>Server: POST /multi-search with federated query
Server-->>Client: FederatedMultiSearchResponse<T>
Client-->>User: Merged federated search results
Assessment against linked issues
| Objective | Addressed | Explanation |
|---|---|---|
Add a new search parameter named federation to the multiSearch method (#609) |
✅ | |
Add capability for a new search parameter federationOptions in the search query (#609) |
✅ | |
| Add tests (#609) | ✅ |
Poem
A rabbit leaps through fields of search,
Now federated queries it can perch!
With options and weights, results combine,
Across indexes, the answers align.
🥕✨
New structs and methods—what a feat!
Our search is now truly elite. """
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
🪧 Tips
Chat
There are 3 ways to chat with CodeRabbit:
- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
I pushed a fix in commit <commit_id>, please review it.Explain this complex logic.Open a follow-up GitHub issue for this discussion.
- Files and specific lines of code (under the "Files changed" tab): Tag
@coderabbitaiin a new review comment at the desired location with your query. Examples:@coderabbitai explain this code block.@coderabbitai modularize this function.
- PR comments: Tag
@coderabbitaiin a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.@coderabbitai read src/utils.ts and explain its main purpose.@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.@coderabbitai help me debug CodeRabbit configuration file.
Support
Need help? Create a ticket on our support page for assistance with any issues or questions.
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.
CodeRabbit Commands (Invoked using PR comments)
@coderabbitai pauseto pause the reviews on a PR.@coderabbitai resumeto resume the paused reviews.@coderabbitai reviewto trigger an incremental review. This is useful when automatic reviews are disabled for the repository.@coderabbitai full reviewto do a full review from scratch and review all the files again.@coderabbitai summaryto regenerate the summary of the PR.@coderabbitai generate docstringsto generate docstrings for this PR.@coderabbitai generate sequence diagramto generate a sequence diagram of the changes in this PR.@coderabbitai resolveresolve all the CodeRabbit review comments.@coderabbitai configurationto show the current CodeRabbit configuration for the repository.@coderabbitai helpto get help.
Other keywords and placeholders
- Add
@coderabbitai ignoreanywhere in the PR description to prevent this PR from being reviewed. - Add
@coderabbitai summaryto generate the high-level summary at a specific location in the PR description. - Add
@coderabbitaianywhere in the PR title to generate the title automatically.
CodeRabbit Configuration File (.coderabbit.yaml)
- You can programmatically configure CodeRabbit by adding a
.coderabbit.yamlfile to the root of your repository. - Please see the configuration documentation for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation:
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
Documentation and Community
- Visit our Documentation for detailed information on how to use CodeRabbit.
- Join our Discord Community to get help, request features, and share feedback.
- Follow us on X/Twitter for updates and announcements.
@curquiza Any chances you got time to look at this?
Also: am I supposed to pay attention to the AI bot? I assumed I can ignore it like most other AI slop (I merely skimmed it), but if you think its comments make sense, I will take another look at it.
@martin-g Thanks for the review! I updated the PR to include the change you requested and also add a unit test. To do that, I had to adjust the #[meilisearch_test] macro and make it a bit more powerful.
Oh and: CI fails, but the three test failures don't seem to be related to my PR at all.
Again, for the record: I am pretty sure the CI failures have nothing to do with this PR. So I think this should be ready.