@@ -6,6 +6,7 @@ package elastic
6
6
7
7
import (
8
8
"context"
9
+ "errors"
9
10
"fmt"
10
11
"net/url"
11
12
)
@@ -214,7 +215,7 @@ func (s *ReindexService) Validate() error {
214
215
if s .source == nil {
215
216
invalid = append (invalid , "Source" )
216
217
} else {
217
- if len (s .source .indices ) == 0 {
218
+ if len (s .source .request . indices ) == 0 {
218
219
invalid = append (invalid , "Source.Index" )
219
220
}
220
221
}
@@ -353,85 +354,124 @@ func (s *ReindexService) DoAsync(ctx context.Context) (*StartTaskResult, error)
353
354
354
355
// ReindexSource specifies the source of a Reindex process.
355
356
type ReindexSource struct {
356
- searchType string // default in ES is "query_then_fetch"
357
- indices []string
358
- types []string
359
- routing * string
360
- preference * string
361
- requestCache * bool
362
- scroll string
363
- query Query
364
- sorts []SortInfo
365
- sorters []Sorter
366
- searchSource * SearchSource
367
- remoteInfo * ReindexRemoteInfo
357
+ searchType string // default in ES is "query_then_fetch"
358
+ request * SearchRequest
359
+ /*
360
+ indices []string
361
+ types []string
362
+ routing *string
363
+ preference *string
364
+ requestCache *bool
365
+ scroll string
366
+ query Query
367
+ sorts []SortInfo
368
+ sorters []Sorter
369
+ searchSource *SearchSource
370
+ */
371
+ remoteInfo * ReindexRemoteInfo
368
372
}
369
373
370
374
// NewReindexSource creates a new ReindexSource.
371
375
func NewReindexSource () * ReindexSource {
372
- return & ReindexSource {}
376
+ return & ReindexSource {
377
+ request : NewSearchRequest (),
378
+ }
379
+ }
380
+
381
+ // Request specifies the search request used for source.
382
+ func (r * ReindexSource ) Request (request * SearchRequest ) * ReindexSource {
383
+ if request == nil {
384
+ r .request = NewSearchRequest ()
385
+ } else {
386
+ r .request = request
387
+ }
388
+ return r
373
389
}
374
390
375
391
// SearchType is the search operation type. Possible values are
376
392
// "query_then_fetch" and "dfs_query_then_fetch".
377
393
func (r * ReindexSource ) SearchType (searchType string ) * ReindexSource {
378
- r .searchType = searchType
394
+ r .request = r . request . SearchType ( searchType )
379
395
return r
380
396
}
381
397
382
398
func (r * ReindexSource ) SearchTypeDfsQueryThenFetch () * ReindexSource {
383
- return r .SearchType ("dfs_query_then_fetch" )
399
+ r .request = r .request .SearchType ("dfs_query_then_fetch" )
400
+ return r
384
401
}
385
402
386
403
func (r * ReindexSource ) SearchTypeQueryThenFetch () * ReindexSource {
387
- return r .SearchType ("query_then_fetch" )
404
+ r .request = r .request .SearchType ("query_then_fetch" )
405
+ return r
388
406
}
389
407
390
408
func (r * ReindexSource ) Index (indices ... string ) * ReindexSource {
391
- r .indices = append ( r . indices , indices ... )
409
+ r .request = r . request . Index ( indices ... )
392
410
return r
393
411
}
394
412
395
413
func (r * ReindexSource ) Type (types ... string ) * ReindexSource {
396
- r .types = append ( r . types , types ... )
414
+ r .request = r . request . Type ( types ... )
397
415
return r
398
416
}
399
417
400
418
func (r * ReindexSource ) Preference (preference string ) * ReindexSource {
401
- r .preference = & preference
419
+ r .request = r . request . Preference ( preference )
402
420
return r
403
421
}
404
422
405
423
func (r * ReindexSource ) RequestCache (requestCache bool ) * ReindexSource {
406
- r .requestCache = & requestCache
424
+ r .request = r . request . RequestCache ( requestCache )
407
425
return r
408
426
}
409
427
410
428
func (r * ReindexSource ) Scroll (scroll string ) * ReindexSource {
411
- r .scroll = scroll
429
+ r .request = r . request . Scroll ( scroll )
412
430
return r
413
431
}
414
432
415
433
func (r * ReindexSource ) Query (query Query ) * ReindexSource {
416
- r .query = query
434
+ r .request = r . request . Query ( query )
417
435
return r
418
436
}
419
437
420
438
// Sort adds a sort order.
421
439
func (r * ReindexSource ) Sort (field string , ascending bool ) * ReindexSource {
422
- r .sorts = append ( r . sorts , SortInfo { Field : field , Ascending : ascending } )
440
+ r .request = r . request . Sort ( field , ascending )
423
441
return r
424
442
}
425
443
426
444
// SortWithInfo adds a sort order.
427
445
func (r * ReindexSource ) SortWithInfo (info SortInfo ) * ReindexSource {
428
- r .sorts = append ( r . sorts , info )
446
+ r .request = r . request . SortWithInfo ( info )
429
447
return r
430
448
}
431
449
432
450
// SortBy adds a sort order.
433
451
func (r * ReindexSource ) SortBy (sorter ... Sorter ) * ReindexSource {
434
- r .sorters = append (r .sorters , sorter ... )
452
+ r .request = r .request .SortBy (sorter ... )
453
+ return r
454
+ }
455
+
456
+ // FetchSource indicates whether the response should contain the stored
457
+ // _source for every hit.
458
+ func (r * ReindexSource ) FetchSource (fetchSource bool ) * ReindexSource {
459
+ r .request = r .request .FetchSource (fetchSource )
460
+ return r
461
+ }
462
+
463
+ // FetchSourceIncludeExclude specifies that _source should be returned
464
+ // with each hit, where "include" and "exclude" serve as a simple wildcard
465
+ // matcher that gets applied to its fields
466
+ // (e.g. include := []string{"obj1.*","obj2.*"}, exclude := []string{"description.*"}).
467
+ func (r * ReindexSource ) FetchSourceIncludeExclude (include , exclude []string ) * ReindexSource {
468
+ r .request = r .request .FetchSourceIncludeExclude (include , exclude )
469
+ return r
470
+ }
471
+
472
+ // FetchSourceContext indicates how the _source should be fetched.
473
+ func (r * ReindexSource ) FetchSourceContext (fsc * FetchSourceContext ) * ReindexSource {
474
+ r .request = r .request .FetchSourceContext (fsc )
435
475
return r
436
476
}
437
477
@@ -443,84 +483,35 @@ func (r *ReindexSource) RemoteInfo(ri *ReindexRemoteInfo) *ReindexSource {
443
483
444
484
// Source returns a serializable JSON request for the request.
445
485
func (r * ReindexSource ) Source () (interface {}, error ) {
446
- source := make (map [string ]interface {})
447
-
448
- if r .query != nil {
449
- src , err := r .query .Source ()
450
- if err != nil {
451
- return nil , err
452
- }
453
- source ["query" ] = src
454
- } else if r .searchSource != nil {
455
- src , err := r .searchSource .Source ()
456
- if err != nil {
457
- return nil , err
458
- }
459
- source ["source" ] = src
486
+ src , err := r .request .sourceAsMap ()
487
+ if err != nil {
488
+ return nil , err
460
489
}
461
-
462
- if r . searchType != "" {
463
- source [ "search_type" ] = r . searchType
490
+ source , ok := src .( map [ string ] interface {})
491
+ if ! ok {
492
+ return nil , errors . New ( "unable to use SearchRequest as map[string]interface{}" )
464
493
}
465
494
466
- switch len (r .indices ) {
467
- case 0 :
495
+ switch len (r .request .indices ) {
468
496
case 1 :
469
- source ["index" ] = r .indices [0 ]
497
+ source ["index" ] = r .request . indices [0 ]
470
498
default :
471
- source ["index" ] = r .indices
499
+ source ["index" ] = r .request . indices
472
500
}
473
-
474
- switch len (r .types ) {
501
+ switch len (r .request .types ) {
475
502
case 0 :
476
503
case 1 :
477
- source ["type" ] = r .types [0 ]
504
+ source ["type" ] = r .request . types [0 ]
478
505
default :
479
- source ["type" ] = r .types
480
- }
481
-
482
- if r .preference != nil && * r .preference != "" {
483
- source ["preference" ] = * r .preference
506
+ source ["type" ] = r .request .types
484
507
}
485
-
486
- if r .requestCache != nil {
487
- source ["request_cache" ] = fmt .Sprintf ("%v" , * r .requestCache )
488
- }
489
-
490
- if r .scroll != "" {
491
- source ["scroll" ] = r .scroll
492
- }
493
-
494
508
if r .remoteInfo != nil {
495
509
src , err := r .remoteInfo .Source ()
496
510
if err != nil {
497
511
return nil , err
498
512
}
499
513
source ["remote" ] = src
500
514
}
501
-
502
- if len (r .sorters ) > 0 {
503
- var sortarr []interface {}
504
- for _ , sorter := range r .sorters {
505
- src , err := sorter .Source ()
506
- if err != nil {
507
- return nil , err
508
- }
509
- sortarr = append (sortarr , src )
510
- }
511
- source ["sort" ] = sortarr
512
- } else if len (r .sorts ) > 0 {
513
- var sortarr []interface {}
514
- for _ , sort := range r .sorts {
515
- src , err := sort .Source ()
516
- if err != nil {
517
- return nil , err
518
- }
519
- sortarr = append (sortarr , src )
520
- }
521
- source ["sort" ] = sortarr
522
- }
523
-
524
515
return source , nil
525
516
}
526
517
0 commit comments