@@ -26,8 +26,7 @@ internal static QueryContainer CombineAsMust(this QueryContainer leftContainer,
2626 var filterClauses = OrphanFilters ( leftContainer ) . EagerConcat ( OrphanFilters ( rightContainer ) ) ;
2727 var mustClauses = OrphanMusts ( leftContainer ) . EagerConcat ( OrphanMusts ( rightContainer ) ) ;
2828
29- var reuseContainer = ContainerContainingBool ( leftContainer , rightContainer ) ;
30- var container = CreateMustContainer ( mustClauses , mustNotClauses , filterClauses , reuseContainer ) ;
29+ var container = CreateMustContainer ( mustClauses , mustNotClauses , filterClauses ) ;
3130 return container ;
3231 }
3332
@@ -79,66 +78,41 @@ private static bool TryHandleBoolsWithOnlyShouldClauses(
7978 c = null ;
8079 var leftHasOnlyShoulds = leftBool . HasOnlyShouldClauses ( ) ;
8180 var rightHasOnlyShoulds = rightBool . HasOnlyShouldClauses ( ) ;
82- if ( leftHasOnlyShoulds || rightHasOnlyShoulds )
81+ if ( ! leftHasOnlyShoulds && ! rightHasOnlyShoulds ) return false ;
82+ if ( leftContainer . HoldsOnlyShouldMusts && rightHasOnlyShoulds )
8383 {
84- if ( leftContainer . HoldsOnlyShouldMusts && rightHasOnlyShoulds )
85- {
86- leftBool . Must = leftBool . Must . AddIfNotNull ( rightContainer ) ;
87- c = leftContainer ;
88- }
89- else if ( rightContainer . HoldsOnlyShouldMusts && leftHasOnlyShoulds )
90- {
91- rightBool . Must = rightBool . Must . AddIfNotNull ( leftContainer ) ;
92- c = rightContainer ;
93- }
94- else
95- {
96- //c = CreateMustContainer(leftContainer, rightContainer);
97- c = CreateMustContainer ( new Containers { leftContainer , rightContainer } , null ) ;
98- c . HoldsOnlyShouldMusts = rightHasOnlyShoulds && leftHasOnlyShoulds ;
99- }
84+ leftBool . Must = leftBool . Must . AddIfNotNull ( rightContainer ) ;
85+ c = leftContainer ;
10086 }
101- return c != null ;
87+ else if ( rightContainer . HoldsOnlyShouldMusts && leftHasOnlyShoulds )
88+ {
89+ rightBool . Must = rightBool . Must . AddIfNotNull ( leftContainer ) ;
90+ c = rightContainer ;
91+ }
92+ else
93+ {
94+ c = CreateMustContainer ( new Containers { leftContainer , rightContainer } , null ) ;
95+ c . HoldsOnlyShouldMusts = rightHasOnlyShoulds && leftHasOnlyShoulds ;
96+ }
97+ return true ;
10298 }
10399
104100 private static QueryContainer CreateMustContainer ( QueryContainer left , QueryContainer right )
105101 {
106- return CreateMustContainer ( new Containers { left , right } , ContainerContainingBool ( left , right ) ) ;
107- }
108-
109- private static QueryContainer ContainerContainingBool ( QueryContainer left , QueryContainer right )
110- {
111- var l = ( left ? . Self ( ) . Bool ? . CreatedByBoolDsl ) . GetValueOrDefault ( ) ;
112- var r = ( right ? . Self ( ) . Bool ? . CreatedByBoolDsl ) . GetValueOrDefault ( ) ;
113- return l ? left : r ? right : null ;
102+ return CreateMustContainer ( new Containers { left , right } , null ) ;
114103 }
115104
116105 private static QueryContainer CreateMustContainer ( List < QueryContainer > mustClauses , QueryContainer reuse )
117106 {
118- var existingBool = reuse ? . Self ( ) . Bool ;
119- if ( existingBool != null && existingBool . CreatedByBoolDsl )
120- {
121- existingBool . Must = mustClauses . ToListOrNullIfEmpty ( ) ;
122- return reuse ;
123- }
124- return new QueryContainer ( new BoolQuery ( createdByBoolDsl : true ) { Must = mustClauses . ToListOrNullIfEmpty ( ) } ) ;
107+ return new QueryContainer ( new BoolQuery ( ) { Must = mustClauses . ToListOrNullIfEmpty ( ) } ) ;
125108 }
126109
127110 private static QueryContainer CreateMustContainer (
128111 List < QueryContainer > mustClauses ,
129112 List < QueryContainer > mustNotClauses ,
130- List < QueryContainer > filters ,
131- QueryContainer reuse
113+ List < QueryContainer > filters
132114 )
133115 {
134- var existingBool = reuse ? . Self ( ) . Bool ;
135- if ( existingBool != null && existingBool . CreatedByBoolDsl )
136- {
137- existingBool . Must = mustClauses . ToListOrNullIfEmpty ( ) ;
138- existingBool . MustNot = mustNotClauses . ToListOrNullIfEmpty ( ) ;
139- existingBool . Filter = filters . ToListOrNullIfEmpty ( ) ;
140- return reuse ;
141- }
142116 return new QueryContainer ( new BoolQuery
143117 {
144118 Must = mustClauses . ToListOrNullIfEmpty ( ) ,
@@ -148,11 +122,8 @@ QueryContainer reuse
148122 }
149123
150124 private static bool CanMergeAnd ( this IBoolQuery boolQuery ) =>
151- //boolQuery != null && boolQuery.IsWritable && !boolQuery.Locked && !boolQuery.Should.HasAny();
152125 boolQuery != null && ! boolQuery . Locked && ! boolQuery . Should . HasAny ( ) ;
153126
154- private static bool CanMergeAnd ( this IQueryContainer container ) => container . Bool . CanMergeAnd ( ) ;
155-
156127 private static IEnumerable < QueryContainer > OrphanMusts ( QueryContainer container )
157128 {
158129 var lBoolQuery = container . Self ( ) . Bool ;
0 commit comments