meilisearch-rust icon indicating copy to clipboard operation
meilisearch-rust copied to clipboard

Implement federated multi search

Open LukasKalbertodt opened this issue 1 year ago • 3 comments

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 new Client::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 by execute_multi_search_query was a particularly nice design (and it would have been a breaking change).
  • Add a federation: Option<FederationHitInfo> to each SearchResult (which is None for non-federated searches). I don't think it's worth to have a dedicated FederatedSearchResult.
  • Add MultiSearchQuery::with_federation which returns a new FederatedMultiSearchQuery. One could also change MultiSearchQuery to 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.

LukasKalbertodt avatar Dec 16 '24 10:12 LukasKalbertodt

[!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.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in 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.

❤️ Share
🪧 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 @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in 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 pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file 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.

coderabbitai[bot] avatar May 19 '25 08:05 coderabbitai[bot]

@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.

LukasKalbertodt avatar Jun 12 '25 10:06 LukasKalbertodt

@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.

LukasKalbertodt avatar Jun 12 '25 12:06 LukasKalbertodt

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.

LukasKalbertodt avatar Jul 07 '25 08:07 LukasKalbertodt