From d30452a2bd6b0a15da9dafde468c3dab2307b40e Mon Sep 17 00:00:00 2001 From: nsreddy18 Date: Tue, 3 Sep 2024 20:35:13 +0530 Subject: [PATCH 1/2] Added Federation Parameter to multisearch method --- src/main/java/com/meilisearch/sdk/Client.java | 16 +++++++- .../meilisearch/sdk/FederationOptions.java | 26 ++++++++++++ .../meilisearch/sdk/IndexSearchRequest.java | 4 ++ .../sdk/MultiSearchFederation.java | 41 +++++++++++++++++++ .../meilisearch/sdk/MultiSearchRequest.java | 7 ++++ .../meilisearch/integration/SearchTest.java | 34 +++++++++++++++ 6 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/meilisearch/sdk/FederationOptions.java create mode 100644 src/main/java/com/meilisearch/sdk/MultiSearchFederation.java diff --git a/src/main/java/com/meilisearch/sdk/Client.java b/src/main/java/com/meilisearch/sdk/Client.java index e2e5f2eb..19a83988 100644 --- a/src/main/java/com/meilisearch/sdk/Client.java +++ b/src/main/java/com/meilisearch/sdk/Client.java @@ -23,6 +23,7 @@ import com.meilisearch.sdk.model.TasksResults; import java.util.Date; import java.util.Map; +import java.util.HashMap; import java.util.TimeZone; import java.util.UUID; @@ -428,8 +429,19 @@ public void deleteKey(String key) throws MeilisearchException { this.keysHandler.deleteKey(key); } - public Results multiSearch(MultiSearchRequest search) - throws MeilisearchException { + /* + * Method overloading the multi search method to add federation parameter + */ + public MultiSearchResult multiSearch(MultiSearchRequest search, + MultiSearchFederation federation) throws MeilisearchException { + Map payload = new HashMap<>(); + payload.put("queries", search.getQueries()); + payload.put("federation", federation); + return this.config.httpClient.post( + "/multi-search", payload, MultiSearchResult.class); + } + + public Results multiSearch(MultiSearchRequest search) throws MeilisearchException { return this.config.httpClient.post( "/multi-search", search, Results.class, MultiSearchResult.class); } diff --git a/src/main/java/com/meilisearch/sdk/FederationOptions.java b/src/main/java/com/meilisearch/sdk/FederationOptions.java new file mode 100644 index 00000000..b4abdbd8 --- /dev/null +++ b/src/main/java/com/meilisearch/sdk/FederationOptions.java @@ -0,0 +1,26 @@ +package com.meilisearch.sdk; + +import org.json.JSONObject; + +public class FederationOptions { + + private Double weight; + + public FederationOptions setWeight(Double weight) { + this.weight = weight; + return this; + } + + /** + * Method that returns the JSON String of the FederationOptions + * + * @return JSON String of the FederationOptions + */ + @Override + public String toString(){ + JSONObject jsonObject = + new JSONObject() + .put("weight", this.weight); + return jsonObject.toString(); + } +} diff --git a/src/main/java/com/meilisearch/sdk/IndexSearchRequest.java b/src/main/java/com/meilisearch/sdk/IndexSearchRequest.java index ee276f7a..ca0c240c 100644 --- a/src/main/java/com/meilisearch/sdk/IndexSearchRequest.java +++ b/src/main/java/com/meilisearch/sdk/IndexSearchRequest.java @@ -34,6 +34,7 @@ public class IndexSearchRequest { protected Boolean showRankingScore; protected Boolean showRankingScoreDetails; protected Double rankingScoreThreshold; + private FederationOptions federationOptions; /** * Constructor for MultiSearchRequest for building search queries with the default values: @@ -87,6 +88,9 @@ public String toString() { .put("sort", this.sort) .put("page", this.page) .put("hitsPerPage", this.hitsPerPage) + .put("federationOptions", this.federationOptions != null + ? this.federationOptions.toString() + : null) .putOpt("attributesToCrop", this.attributesToCrop) .putOpt("attributesToHighlight", this.attributesToHighlight) .putOpt("filter", this.filter) diff --git a/src/main/java/com/meilisearch/sdk/MultiSearchFederation.java b/src/main/java/com/meilisearch/sdk/MultiSearchFederation.java new file mode 100644 index 00000000..4a3e70f9 --- /dev/null +++ b/src/main/java/com/meilisearch/sdk/MultiSearchFederation.java @@ -0,0 +1,41 @@ +package com.meilisearch.sdk; + +import org.json.JSONObject; + +public class MultiSearchFederation { + + private Integer limit; + private Integer offset; + + public MultiSearchFederation setLimit(Integer limit) { + this.limit = limit; + return this; + } + + public MultiSearchFederation setOffset(Integer offset) { + this.offset = offset; + return this; + } + + public Integer getLimit(){ + return this.limit; + } + + public Integer getOffset(){ + return this.offset; + } + + /** + * Method that returns the JSON String of the MultiSearchFederation + * + * @return JSON String of the MultiSearchFederation + */ + @Override + public String toString(){ + JSONObject jsonObject = + new JSONObject() + .put("limit", this.limit) + .put("offset", this.offset); + return jsonObject.toString(); + } +} diff --git a/src/main/java/com/meilisearch/sdk/MultiSearchRequest.java b/src/main/java/com/meilisearch/sdk/MultiSearchRequest.java index e0033512..7ade3e10 100644 --- a/src/main/java/com/meilisearch/sdk/MultiSearchRequest.java +++ b/src/main/java/com/meilisearch/sdk/MultiSearchRequest.java @@ -10,6 +10,13 @@ public MultiSearchRequest() { this.queries = new ArrayList(); } + /* + * Method to get Queries as a list + */ + public ArrayList getQueries(){ + return this.queries; + } + /** * Method to add new Query * diff --git a/src/test/java/com/meilisearch/integration/SearchTest.java b/src/test/java/com/meilisearch/integration/SearchTest.java index d92117bd..da440099 100644 --- a/src/test/java/com/meilisearch/integration/SearchTest.java +++ b/src/test/java/com/meilisearch/integration/SearchTest.java @@ -795,6 +795,40 @@ public void testMultiSearch() throws Exception { } } + /* + * Test the federation parameter in multi search method + */ + @Test + public void testFederation() throws Exception { + HashSet indexUids = new HashSet(); + indexUids.add("MultiSearch1"); + indexUids.add("MultiSearch2"); + for (String indexUid : indexUids) { + Index index = client.index(indexUid); + + TestData testData = this.getTestData(MOVIES_INDEX, Movie.class); + TaskInfo task = index.addDocuments(testData.getRaw()); + + index.waitForTask(task.getTaskUid()); + } + MultiSearchRequest search = new MultiSearchRequest(); + search.addQuery(new IndexSearchRequest("MultiSearch1").setQuery("batman")); + search.addQuery(new IndexSearchRequest("MultiSearch2").setQuery("batman") + .setFederationOptions(new FederationOptions().setWeight(0.9))); + + MultiSearchFederation federation = new MultiSearchFederation(); + federation.setLimit(2); + MultiSearchResult results = client.multiSearch(search, federation); + + assertThat(results.getEstimatedTotalHits(), is(2)); + assertThat(results.getLimit(), is(2)); + ArrayList> hits = results.getHits(); + assertThat(hits, hasSize(2)); + for(HashMap record : hits){ + assertThat(record.containsKey("_federation"), is(true)); + } + } + /** Test multisearch with ranking score threshold */ @Test public void testMultiSearchWithRankingScoreThreshold() throws Exception { From ce937bc4fda44fc0ab7476499bfc6681e0ccb5d9 Mon Sep 17 00:00:00 2001 From: nsreddy18 Date: Tue, 3 Sep 2024 20:39:27 +0530 Subject: [PATCH 2/2] Added Federation Parameter to multisearch method --- src/main/java/com/meilisearch/sdk/Client.java | 15 ++++++++------- .../com/meilisearch/sdk/FederationOptions.java | 10 ++++------ .../com/meilisearch/sdk/IndexSearchRequest.java | 8 +++++--- .../meilisearch/sdk/MultiSearchFederation.java | 16 +++++++--------- .../com/meilisearch/sdk/MultiSearchRequest.java | 4 ++-- .../com/meilisearch/integration/SearchTest.java | 10 ++++++---- 6 files changed, 32 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/meilisearch/sdk/Client.java b/src/main/java/com/meilisearch/sdk/Client.java index 19a83988..ef925c1c 100644 --- a/src/main/java/com/meilisearch/sdk/Client.java +++ b/src/main/java/com/meilisearch/sdk/Client.java @@ -22,8 +22,8 @@ import com.meilisearch.sdk.model.TasksQuery; import com.meilisearch.sdk.model.TasksResults; import java.util.Date; -import java.util.Map; import java.util.HashMap; +import java.util.Map; import java.util.TimeZone; import java.util.UUID; @@ -432,16 +432,17 @@ public void deleteKey(String key) throws MeilisearchException { /* * Method overloading the multi search method to add federation parameter */ - public MultiSearchResult multiSearch(MultiSearchRequest search, - MultiSearchFederation federation) throws MeilisearchException { + public MultiSearchResult multiSearch( + MultiSearchRequest search, MultiSearchFederation federation) + throws MeilisearchException { Map payload = new HashMap<>(); payload.put("queries", search.getQueries()); payload.put("federation", federation); - return this.config.httpClient.post( - "/multi-search", payload, MultiSearchResult.class); - } + return this.config.httpClient.post("/multi-search", payload, MultiSearchResult.class); + } - public Results multiSearch(MultiSearchRequest search) throws MeilisearchException { + public Results multiSearch(MultiSearchRequest search) + throws MeilisearchException { return this.config.httpClient.post( "/multi-search", search, Results.class, MultiSearchResult.class); } diff --git a/src/main/java/com/meilisearch/sdk/FederationOptions.java b/src/main/java/com/meilisearch/sdk/FederationOptions.java index b4abdbd8..d2df5b7d 100644 --- a/src/main/java/com/meilisearch/sdk/FederationOptions.java +++ b/src/main/java/com/meilisearch/sdk/FederationOptions.java @@ -3,7 +3,7 @@ import org.json.JSONObject; public class FederationOptions { - + private Double weight; public FederationOptions setWeight(Double weight) { @@ -14,13 +14,11 @@ public FederationOptions setWeight(Double weight) { /** * Method that returns the JSON String of the FederationOptions * - * @return JSON String of the FederationOptions + * @return JSON String of the FederationOptions */ @Override - public String toString(){ - JSONObject jsonObject = - new JSONObject() - .put("weight", this.weight); + public String toString() { + JSONObject jsonObject = new JSONObject().put("weight", this.weight); return jsonObject.toString(); } } diff --git a/src/main/java/com/meilisearch/sdk/IndexSearchRequest.java b/src/main/java/com/meilisearch/sdk/IndexSearchRequest.java index ca0c240c..da46db0e 100644 --- a/src/main/java/com/meilisearch/sdk/IndexSearchRequest.java +++ b/src/main/java/com/meilisearch/sdk/IndexSearchRequest.java @@ -88,9 +88,11 @@ public String toString() { .put("sort", this.sort) .put("page", this.page) .put("hitsPerPage", this.hitsPerPage) - .put("federationOptions", this.federationOptions != null - ? this.federationOptions.toString() - : null) + .put( + "federationOptions", + this.federationOptions != null + ? this.federationOptions.toString() + : null) .putOpt("attributesToCrop", this.attributesToCrop) .putOpt("attributesToHighlight", this.attributesToHighlight) .putOpt("filter", this.filter) diff --git a/src/main/java/com/meilisearch/sdk/MultiSearchFederation.java b/src/main/java/com/meilisearch/sdk/MultiSearchFederation.java index 4a3e70f9..ecaeabc6 100644 --- a/src/main/java/com/meilisearch/sdk/MultiSearchFederation.java +++ b/src/main/java/com/meilisearch/sdk/MultiSearchFederation.java @@ -3,7 +3,7 @@ import org.json.JSONObject; public class MultiSearchFederation { - + private Integer limit; private Integer offset; @@ -16,26 +16,24 @@ public MultiSearchFederation setOffset(Integer offset) { this.offset = offset; return this; } - - public Integer getLimit(){ + + public Integer getLimit() { return this.limit; } - public Integer getOffset(){ + public Integer getOffset() { return this.offset; } /** * Method that returns the JSON String of the MultiSearchFederation * - * @return JSON String of the MultiSearchFederation + * @return JSON String of the MultiSearchFederation */ @Override - public String toString(){ + public String toString() { JSONObject jsonObject = - new JSONObject() - .put("limit", this.limit) - .put("offset", this.offset); + new JSONObject().put("limit", this.limit).put("offset", this.offset); return jsonObject.toString(); } } diff --git a/src/main/java/com/meilisearch/sdk/MultiSearchRequest.java b/src/main/java/com/meilisearch/sdk/MultiSearchRequest.java index 7ade3e10..3ce3ed8f 100644 --- a/src/main/java/com/meilisearch/sdk/MultiSearchRequest.java +++ b/src/main/java/com/meilisearch/sdk/MultiSearchRequest.java @@ -11,9 +11,9 @@ public MultiSearchRequest() { } /* - * Method to get Queries as a list + * Method to get Queries as a list */ - public ArrayList getQueries(){ + public ArrayList getQueries() { return this.queries; } diff --git a/src/test/java/com/meilisearch/integration/SearchTest.java b/src/test/java/com/meilisearch/integration/SearchTest.java index da440099..1c7bf4dd 100644 --- a/src/test/java/com/meilisearch/integration/SearchTest.java +++ b/src/test/java/com/meilisearch/integration/SearchTest.java @@ -813,9 +813,11 @@ public void testFederation() throws Exception { } MultiSearchRequest search = new MultiSearchRequest(); search.addQuery(new IndexSearchRequest("MultiSearch1").setQuery("batman")); - search.addQuery(new IndexSearchRequest("MultiSearch2").setQuery("batman") - .setFederationOptions(new FederationOptions().setWeight(0.9))); - + search.addQuery( + new IndexSearchRequest("MultiSearch2") + .setQuery("batman") + .setFederationOptions(new FederationOptions().setWeight(0.9))); + MultiSearchFederation federation = new MultiSearchFederation(); federation.setLimit(2); MultiSearchResult results = client.multiSearch(search, federation); @@ -824,7 +826,7 @@ public void testFederation() throws Exception { assertThat(results.getLimit(), is(2)); ArrayList> hits = results.getHits(); assertThat(hits, hasSize(2)); - for(HashMap record : hits){ + for (HashMap record : hits) { assertThat(record.containsKey("_federation"), is(true)); } }