Added support for corpus classes in value aggregation
Change-Id: I22f85c96f9004ea8f96d5173d1f803364daf6c50
diff --git a/t/compile/segment/aggregate_fields.t b/t/compile/segment/aggregate_fields.t
index 5343137..47deff4 100644
--- a/t/compile/segment/aggregate_fields.t
+++ b/t/compile/segment/aggregate_fields.t
@@ -141,10 +141,10 @@
is($coll->to_string,
'[aggr=[fields='.
- 'total:[author=Fritz:[1,2],Michael:[1,1],Peter:[3,4]];' .
- 'class1:[author=Fritz:[1,2],Michael:[1,1],Peter:[1,2]];' .
- 'class2:[author=Peter:[2,2]]]]' .
- '[matches=[0:0-1][1:0-1][2:0-1][2:2-3][4:0-1]]',
+ 'total:[author=Fritz:[1,2],Michael:[1,1],Peter:[3,4]];'.
+ 'class1:[author=Fritz:[1,2],Michael:[1,1],Peter:[1,2]];'.
+ 'class2:[author=Peter:[2,2]]]]'.
+ '[matches=[0:0-1!2][1:0-1!2][2:0-1!1][2:2-3!1][4:0-1!1]]',
'Stringification'
);
diff --git a/t/compile/segment/aggregate_freq.t b/t/compile/segment/aggregate_freq.t
index 2d9071f..4ce2144 100644
--- a/t/compile/segment/aggregate_freq.t
+++ b/t/compile/segment/aggregate_freq.t
@@ -120,7 +120,7 @@
# Search till the end
is($query->compile->to_string,
'[aggr=[freq=total:[3,7];class1:[2,4];class2:[1,3]]]'.
- '[matches=[0:0-1][0:0-2][1:0-1][1:0-2][1:0-3][2:0-1][2:0-2]]',
+ '[matches=[0:0-1!1][0:0-2!1][1:0-1!2][1:0-2!2][1:0-3!2][2:0-1!1][2:0-2!1]]',
'Finish');
done_testing;
diff --git a/t/compile/segment/aggregate_values.t b/t/compile/segment/aggregate_values.t
index d3dae6e..fc49928 100644
--- a/t/compile/segment/aggregate_values.t
+++ b/t/compile/segment/aggregate_values.t
@@ -9,14 +9,17 @@
my $index = Krawfish::Index->new;
ok_index($index, {
+ lang => 'de',
integer_id => 7,
integer_size => 2,
} => [qw/aa bb/], 'Add complex document');
ok_index($index, {
+ lang => 'de',
integer_id => 3,
integer_size => 3,
} => [qw/aa cc cc/], 'Add complex document');
ok_index($index, {
+ lang => 'en',
integer_id => 1,
integer_size => 2,
} => [qw/aa bb/], 'Add complex document');
@@ -27,7 +30,9 @@
my $qb = $koral->query_builder;
my $mb = $koral->compilation_builder;
-$koral->query($qb->token('bb'));
+$koral->query(
+ $qb->token('bb')
+);
$koral->compilation(
$mb->aggregate(
@@ -55,9 +60,10 @@
# This is a query that is fine to be send to nodes
is($koral_query->to_string(1),
- "aggr(values:[#1,#3]:filter(#8,[1]))",
+ "aggr(values:[#1,#3]:filter(#10,[1]))",
'Stringification');
+
ok(my $query = $koral_query->optimize($index->segment), 'Optimize');
# may very well be renamed to search()
@@ -66,14 +72,12 @@
'Inflate fields');
is($result->to_string,
- '[aggr=[values='.
+ '[aggr=[values=total:['.
'id:[sum:8,freq:2,min:1,max:7,avg:4];'.
- 'size:[sum:4,freq:2,min:2,max:2,avg:2]]'.
- ']'.
+ 'size:[sum:4,freq:2,min:2,max:2,avg:2]]]]' .
'[matches=[0:1-2][2:1-2]]',
'Stringification');
-
$koral = Krawfish::Koral->new;
$koral->query($qb->token($qb->bool_or('bb','cc')));
$koral->compilation($mb->aggregate($mb->a_values('size')));
@@ -88,11 +92,54 @@
# This may differ from system to system
is($coll->to_string,
- '[aggr=[values=size:[sum:7,freq:3,min:2,max:3,avg:2.33333333333333]]]'.
+ '[aggr=[values=total:[size:[sum:7,freq:3,min:2,max:3,avg:2.33333333333333]]]]'.
'[matches=[0:1-2][1:1-2][1:2-3][2:1-2]]',
'Stringification');
-diag 'Test with corpus classes';
+
+
+# Test with corpus classes
+ok_index($index, {
+ lang => 'en',
+ integer_id => 1,
+ integer_size => 5,
+} => [qw/aa bb aa bb/], 'Add complex document');
+
+$koral = Krawfish::Koral->new;
+my $cb = $koral->corpus_builder;
+
+$koral->query(
+ $qb->token('bb')
+);
+
+$koral->corpus(
+ $cb->bool_or(
+ $cb->class($cb->string('lang')->eq('de'), 1),
+ $cb->class($cb->string('lang')->eq('en'), 2)
+ )
+);
+
+$koral->compilation($mb->aggregate($mb->a_values('size')));
+
+ok($query = $koral->to_query, 'Create query');
+
+is($query->to_string,
+ "aggr(values:['size']:filter(bb,{1:lang=de}|{2:lang=en}))",
+ 'Stringification');
+
+ok($coll = $query->identify($index->dict), 'Identify');
+ok($coll = $coll->optimize($index->segment), 'Optimize');
+ok($coll = $coll->compile, 'Compile');
+ok($coll = $coll->inflate($index->dict), 'Inflate');
+
+is($coll->to_string,
+ '[aggr=[values='.
+ 'total:[size:[sum:9,freq:3,min:2,max:5,avg:3]];'.
+ 'class1:[size:[sum:2,freq:1,min:2,max:2,avg:2]];'.
+ 'class2:[size:[sum:7,freq:2,min:2,max:5,avg:3.5]]]]'.
+ '[matches=[0:1-2!1][2:1-2!2][3:1-2!2][3:3-4!2]]',
+ 'Stringification');
+
done_testing;
__END__
diff --git a/t/compile/segment/enrich_corpus_classes.t b/t/compile/segment/enrich_corpus_classes.t
index 27259aa..f40b5a1 100644
--- a/t/compile/segment/enrich_corpus_classes.t
+++ b/t/compile/segment/enrich_corpus_classes.t
@@ -87,17 +87,17 @@
ok($query->next, 'Next');
is($query->current->to_string, '[0:1-2!1,2]', 'Current object');
-is($query->current_match->to_string, "[0:1-2|fields:#1=#2|inCorpus:1,2]",
+is($query->current_match->to_string, "[0:1-2!1,2|fields:#1=#2|inCorpus:1,2]",
'Current match');
ok($query->next, 'Next');
is($query->current->to_string, '[1:1-2!2]', 'Current object');
-is($query->current_match->to_string, "[1:1-2|fields:#1=#13|inCorpus:2]",
+is($query->current_match->to_string, "[1:1-2!2|fields:#1=#13|inCorpus:2]",
'Current match');
ok($query->next, 'Next');
is($query->current->to_string, '[2:0-1!1]', 'Current object');
-is($query->current_match->to_string, "[2:0-1|fields:#1=#17|inCorpus:1]",
+is($query->current_match->to_string, "[2:0-1!1|fields:#1=#17|inCorpus:1]",
'Current match');
ok(!$query->next, 'Next');