@@ -328,6 +328,101 @@ class ElasticSearchIntegrationTests: XCTestCase {
328
328
XCTAssertEqual ( retrievedItem. source. count, 1 )
329
329
}
330
330
331
+ func testCountWithQueryBody( ) throws {
332
+ try setupItems ( )
333
+
334
+ struct SearchQuery : Encodable {
335
+ let query : QueryBody
336
+ }
337
+
338
+ struct QueryBody : Encodable {
339
+ let queryString : QueryString
340
+
341
+ enum CodingKeys : String , CodingKey {
342
+ case queryString = " query_string "
343
+ }
344
+ }
345
+
346
+ struct QueryString : Encodable {
347
+ let query : String
348
+ }
349
+
350
+ let queryString = QueryString ( query: " Apples " )
351
+ let queryBody = QueryBody ( queryString: queryString)
352
+ let searchQuery = SearchQuery ( query: queryBody)
353
+ let results = try client. searchDocumentsCount ( from: indexName, query: searchQuery) . wait ( )
354
+ XCTAssertEqual ( results. count, 5 )
355
+ }
356
+
357
+ func testPaginationQueryWithQueryBody( ) throws {
358
+ for index in 1 ... 100 {
359
+ let name = " Some \( index) Apples "
360
+ let item = SomeItem ( id: UUID ( ) , name: name)
361
+ _ = try client. createDocument ( item, in: self . indexName) . wait ( )
362
+ }
363
+
364
+ // This is required for ES to settle and load the indexes to return the right results
365
+ Thread . sleep ( forTimeInterval: 1.0 )
366
+
367
+ struct QueryBody : Encodable {
368
+ let queryString : QueryString
369
+
370
+ enum CodingKeys : String , CodingKey {
371
+ case queryString = " query_string "
372
+ }
373
+ }
374
+
375
+ struct QueryString : Encodable {
376
+ let query : String
377
+ }
378
+
379
+ let queryString = QueryString ( query: " Apples " )
380
+ let queryBody = QueryBody ( queryString: queryString)
381
+
382
+ let results : ESGetMultipleDocumentsResponse < SomeItem > = try client. searchDocumentsPaginated ( from: indexName, queryBody: queryBody, size: 20 , offset: 10 ) . wait ( )
383
+ XCTAssertEqual ( results. hits. hits. count, 20 )
384
+ XCTAssertTrue ( results. hits. hits. contains ( where: { $0. source. name == " Some 11 Apples " } ) )
385
+ XCTAssertTrue ( results. hits. hits. contains ( where: { $0. source. name == " Some 29 Apples " } ) )
386
+ }
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
+
331
426
// MARK: - Private
332
427
private func setupItems( ) throws {
333
428
for index in 1 ... 10 {
0 commit comments