From 79992103c5c30c79f5f130cef7c08ed1d4c778c0 Mon Sep 17 00:00:00 2001 From: Bruno Casali Date: Thu, 30 Mar 2023 14:48:26 +0100 Subject: [PATCH] Create MultiSearch module --- lib/meilisearch.rb | 1 + lib/meilisearch/client.rb | 1 + lib/meilisearch/multi_search.rb | 11 +++++++++++ spec/meilisearch/client/multi_search_spec.rb | 19 +++++++++++++++++++ 4 files changed, 32 insertions(+) create mode 100644 lib/meilisearch/multi_search.rb create mode 100644 spec/meilisearch/client/multi_search_spec.rb diff --git a/lib/meilisearch.rb b/lib/meilisearch.rb index b75baff4..2ba15581 100644 --- a/lib/meilisearch.rb +++ b/lib/meilisearch.rb @@ -3,6 +3,7 @@ require 'meilisearch/version' require 'meilisearch/utils' require 'meilisearch/http_request' +require 'meilisearch/multi_search' require 'meilisearch/tenant_token' require 'meilisearch/task' require 'meilisearch/client' diff --git a/lib/meilisearch/client.rb b/lib/meilisearch/client.rb index 951d13f2..c2d3ffa8 100644 --- a/lib/meilisearch/client.rb +++ b/lib/meilisearch/client.rb @@ -3,6 +3,7 @@ module MeiliSearch class Client < HTTPRequest include MeiliSearch::TenantToken + include MeiliSearch::MultiSearch ### INDEXES diff --git a/lib/meilisearch/multi_search.rb b/lib/meilisearch/multi_search.rb new file mode 100644 index 00000000..2cb3cba1 --- /dev/null +++ b/lib/meilisearch/multi_search.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module MeiliSearch + module MultiSearch + def multi_search(data) + body = Utils.transform_attributes(data) + + http_post '/multi-search', queries: body + end + end +end diff --git a/spec/meilisearch/client/multi_search_spec.rb b/spec/meilisearch/client/multi_search_spec.rb new file mode 100644 index 00000000..4d29de0b --- /dev/null +++ b/spec/meilisearch/client/multi_search_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true +RSpec.describe 'MeiliSearch::Client - Multiple Index Search' do + + before do + client.create_index('books') + client.create_index('movies') + end + + it 'does a custom search with two different indexes' do + response = client.multi_search([ + { index_uid: 'books', q: 'prince' }, + { index_uid: 'movies', q: 'prince' } + ]) + + expect(response['results'].count).to eq(2) + expect(response['results'][0]['estimatedTotalHits']).to eq(0) + expect(response['results'][1]['estimatedTotalHits']).to eq(0) + end +end