Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .code-samples.meilisearch.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -648,3 +648,14 @@ webhooks_patch_1: |-
Webhook updated_webhook = this.client.updateWebhook(webhook.getUuid(), webhookReq2);
webhooks_delete_1: |-
this.client.deleteWebhook("WEBHOOK_UUID");
search_parameter_reference_media_1: |-
Hybrid hybrid = Hybrid.builder().embedder("EMBEDDER_NAME").build();
SearchRequest searchRequest = SearchRequest.builder().
hybrid(hybrid).media(JsonParser.parseString("""
{
"FIELD_A": "VALUE_A",
"FIELD_B": {
"FIELD_C": "VALUE_B",
"FIELD_D": "VALUE_C"
}}""")).build();
client.search("movies", searchRequest);
186 changes: 93 additions & 93 deletions gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion src/main/java/com/meilisearch/sdk/SearchRequest.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.meilisearch.sdk;

import com.google.gson.JsonElement;
import com.meilisearch.sdk.model.Hybrid;
import com.meilisearch.sdk.model.MatchingStrategy;
import lombok.AccessLevel;
Expand Down Expand Up @@ -46,6 +47,7 @@ public class SearchRequest {
protected Hybrid hybrid;
protected Double[] vector;
protected Boolean retrieveVectors;
protected JsonElement media;
/**
* Constructor for SearchRequest for building search queries with the default values: offset: 0,
* limit: 20, attributesToRetrieve: ["*"], attributesToCrop: null, cropLength: 200,
Expand Down Expand Up @@ -110,7 +112,8 @@ public String toString() {
.putOpt("locales", this.locales)
.putOpt("distinct", this.distinct)
.putOpt("vector", this.vector)
.putOpt("retrieveVectors", this.retrieveVectors);
.putOpt("retrieveVectors", this.retrieveVectors)
.putOpt("media", this.media);

if (this.hybrid != null) {
jsonObject.put("hybrid", this.hybrid.toJSONObject());
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/com/meilisearch/sdk/model/Embedder.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.meilisearch.sdk.model;

import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.HashMap;
import java.util.Map;
import lombok.*;
import lombok.experimental.Accessors;
Expand Down Expand Up @@ -69,5 +70,15 @@ public class Embedder {
/** Query for the embedder. Optional. */
protected String query;

/**
* Template fragments that will be reassembled and sent to the remote embedder at indexing time.
*/
protected HashMap<String, EmbedderFragment> indexingFragments;

/**
* Template fragments that will be reassembled and sent to the remote embedder at search time.
*/
protected HashMap<String, EmbedderFragment> searchFragments;

public Embedder() {}
}
14 changes: 14 additions & 0 deletions src/main/java/com/meilisearch/sdk/model/EmbedderFragment.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.meilisearch.sdk.model;

import com.google.gson.JsonElement;
import lombok.*;

@Builder
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PACKAGE)
@EqualsAndHashCode
public class EmbedderFragment {
protected JsonElement value;
}
54 changes: 41 additions & 13 deletions src/test/java/com/meilisearch/integration/SettingsTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,12 @@
import static org.hamcrest.Matchers.notNullValue;
import static org.junit.jupiter.api.Assertions.assertThrows;

import com.google.gson.JsonParser;
import com.meilisearch.integration.classes.AbstractIT;
import com.meilisearch.integration.classes.TestData;
import com.meilisearch.sdk.Index;
import com.meilisearch.sdk.exceptions.GranularFilterableAttributesException;
import com.meilisearch.sdk.model.Embedder;
import com.meilisearch.sdk.model.EmbedderDistribution;
import com.meilisearch.sdk.model.EmbedderSource;
import com.meilisearch.sdk.model.FacetSortValue;
import com.meilisearch.sdk.model.Faceting;
import com.meilisearch.sdk.model.FilterableAttributesConfig;
import com.meilisearch.sdk.model.FilterableAttributesFeatures;
import com.meilisearch.sdk.model.FilterableAttributesFilter;
import com.meilisearch.sdk.model.LocalizedAttribute;
import com.meilisearch.sdk.model.Pagination;
import com.meilisearch.sdk.model.Settings;
import com.meilisearch.sdk.model.TaskInfo;
import com.meilisearch.sdk.model.TypoTolerance;
import com.meilisearch.sdk.model.*;
import com.meilisearch.sdk.utils.Movie;
import java.util.ArrayList;
import java.util.Arrays;
Expand Down Expand Up @@ -1586,11 +1575,45 @@ public void testGetEmbeddersSettings() throws Exception {
}

public Embedder createUserProvidedEmbedder() {
HashMap<String, EmbedderFragment> indexingFragment = new HashMap<>();
indexingFragment.put(
"text",
EmbedderFragment.builder()
.value(
JsonParser.parseString(
"""
{
"content": [
{
"type": "text",
"text": "A movie titled {{doc.title}} whose description starts with {{doc.overview|truncateWords:20}}."
}
]
}"""))
.build());
HashMap<String, EmbedderFragment> searchFragment = new HashMap<>();
searchFragment.put(
"text",
EmbedderFragment.builder()
.value(
JsonParser.parseString(
"""
{
"content": [
{
"type": "image_url",
"image_url": "https://static.vecteezy.com/system/resources/thumbnails/057/068/323/small/single-fresh-red-strawberry-on-table-green-background-food-fruit-sweet-macro-juicy-plant-image-photo.jpg"
}
]
}"""))
.build());
return Embedder.builder()
.source(EmbedderSource.USER_PROVIDED)
.dimensions(1)
.distribution(EmbedderDistribution.builder().mean(0.7).sigma(0.3).build())
.binaryQuantized(false)
.indexingFragments(indexingFragment)
.searchFragments(searchFragment)
.build();
}

Expand Down Expand Up @@ -1618,6 +1641,11 @@ public void testUpdateEmbeddersSettings() throws Exception {
is(equalTo(embedder.getDistribution().getSigma())));
assertThat(
retrievedEmbedder.getBinaryQuantized(), is(equalTo(embedder.getBinaryQuantized())));
assertThat(
retrievedEmbedder.getIndexingFragments(),
is(equalTo(embedder.getIndexingFragments())));
assertThat(
retrievedEmbedder.getSearchFragments(), is(equalTo(embedder.getSearchFragments())));
}

@Test
Expand Down