21
21
import com .linkedin .metadata .models .EntitySpec ;
22
22
import com .linkedin .metadata .models .annotation .SearchableAnnotation ;
23
23
import com .linkedin .metadata .models .registry .EntityRegistry ;
24
+ import com .linkedin .metadata .query .SearchFlags ;
24
25
import com .linkedin .metadata .query .filter .Filter ;
25
26
import com .linkedin .metadata .search .elasticsearch .query .request .SearchRequestHandler ;
26
27
import com .linkedin .metadata .search .utils .ESUtils ;
34
35
import java .util .Collections ;
35
36
import java .util .List ;
36
37
import java .util .Map ;
38
+ import java .util .Optional ;
37
39
import java .util .Set ;
38
40
import java .util .stream .Collectors ;
39
41
import javax .annotation .Nonnull ;
@@ -399,14 +401,15 @@ public BrowseResultV2 browseV2(
399
401
@ Nullable Filter filter ,
400
402
@ Nonnull String input ,
401
403
int start ,
402
- int count ) {
404
+ int count ,
405
+ @ Nullable SearchFlags searchFlags ) {
403
406
try {
404
407
final SearchResponse groupsResponse ;
405
408
try (Timer .Context ignored = MetricUtils .timer (this .getClass (), "esGroupSearch" ).time ()) {
406
409
final String finalInput = input .isEmpty () ? "*" : input ;
407
410
groupsResponse =
408
411
client .search (
409
- constructGroupsSearchRequestV2 (entityName , path , filter , finalInput ),
412
+ constructGroupsSearchRequestV2 (entityName , path , filter , finalInput , searchFlags ),
410
413
RequestOptions .DEFAULT );
411
414
}
412
415
@@ -435,7 +438,8 @@ public BrowseResultV2 browseV2(
435
438
@ Nullable Filter filter ,
436
439
@ Nonnull String input ,
437
440
int start ,
438
- int count ) {
441
+ int count ,
442
+ @ Nullable SearchFlags searchFlags ) {
439
443
try {
440
444
final SearchResponse groupsResponse ;
441
445
@@ -444,7 +448,7 @@ public BrowseResultV2 browseV2(
444
448
groupsResponse =
445
449
client .search (
446
450
constructGroupsSearchRequestBrowseAcrossEntities (
447
- entities , path , filter , finalInput ),
451
+ entities , path , filter , finalInput , searchFlags ),
448
452
RequestOptions .DEFAULT );
449
453
}
450
454
@@ -472,7 +476,8 @@ private SearchRequest constructGroupsSearchRequestV2(
472
476
@ Nonnull String entityName ,
473
477
@ Nonnull String path ,
474
478
@ Nullable Filter filter ,
475
- @ Nonnull String input ) {
479
+ @ Nonnull String input ,
480
+ @ Nullable SearchFlags searchFlags ) {
476
481
final String indexName = indexConvention .getIndexName (entityRegistry .getEntitySpec (entityName ));
477
482
final SearchRequest searchRequest = new SearchRequest (indexName );
478
483
final SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder ();
@@ -482,7 +487,8 @@ private SearchRequest constructGroupsSearchRequestV2(
482
487
entityName ,
483
488
path ,
484
489
SearchUtil .transformFilterForEntities (filter , indexConvention ),
485
- input ));
490
+ input ,
491
+ searchFlags ));
486
492
searchSourceBuilder .aggregation (buildAggregationsV2 (path ));
487
493
searchRequest .source (searchSourceBuilder );
488
494
return searchRequest ;
@@ -493,7 +499,8 @@ private SearchRequest constructGroupsSearchRequestBrowseAcrossEntities(
493
499
@ Nonnull List <String > entities ,
494
500
@ Nonnull String path ,
495
501
@ Nullable Filter filter ,
496
- @ Nonnull String input ) {
502
+ @ Nonnull String input ,
503
+ @ Nullable SearchFlags searchFlags ) {
497
504
498
505
List <EntitySpec > entitySpecs =
499
506
entities .stream ().map (entityRegistry ::getEntitySpec ).collect (Collectors .toList ());
@@ -509,7 +516,8 @@ private SearchRequest constructGroupsSearchRequestBrowseAcrossEntities(
509
516
entitySpecs ,
510
517
path ,
511
518
SearchUtil .transformFilterForEntities (filter , indexConvention ),
512
- input ));
519
+ input ,
520
+ searchFlags ));
513
521
searchSourceBuilder .aggregation (buildAggregationsV2 (path ));
514
522
searchRequest .source (searchSourceBuilder );
515
523
return searchRequest ;
@@ -537,15 +545,18 @@ private QueryBuilder buildQueryStringV2(
537
545
@ Nonnull String entityName ,
538
546
@ Nonnull String path ,
539
547
@ Nullable Filter filter ,
540
- @ Nonnull String input ) {
548
+ @ Nonnull String input ,
549
+ @ Nullable SearchFlags searchFlags ) {
550
+ SearchFlags finalSearchFlags =
551
+ Optional .ofNullable (searchFlags ).orElse (new SearchFlags ().setFulltext (true ));
541
552
final int browseDepthVal = getPathDepthV2 (path );
542
553
543
554
final BoolQueryBuilder queryBuilder = QueryBuilders .boolQuery ();
544
555
545
556
EntitySpec entitySpec = entityRegistry .getEntitySpec (entityName );
546
557
QueryBuilder query =
547
558
SearchRequestHandler .getBuilder (entitySpec , searchConfiguration , customSearchConfiguration )
548
- .getQuery (input , false );
559
+ .getQuery (input , Boolean . TRUE . equals ( finalSearchFlags . isFulltext ()) );
549
560
queryBuilder .must (query );
550
561
551
562
filterSoftDeletedByDefault (filter , queryBuilder );
@@ -567,14 +578,17 @@ private QueryBuilder buildQueryStringBrowseAcrossEntities(
567
578
@ Nonnull List <EntitySpec > entitySpecs ,
568
579
@ Nonnull String path ,
569
580
@ Nullable Filter filter ,
570
- @ Nonnull String input ) {
581
+ @ Nonnull String input ,
582
+ @ Nullable SearchFlags searchFlags ) {
583
+ SearchFlags finalSearchFlags =
584
+ Optional .ofNullable (searchFlags ).orElse (new SearchFlags ().setFulltext (true ));
571
585
final int browseDepthVal = getPathDepthV2 (path );
572
586
573
587
final BoolQueryBuilder queryBuilder = QueryBuilders .boolQuery ();
574
588
575
589
QueryBuilder query =
576
590
SearchRequestHandler .getBuilder (entitySpecs , searchConfiguration , customSearchConfiguration )
577
- .getQuery (input , false );
591
+ .getQuery (input , Boolean . TRUE . equals ( finalSearchFlags . isFulltext ()) );
578
592
queryBuilder .must (query );
579
593
580
594
if (!path .isEmpty ()) {
0 commit comments