@@ -385,6 +385,44 @@ class ElasticSearchIntegrationTests: XCTestCase {
385
385
XCTAssertTrue ( results. hits. hits. contains ( where: { $0. source. name == " Some 29 Apples " } ) )
386
386
}
387
387
388
+ func testCustomSearch( ) throws {
389
+ for index in 1 ... 100 {
390
+ let name = " Some \( index) Apples "
391
+ let item = SomeItem ( id: UUID ( ) , name: name)
392
+ _ = try client. createDocument ( item, in: self . indexName) . wait ( )
393
+ }
394
+
395
+ // This is required for ES to settle and load the indexes to return the right results
396
+ Thread . sleep ( forTimeInterval: 1.0 )
397
+
398
+ struct Query : Encodable {
399
+ let query : QueryBody
400
+ let from : Int
401
+ let size : Int
402
+ }
403
+
404
+ struct QueryBody : Encodable {
405
+ let queryString : QueryString
406
+
407
+ enum CodingKeys : String , CodingKey {
408
+ case queryString = " query_string "
409
+ }
410
+ }
411
+
412
+ struct QueryString : Encodable {
413
+ let query : String
414
+ }
415
+
416
+ let queryString = QueryString ( query: " Apples " )
417
+ let queryBody = QueryBody ( queryString: queryString)
418
+ let query = Query ( query: queryBody, from: 10 , size: 20 )
419
+
420
+ let results : ESGetMultipleDocumentsResponse < SomeItem > = try client. customSearch ( from: indexName, query: query) . wait ( )
421
+ XCTAssertEqual ( results. hits. hits. count, 20 )
422
+ XCTAssertTrue ( results. hits. hits. contains ( where: { $0. source. name == " Some 11 Apples " } ) )
423
+ XCTAssertTrue ( results. hits. hits. contains ( where: { $0. source. name == " Some 29 Apples " } ) )
424
+ }
425
+
388
426
// MARK: - Private
389
427
private func setupItems( ) throws {
390
428
for index in 1 ... 10 {
0 commit comments