Skip to content
Merged
Show file tree
Hide file tree
Changes from 29 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
cdf82ce
Update README.md
meili-bot Nov 7, 2022
80bbe1c
Merge branch 'main' into bump-meilisearch-v0.30.0
alallema Nov 9, 2022
a78c0dd
Merge branch 'main' into bump-meilisearch-v0.30.0
alallema Feb 8, 2023
8b58f5c
Merge branch 'main' into bump-meilisearch-v0.30.0
alallema Feb 13, 2023
2a2d28d
Merge branch 'main' into bump-meilisearch-v0.30.0
alallema Feb 14, 2023
bd825b3
Update version to v0.30 for github action test
alallema Feb 14, 2023
585c63a
Merge branch 'main' into bump-meilisearch-v0.30.0
alallema Feb 16, 2023
239aa2c
Add cancel task api for v0.30.0
alallema Feb 16, 2023
1650673
Add delete task api for v0.30.0
alallema Feb 16, 2023
36b3df0
Update TaskDetails and TaskInfo for v0.30.0
alallema Feb 16, 2023
85da6f6
Update src/main/java/com/meilisearch/sdk/model/CancelTasksQuery.java
alallema Feb 16, 2023
9d10bd9
Update src/main/java/com/meilisearch/sdk/model/DeleteTasksQuery.java
alallema Feb 16, 2023
4f2b942
Merge pull request #548 from meilisearch/add_delete_api_for_v0.30.0
alallema Feb 16, 2023
a498166
Merge pull request #547 from meilisearch/add_cancel_task_api_for_v0.30.0
alallema Feb 16, 2023
c58cad6
Merge pull request #545 from meilisearch/update_tasks_for_v0.30
alallema Feb 17, 2023
b93c33f
Add tasks filters for v0.30
alallema Feb 16, 2023
b57354d
Modifying test for accurency
alallema Feb 22, 2023
28e845c
Merge pull request #544 from meilisearch/add_tasks_filters_for_v0.30
alallema Feb 22, 2023
5696e70
Add swap indexes api for v0.30.0
alallema Feb 21, 2023
7693d64
Merge pull request #554 from meilisearch/swap_indexes
alallema Feb 22, 2023
7b2f759
Add pagination feature for v0.30.0
alallema Feb 16, 2023
b69becd
Modifing search result to handle both kind of pagination result
alallema Feb 23, 2023
ba8ed67
Change Searchable from class to interface
alallema Feb 23, 2023
065c3ad
Update src/main/java/com/meilisearch/sdk/Search.java
alallema Feb 23, 2023
0258be2
Merge branch 'main' into bump-meilisearch-v0.30.0
alallema Feb 23, 2023
c7fc9a8
Merge pull request #546 from meilisearch/add_pagination_feature_for_v…
alallema Feb 27, 2023
5ae0bbc
Fix swap test by adding wait_for_task
alallema Feb 27, 2023
2738524
Merge branch 'main' into bump-meilisearch-v0.30.0
alallema Feb 27, 2023
26d2052
Fix test with cast (SearchResult)
alallema Feb 27, 2023
d49f11d
Merge branch 'main' into bump-meilisearch-v0.30.0
alallema Feb 27, 2023
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
4 changes: 2 additions & 2 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ jobs:
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Meilisearch (v0.29.3 version) setup with Docker
run: docker run -d -p 7700:7700 getmeili/meilisearch:v0.29.3 meilisearch --no-analytics --master-key='masterKey'
- name: Meilisearch (v0.30.5 version) setup with Docker
run: docker run -d -p 7700:7700 getmeili/meilisearch:v0.30.5 meilisearch --no-analytics --master-key='masterKey'
- name: Build and run unit and integration tests
run: ./gradlew build integrationTest
- name: Archive test report
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ Client client = new Client(config);

## 🤖 Compatibility with Meilisearch

