11package datawave .query .transformer .annotation ;
22
3+ import static datawave .query .transformer .annotation .AllHitsFactory .TERM_HIT_COMPARATOR ;
34import static org .junit .jupiter .api .Assertions .assertEquals ;
45import static org .junit .jupiter .api .Assertions .assertNull ;
56import static org .junit .jupiter .api .Assertions .assertThrows ;
67
78import java .util .List ;
9+ import java .util .Set ;
810import java .util .TreeMap ;
11+ import java .util .TreeSet ;
912
1013import org .junit .jupiter .api .BeforeEach ;
1114import org .junit .jupiter .api .Test ;
@@ -107,8 +110,7 @@ public void singleHitOnSingleValueTest() throws AllHitsException, JsonProcessing
107110 expected .setMaxTermHitConfidence (.3f );
108111 AllHit hit1 = new AllHit ();
109112 hit1 .setConfidence (.3f );
110- hit1 .getOneBestContext ().add (getTerm ("hit" , .3f , 3f , 4f ));
111- hit1 .getTermHits ().add (getTermHit ("hit" , .3f , 3f , 4f ));
113+ hit1 .getContext ().add (addTermHit (getTerm ("hit" , .3f , 3f , 4f ), getTermHit ("hit" , .3f , true )));
112114 expected .getKeywordResultList ().add (hit1 );
113115
114116 assertEquals (objectMapper .writeValueAsString (expected ), objectMapper .writeValueAsString (result ));
@@ -130,10 +132,11 @@ public void multipleHitOnSameTermTest() throws AllHitsException, JsonProcessingE
130132 expected .setMaxTermHitConfidence (.6f );
131133 AllHit hit1 = new AllHit ();
132134 hit1 .setConfidence (.6f );
133- hit1 .getOneBestContext ().add (getTerm ("hit2" , .6f , 3f , 4f ));
134- hit1 .getTermHits ().add (getTermHit ("hit1" , .3f , 3f , 4f ));
135- hit1 .getTermHits ().add (getTermHit ("hit2" , .6f , 3f , 4f ));
136- hit1 .getTermHits ().add (getTermHit ("hit3" , .4f , 3f , 4f ));
135+ Term t = getTerm ("hit2" , .6f , 3f , 4f );
136+ addTermHit (t , getTermHit ("hit1" , .3f , false ));
137+ addTermHit (t , getTermHit ("hit2" , .6f , true ));
138+ addTermHit (t , getTermHit ("hit3" , .4f , false ));
139+ hit1 .getContext ().add (t );
137140 expected .getKeywordResultList ().add (hit1 );
138141
139142 assertEquals (objectMapper .writeValueAsString (expected ), objectMapper .writeValueAsString (result ));
@@ -156,12 +159,10 @@ public void doubleHitOnMultipleTermsTest() throws AllHitsException, JsonProcessi
156159 expected .setMaxTermHitConfidence (.6f );
157160 AllHit hit1 = new AllHit ();
158161 hit1 .setConfidence (.3f );
159- hit1 .getOneBestContext ().add (getTerm ("term1" , .6f , 3f , 4f ));
160- hit1 .getTermHits ().add (getTermHit ("hit1" , .3f , 3f , 4f ));
162+ hit1 .getContext ().add (addTermHit (getTerm ("term1" , .6f , 3f , 4f ), getTermHit ("hit1" , .3f , false )));
161163 AllHit hit2 = new AllHit ();
162164 hit2 .setConfidence (.6f );
163- hit2 .getOneBestContext ().add (getTerm ("hit2" , .6f , 4f , 5f ));
164- hit2 .getTermHits ().add (getTermHit ("hit2" , .6f , 4f , 5f ));
165+ hit2 .getContext ().add (addTermHit (getTerm ("hit2" , .6f , 4f , 5f ), getTermHit ("hit2" , .6f , true )));
165166 expected .getKeywordResultList ().add (hit1 );
166167 expected .getKeywordResultList ().add (hit2 );
167168
@@ -185,12 +186,10 @@ public void doubleHitOnMultipleTermsReverseOrderToVerifyAggregateConfidenceTest(
185186 expected .setMaxTermHitConfidence (.6f );
186187 AllHit hit1 = new AllHit ();
187188 hit1 .setConfidence (.3f );
188- hit1 .getOneBestContext ().add (getTerm ("term1" , .6f , 4f , 5f ));
189- hit1 .getTermHits ().add (getTermHit ("hit1" , .3f , 4f , 5f ));
189+ hit1 .getContext ().add (addTermHit (getTerm ("term1" , .6f , 4f , 5f ), getTermHit ("hit1" , .3f , false )));
190190 AllHit hit2 = new AllHit ();
191191 hit2 .setConfidence (.6f );
192- hit2 .getOneBestContext ().add (getTerm ("hit2" , .6f , 3f , 4f ));
193- hit2 .getTermHits ().add (getTermHit ("hit2" , .6f , 3f , 4f ));
192+ hit2 .getContext ().add (addTermHit (getTerm ("hit2" , .6f , 3f , 4f ), getTermHit ("hit2" , .6f , true )));
194193 expected .getKeywordResultList ().add (hit2 );
195194 expected .getKeywordResultList ().add (hit1 );
196195
@@ -210,13 +209,12 @@ public void hitWithContextTest() throws AllHitsException, JsonProcessingExceptio
210209 expected .setMaxTermHitConfidence (.3f );
211210 AllHit hit1 = new AllHit ();
212211 hit1 .setConfidence (.3f );
213- hit1 .getOneBestContext ().add (getTerm ("a2" , .5f , 1f , 2f ));
214- hit1 .getOneBestContext ().add (getTerm ("b2" , .6f , 2f , 3f ));
215- hit1 .getOneBestContext ().add (getTerm ("max" , .7f , 3f , 4f ));
216- hit1 .getOneBestContext ().add (getTerm ("c2" , .8f , 4f , 5f ));
217- hit1 .getOneBestContext ().add (getTerm ("d1" , .2f , 5f , 6f ));
212+ hit1 .getContext ().add (getTerm ("a2" , .5f , 1f , 2f ));
213+ hit1 .getContext ().add (getTerm ("b2" , .6f , 2f , 3f ));
214+ hit1 .getContext ().add (addTermHit ( getTerm ("max" , .7f , 3f , 4f ), getTermHit ( "hit" , .3f , false ) ));
215+ hit1 .getContext ().add (getTerm ("c2" , .8f , 4f , 5f ));
216+ hit1 .getContext ().add (getTerm ("d1" , .2f , 5f , 6f ));
218217
219- hit1 .getTermHits ().add (getTermHit ("hit" , .3f , 3f , 4f ));
220218 expected .getKeywordResultList ().add (hit1 );
221219
222220 assertEquals (objectMapper .writeValueAsString (expected ), objectMapper .writeValueAsString (result ));
@@ -238,14 +236,12 @@ public void overlappingHitContextTest() throws AllHitsException, JsonProcessingE
238236 expected .setMaxTermHitConfidence (.8f );
239237 AllHit allHit1 = new AllHit ();
240238 allHit1 .setConfidence (.8f );
241- allHit1 .getOneBestContext ().add (getTerm ("a2" , .5f , 1f , 2f ));
242- allHit1 .getOneBestContext ().add (getTerm ("b2" , .6f , 2f , 3f ));
243- allHit1 .getOneBestContext ().add (getTerm ("max" , .7f , 3f , 4f ));
244- allHit1 .getOneBestContext ().add (getTerm ("c2" , .8f , 4f , 5f ));
245- allHit1 .getOneBestContext ().add (getTerm ("d1" , .2f , 5f , 6f ));
246-
247- allHit1 .getTermHits ().add (getTermHit ("hit" , .3f , 3f , 4f ));
248- allHit1 .getTermHits ().add (getTermHit ("c2" , .8f , 4f , 5f ));
239+ allHit1 .getContext ().add (getTerm ("a2" , .5f , 1f , 2f ));
240+ allHit1 .getContext ().add (getTerm ("b2" , .6f , 2f , 3f ));
241+ allHit1 .getContext ().add (addTermHit (getTerm ("max" , .7f , 3f , 4f ), getTermHit ("hit" , .3f , false )));
242+ allHit1 .getContext ().add (addTermHit (getTerm ("c2" , .8f , 4f , 5f ), getTermHit ("c2" , .8f , true )));
243+ allHit1 .getContext ().add (getTerm ("d1" , .2f , 5f , 6f ));
244+
249245 expected .getKeywordResultList ().add (allHit1 );
250246
251247 assertEquals (objectMapper .writeValueAsString (expected ), objectMapper .writeValueAsString (result ));
@@ -267,14 +263,12 @@ public void overlappingBoundaryHitContextTest() throws AllHitsException, JsonPro
267263 expected .setMaxTermHitConfidence (.8f );
268264 AllHit allHit1 = new AllHit ();
269265 allHit1 .setConfidence (.8f );
270- allHit1 .getOneBestContext ().add (getTerm ("a2" , .5f , 1f , 2f ));
271- allHit1 .getOneBestContext ().add (getTerm ("b2" , .6f , 2f , 3f ));
272- allHit1 .getOneBestContext ().add (getTerm ("max" , .7f , 3f , 4f ));
273- allHit1 .getOneBestContext ().add (getTerm ("c2" , .8f , 4f , 5f ));
274- allHit1 .getOneBestContext ().add (getTerm ("d1" , .2f , 5f , 6f ));
275-
276- allHit1 .getTermHits ().add (getTermHit ("hit" , .3f , 3f , 4f ));
277- allHit1 .getTermHits ().add (getTermHit ("c2" , .8f , 4f , 5f ));
266+ allHit1 .getContext ().add (getTerm ("a2" , .5f , 1f , 2f ));
267+ allHit1 .getContext ().add (getTerm ("b2" , .6f , 2f , 3f ));
268+ allHit1 .getContext ().add (addTermHit (getTerm ("max" , .7f , 3f , 4f ), getTermHit ("hit" , .3f , false )));
269+ allHit1 .getContext ().add (addTermHit (getTerm ("c2" , .8f , 4f , 5f ), getTermHit ("c2" , .8f , true )));
270+ allHit1 .getContext ().add (getTerm ("d1" , .2f , 5f , 6f ));
271+
278272 expected .getKeywordResultList ().add (allHit1 );
279273
280274 assertEquals (objectMapper .writeValueAsString (expected ), objectMapper .writeValueAsString (result ));
@@ -297,21 +291,18 @@ public void overlappingContextButNotHitTest() throws AllHitsException, JsonProce
297291
298292 AllHit allHit1 = new AllHit ();
299293 allHit1 .setConfidence (.3f );
300- allHit1 .getOneBestContext ().add (getTerm ("a2" , .5f , 1f , 2f ));
301- allHit1 .getOneBestContext ().add (getTerm ("b2" , .6f , 2f , 3f ));
302- allHit1 .getOneBestContext ().add (getTerm ("max" , .7f , 3f , 4f ));
303- allHit1 .getOneBestContext ().add (getTerm ("c2" , .8f , 4f , 5f ));
304-
305- allHit1 .getTermHits ().add (getTermHit ("hit" , .3f , 3f , 4f ));
294+ allHit1 .getContext ().add (getTerm ("a2" , .5f , 1f , 2f ));
295+ allHit1 .getContext ().add (getTerm ("b2" , .6f , 2f , 3f ));
296+ allHit1 .getContext ().add (addTermHit (getTerm ("max" , .7f , 3f , 4f ), getTermHit ("hit" , .3f , false )));
297+ allHit1 .getContext ().add (getTerm ("c2" , .8f , 4f , 5f ));
306298
307299 expected .getKeywordResultList ().add (allHit1 );
308300
309301 AllHit allHit2 = new AllHit ();
310302 allHit2 .setConfidence (.2f );
311- allHit2 .getOneBestContext ().add (getTerm ("c2" , .8f , 4f , 5f ));
312- allHit2 .getOneBestContext ().add (getTerm ("d1" , .2f , 5f , 6f ));
303+ allHit2 .getContext ().add (getTerm ("c2" , .8f , 4f , 5f ));
304+ allHit2 .getContext ().add (addTermHit ( getTerm ("d1" , .2f , 5f , 6f ), getTermHit ( "d1" , .2f , true ) ));
313305
314- allHit2 .getTermHits ().add (getTermHit ("d1" , .2f , 5f , 6f ));
315306 expected .getKeywordResultList ().add (allHit2 );
316307
317308 assertEquals (objectMapper .writeValueAsString (expected ), objectMapper .writeValueAsString (result ));
@@ -338,22 +329,18 @@ public void overlappingContextAddedAtMostOnceTest() throws AllHitsException, Jso
338329
339330 AllHit allHit1 = new AllHit ();
340331 allHit1 .setConfidence (.3f );
341- allHit1 .getOneBestContext ().add (getTerm ("a2" , .5f , 1f , 2f ));
342- allHit1 .getOneBestContext ().add (getTerm ("b2" , .6f , 2f , 3f ));
343- allHit1 .getOneBestContext ().add (getTerm ("max" , .7f , 3f , 4f ));
344- allHit1 .getOneBestContext ().add (getTerm ("c2" , .8f , 4f , 5f ));
345-
346- allHit1 .getTermHits ().add (getTermHit ("a1" , .1f , 1f , 2f ));
347- allHit1 .getTermHits ().add (getTermHit ("hit" , .3f , 3f , 4f ));
332+ allHit1 .getContext ().add (addTermHit (getTerm ("a2" , .5f , 1f , 2f ), getTermHit ("a1" , .1f , false )));
333+ allHit1 .getContext ().add (getTerm ("b2" , .6f , 2f , 3f ));
334+ allHit1 .getContext ().add (addTermHit (getTerm ("max" , .7f , 3f , 4f ), getTermHit ("hit" , .3f , false )));
335+ allHit1 .getContext ().add (getTerm ("c2" , .8f , 4f , 5f ));
348336
349337 expected .getKeywordResultList ().add (allHit1 );
350338
351339 AllHit allHit2 = new AllHit ();
352340 allHit2 .setConfidence (.2f );
353- allHit2 .getOneBestContext ().add (getTerm ("c2" , .8f , 4f , 5f ));
354- allHit2 .getOneBestContext ().add (getTerm ("d1" , .2f , 5f , 6f ));
341+ allHit2 .getContext ().add (getTerm ("c2" , .8f , 4f , 5f ));
342+ allHit2 .getContext ().add (addTermHit ( getTerm ("d1" , .2f , 5f , 6f ), getTermHit ( "d1" , .2f , true ) ));
355343
356- allHit2 .getTermHits ().add (getTermHit ("d1" , .2f , 5f , 6f ));
357344 expected .getKeywordResultList ().add (allHit2 );
358345
359346 assertEquals (objectMapper .writeValueAsString (expected ), objectMapper .writeValueAsString (result ));
@@ -382,17 +369,29 @@ private Term getTerm(String label, float confidence, float start, float end) {
382369 Term term = new Term ();
383370 term .setLabel (label );
384371 term .setConfidence (confidence );
372+ term .setHits (new TreeSet <>(TERM_HIT_COMPARATOR ));
385373 term .getTimeRange ().setStartTime (start );
386374 term .getTimeRange ().setEndTime (end );
387375 return term ;
388376 }
389377
390- private TermHit getTermHit (String label , float confidence , float start , float end ) {
378+ private Term addTermHit (Term term , TermHit termHit ) {
379+ Set <TermHit > hits = term .getHits ();
380+ if (hits == null ) {
381+ hits = new TreeSet <>(TERM_HIT_COMPARATOR );
382+ term .setHits (hits );
383+ }
384+
385+ hits .add (termHit );
386+
387+ return term ;
388+ }
389+
390+ private TermHit getTermHit (String label , float confidence , boolean oneBest ) {
391391 TermHit termHit = new TermHit ();
392392 termHit .setConfidence (confidence );
393- termHit .setTermLabel (label );
394- termHit .getTimeRange ().setStartTime (start );
395- termHit .getTimeRange ().setEndTime (end );
393+ termHit .setLabel (label );
394+ termHit .setOneBest (oneBest );
396395
397396 return termHit ;
398397 }
0 commit comments