Skip to content

Commit 5fbba17

Browse files
committed
Add capability to update documents by query #50
1 parent cac5103 commit 5fbba17

File tree

2 files changed

+47
-14
lines changed

2 files changed

+47
-14
lines changed

src/main/java/org/typesense/api/Documents.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package org.typesense.api;
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
4-
import org.typesense.model.*;
5-
64
import java.util.ArrayList;
5+
import java.util.Collection;
76
import java.util.List;
87
import java.util.Map;
9-
import java.util.Collection;
8+
import org.typesense.model.DeleteDocumentsParameters;
9+
import org.typesense.model.ExportDocumentsParameters;
10+
import org.typesense.model.ImportDocumentsParameters;
11+
import org.typesense.model.SearchParameters;
12+
import org.typesense.model.SearchResult;
13+
import org.typesense.model.UpdateDocumentsParameters;
1014

1115
public class Documents {
1216

@@ -78,6 +82,18 @@ public String import_(Collection<?> documents,
7882
return this.apiCall.post(this.getEndPoint("import"), reqBody, queryParameters, String.class);
7983
}
8084

85+
/**
86+
* <a href="https://typesense.org/docs/0.25.1/api/documents.html#update-by-query">>Update by query</a>
87+
*
88+
* @param document - Document
89+
* @param updateDocumentsParameters - {@link UpdateDocumentsParameters}
90+
* @return
91+
* @throws Exception
92+
*/
93+
public Map<String, Integer> update(Map<String, Object> document, UpdateDocumentsParameters updateDocumentsParameters) throws Exception {
94+
return this.apiCall.patch(this.getEndPoint("/"), document, updateDocumentsParameters, Map.class);
95+
}
96+
8197
public String getEndPoint(String target){
8298
return Collections.RESOURCE_PATH + "/" + this.collectionName + Documents.RESOURCE_PATH + "/" + target;
8399
}

src/test/java/org/typesense/api/DocumentsTest.java

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
package org.typesense.api;
22

3+
import static org.hamcrest.MatcherAssert.assertThat;
4+
import static org.hamcrest.Matchers.is;
5+
import static org.junit.jupiter.api.Assertions.assertEquals;
6+
import static org.junit.jupiter.api.Assertions.assertFalse;
7+
import static org.junit.jupiter.api.Assertions.fail;
8+
9+
import java.util.ArrayList;
10+
import java.util.HashMap;
11+
import java.util.List;
12+
import java.util.Map;
313
import org.junit.jupiter.api.BeforeEach;
414
import org.junit.jupiter.api.Test;
515
import org.typesense.api.exceptions.ObjectNotFound;
@@ -10,16 +20,7 @@
1020
import org.typesense.model.ImportDocumentsParameters;
1121
import org.typesense.model.SearchParameters;
1222
import org.typesense.model.SearchResult;
13-
14-
import java.util.ArrayList;
15-
import java.util.EmptyStackException;
16-
import java.util.HashMap;
17-
import java.util.List;
18-
import java.util.Map;
19-
20-
import static org.junit.jupiter.api.Assertions.assertEquals;
21-
import static org.junit.jupiter.api.Assertions.assertFalse;
22-
import static org.junit.jupiter.api.Assertions.fail;
23+
import org.typesense.model.UpdateDocumentsParameters;
2324

2425
class DocumentsTest {
2526

@@ -263,4 +264,20 @@ void testNestedObjectImport() throws Exception {
263264
assertEquals(1, searchResult.getFound().intValue());
264265
assertEquals(1, searchResult.getHits().size());
265266
}
266-
}
267+
268+
@Test
269+
void testUpdateDocumentsByQuery() throws Exception {
270+
helper.createTestDocument();
271+
272+
UpdateDocumentsParameters updateDocumentsParameters = new UpdateDocumentsParameters()
273+
.filterBy("publication_year:1666");
274+
Map<String, Object> fieldToAdd = new HashMap<>();
275+
fieldToAdd.put("ratings_count", "200");
276+
Map<String, Integer> response = client.collections("books").documents().update(fieldToAdd, updateDocumentsParameters);
277+
assertThat(response.get("num_updated"), is(1));
278+
279+
// try fetching the document back
280+
Map<String, Object> resp = client.collections("books").documents("1").retrieve();
281+
assertThat(resp.get("ratings_count"), is(200));
282+
}
283+
}

0 commit comments

Comments
 (0)