This package only guarantees compatibility with the [version v0.29.0 of Meilisearch](https://github.com/meilisearch/meilisearch/releases/tag/v0.29.0).
This package only guarantees compatibility with the [version v0.30.0 of Meilisearch](https://github.com/meilisearch/meilisearch/releases/tag/v0.30.0).

## 💡 Learn more

Expand Down
39 changes: 39 additions & 0 deletions src/main/java/com/meilisearch/sdk/Client.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@
import com.auth0.jwt.algorithms.Algorithm;
import com.meilisearch.sdk.exceptions.MeilisearchException;
import com.meilisearch.sdk.json.JsonHandler;
import com.meilisearch.sdk.model.CancelTasksQuery;
import com.meilisearch.sdk.model.DeleteTasksQuery;
import com.meilisearch.sdk.model.IndexesQuery;
import com.meilisearch.sdk.model.Key;
import com.meilisearch.sdk.model.KeyUpdate;
import com.meilisearch.sdk.model.KeysQuery;
import com.meilisearch.sdk.model.Results;
import com.meilisearch.sdk.model.Stats;
import com.meilisearch.sdk.model.SwapIndexesParams;
import com.meilisearch.sdk.model.Task;
import com.meilisearch.sdk.model.TaskInfo;
import com.meilisearch.sdk.model.TasksQuery;
Expand Down Expand Up @@ -175,6 +178,18 @@ public TaskInfo deleteIndex(String uid) throws MeilisearchException {
return this.indexesHandler.deleteIndex(uid);
}

/**
* Swap the documents, settings, and task history of two or more indexes
* https://docs.meilisearch.com/reference/api/indexes.html#swap-indexes
*
* @param param accepted by the swap-indexes route
* @return Meilisearch API response as TaskInfo
* @throws MeilisearchException if an error occurs
*/
public TaskInfo swapIndexes(SwapIndexesParams[] param) throws MeilisearchException {
return config.httpClient.post("/swap-indexes", param, TaskInfo.class);
}

/**
* Triggers the creation of a Meilisearch dump.
* https://docs.meilisearch.com/reference/api/dump.html#create-a-dump
Expand Down Expand Up @@ -264,6 +279,30 @@ public TasksResults getTasks(TasksQuery param) throws MeilisearchException {
return this.tasksHandler.getTasks(param);
}

/**
* Cancel any number of enqueued or processing tasks
* https://docs.meilisearch.com/reference/api/tasks.html#cancel-tasks
*
* @param param accept by the tasks route
* @return Meilisearch API response as TaskInfo
* @throws MeilisearchException if an error occurs
*/
public TaskInfo cancelTasks(CancelTasksQuery param) throws MeilisearchException {
return this.tasksHandler.cancelTasks(param);
}

/**
* Delete a finished (succeeded, failed, or canceled) task
* https://docs.meilisearch.com/reference/api/tasks.html#delete-tasks
*
* @param param accept by the tasks route
* @return Meilisearch API response as TaskInfo
* @throws MeilisearchException if an error occurs
*/
public TaskInfo deleteTasks(DeleteTasksQuery param) throws MeilisearchException {
return this.tasksHandler.deleteTasks(param);
}

/**
* Waits for a task to be processed
*
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/com/meilisearch/sdk/Index.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.meilisearch.sdk.model.IndexStats;
import com.meilisearch.sdk.model.Results;
import com.meilisearch.sdk.model.SearchResult;
import com.meilisearch.sdk.model.Searchable;
import com.meilisearch.sdk.model.Settings;
import com.meilisearch.sdk.model.Task;
import com.meilisearch.sdk.model.TaskInfo;
Expand Down Expand Up @@ -345,7 +346,7 @@ public SearchResult search(String q) throws MeilisearchException {
* @return Meilisearch API response
* @throws MeilisearchException if an error occurs
*/
public SearchResult search(SearchRequest searchRequest) throws MeilisearchException {
public Searchable search(SearchRequest searchRequest) throws MeilisearchException {
return this.search.search(this.uid, searchRequest);
}

Expand Down
7 changes: 6 additions & 1 deletion src/main/java/com/meilisearch/sdk/Search.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.meilisearch.sdk.exceptions.MeilisearchException;
import com.meilisearch.sdk.model.SearchResult;
import com.meilisearch.sdk.model.SearchResultPaginated;
import com.meilisearch.sdk.model.Searchable;

/**
* Class used for searching on Meilisearch indexes
Expand Down Expand Up @@ -67,7 +69,10 @@ SearchResult search(String uid, String q) throws MeilisearchException {
* @return search results
* @throws MeilisearchException Search Exception or Client Error
*/
SearchResult search(String uid, SearchRequest sr) throws MeilisearchException {
Searchable search(String uid, SearchRequest sr) throws MeilisearchException {
if (sr != null && (sr.getPage() != null || sr.getHitsPerPage() != null)) {
return httpClient.jsonHandler.decode(rawSearch(uid, sr), SearchResultPaginated.class);
}
return httpClient.jsonHandler.decode(rawSearch(uid, sr), SearchResult.class);
}
}
4 changes: 4 additions & 0 deletions src/main/java/com/meilisearch/sdk/SearchRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ public class SearchRequest {
private Boolean showMatchesPosition;
private String[] facets;
private String[] sort;
protected Integer page;
protected Integer hitsPerPage;

/**
* Constructor for SearchRequest for building search queries with the default values: offset: 0,
Expand Down Expand Up @@ -85,6 +87,8 @@ public String toString() {
.put("showMatchesPosition", this.showMatchesPosition)
.put("facets", this.facets)
.put("sort", this.sort)
.put("page", this.page)
.put("hitsPerPage", this.hitsPerPage)
.putOpt("attributesToCrop", this.attributesToCrop)
.putOpt("attributesToHighlight", this.attributesToHighlight)
.putOpt("filter", this.filter)
Expand Down
53 changes: 47 additions & 6 deletions src/main/java/com/meilisearch/sdk/TasksHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
import com.meilisearch.sdk.exceptions.MeilisearchException;
import com.meilisearch.sdk.exceptions.MeilisearchTimeoutException;
import com.meilisearch.sdk.http.URLBuilder;
import com.meilisearch.sdk.model.CancelTasksQuery;
import com.meilisearch.sdk.model.DeleteTasksQuery;
import com.meilisearch.sdk.model.Task;
import com.meilisearch.sdk.model.TaskInfo;
import com.meilisearch.sdk.model.TasksQuery;
import com.meilisearch.sdk.model.TasksResults;
import java.util.Date;
Expand Down Expand Up @@ -88,18 +91,40 @@ TasksResults getTasks(String indexUid) throws MeilisearchException {
* @throws MeilisearchException if client request causes an error
*/
TasksResults getTasks(String indexUid, TasksQuery param) throws MeilisearchException {
String[] newIndexUid = new String[param.getIndexUid().length + 1];
if (param != null && param.getIndexUid() != null) {
for (int i = 0; i < param.getIndexUid().length; i++)
newIndexUid[i] = param.getIndexUid()[i];
newIndexUid[param.getIndexUid().length] = indexUid;
}
param = addIndexUidToQuery(indexUid, param);

TasksResults result =
httpClient.get(tasksPath().addQuery(param.toQuery()).getURL(), TasksResults.class);
return result;
}

/**
* Delete tasks from the client
*
* @param param accept by the tasks route
* @return Meilisearch API response as TaskInfo
* @throws MeilisearchException if client request causes an error
*/
TaskInfo cancelTasks(CancelTasksQuery param) throws MeilisearchException {
URLBuilder urlb = tasksPath().addSubroute("cancel");
TaskInfo result =
httpClient.post(urlb.addQuery(param.toQuery()).getURL(), null, TaskInfo.class);
return result;
}

/**
* Delete tasks from the client
*
* @param param accept by the tasks route
* @return Meilisearch API response as TaskInfo
* @throws MeilisearchException if client request causes an error
*/
TaskInfo deleteTasks(DeleteTasksQuery param) throws MeilisearchException {
TaskInfo result =
httpClient.delete(tasksPath().addQuery(param.toQuery()).getURL(), TaskInfo.class);
return result;
}

/**
* Waits for a task to be processed
*
Expand Down Expand Up @@ -143,4 +168,20 @@ void waitForTask(int taskUid, int timeoutInMs, int intervalInMs) throws Meilisea
private URLBuilder tasksPath() {
return new URLBuilder("/tasks");
}

/** Add index uid to index uids list in task query */
TasksQuery addIndexUidToQuery(String indexUid, TasksQuery param) {
if (param != null && param.getIndexUids() != null) {
String[] newIndexUid = new String[param.getIndexUids().length + 1];
for (int i = 0; i < param.getIndexUids().length; i++)
newIndexUid[i] = param.getIndexUids()[i];
newIndexUid[param.getIndexUids().length] = indexUid;
param.setIndexUids(newIndexUid);
} else if (param != null) {
param.setIndexUids(new String[] {indexUid});
} else {
param = new TasksQuery().setIndexUids(new String[] {indexUid});
}
return param;
}
}
29 changes: 29 additions & 0 deletions src/main/java/com/meilisearch/sdk/http/URLBuilder.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.meilisearch.sdk.http;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import lombok.Getter;

@Getter
Expand Down Expand Up @@ -52,6 +55,27 @@ public URLBuilder addParameter(String parameter, String[] value) {
return this;
}

public URLBuilder addParameter(String parameter, int[] value) {
if (value != null && value.length > 0) {
addSeparator();
params.append(parameter);
params.append("=");
params.append(formatArrayParameters(value));
}
return this;
}

public URLBuilder addParameter(String parameter, Date value) {
if (value != null) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
addSeparator();
params.append(parameter);
params.append("=");
params.append(formatter.format(value));
}
return this;
}

public URLBuilder addQuery(String query) {
this.params.append(query);
return this;
Expand All @@ -70,6 +94,11 @@ private String formatArrayParameters(String[] fields) {
return String.join(",", fields);
}

private String formatArrayParameters(int[] fields) {
String[] arr = Arrays.stream(fields).mapToObj(String::valueOf).toArray(String[]::new);
return String.join(",", arr);
}

public String getURL() {
return routes.toString() + params.toString();
}
Expand Down
42 changes: 42 additions & 0 deletions src/main/java/com/meilisearch/sdk/model/CancelTasksQuery.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.meilisearch.sdk.model;

import com.meilisearch.sdk.http.URLBuilder;
import java.util.Date;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

/**
* Data structure of a query parameter for tasks route
*
* <p>https://docs.meilisearch.com/reference/api/tasks.html#query-parameters
*/
@Setter
@Getter
@Accessors(chain = true)
public class CancelTasksQuery {
private int[] uids;
private String[] statuses;
private String[] types;
private String[] indexUids;
private Date beforeEnqueuedAt;
private Date afterEnqueuedAt;
private Date beforeStartedAt;
private Date afterStartedAt;

public CancelTasksQuery() {}

public String toQuery() {
URLBuilder urlb =
new URLBuilder()
.addParameter("uids", this.getUids())
.addParameter("statuses", this.getStatuses())
.addParameter("types", this.getTypes())
.addParameter("indexUids", this.getIndexUids())
.addParameter("beforeEnqueuedAt", this.getBeforeEnqueuedAt())
.addParameter("afterEnqueuedAt", this.getAfterEnqueuedAt())
.addParameter("beforeStartedAt", this.getBeforeStartedAt())
.addParameter("afterStartedAt", this.getAfterStartedAt());
return urlb.getURL();
}
}
48 changes: 48 additions & 0 deletions src/main/java/com/meilisearch/sdk/model/DeleteTasksQuery.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.meilisearch.sdk.model;

import com.meilisearch.sdk.http.URLBuilder;
import java.util.Date;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

/**
* Data structure of a query parameter for tasks route
*
* <p>https://docs.meilisearch.com/reference/api/tasks.html#query-parameters
*/
@Setter
@Getter
@Accessors(chain = true)
public class DeleteTasksQuery {
private int[] uids;
private String[] statuses;
private String[] types;
private String[] indexUids;
private int[] canceledBy;
private Date beforeEnqueuedAt;
private Date afterEnqueuedAt;
private Date beforeStartedAt;
private Date afterStartedAt;
private Date beforeFinishedAt;
private Date afterFinishedAt;

public DeleteTasksQuery() {}

public String toQuery() {
URLBuilder urlb =
new URLBuilder()
.addParameter("uids", this.getUids())
.addParameter("statuses", this.getStatuses())
.addParameter("types", this.getTypes())
.addParameter("indexUids", this.getIndexUids())
.addParameter("canceledBy", this.getCanceledBy())
.addParameter("beforeEnqueuedAt", this.getBeforeEnqueuedAt())
.addParameter("afterEnqueuedAt", this.getAfterEnqueuedAt())
.addParameter("beforeStartedAt", this.getBeforeStartedAt())
.addParameter("afterStartedAt", this.getAfterStartedAt())
.addParameter("beforeFinishedAt", this.getBeforeFinishedAt())
.addParameter("afterFinishedAt", this.getAfterFinishedAt());
return urlb.getURL();
}
}
12 changes: 12 additions & 0 deletions src/main/java/com/meilisearch/sdk/model/Faceting.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.meilisearch.sdk.model;

import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class Faceting {
protected int maxValuesPerFacet;

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

import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class Pagination {
protected int maxTotalHits;

public Pagination() {}
}
Loading