Improve filtering on simple queries by grouping simple queries in or-queries

Change-Id: I5c685b6584a5409ea8c8060f70bf8968e63d2b77
diff --git a/t/query/filter.t b/t/query/filter.t
index 7b97672..b299fed 100644
--- a/t/query/filter.t
+++ b/t/query/filter.t
@@ -52,6 +52,7 @@
 
 
 # Check filter optimization
+# On filtering level
 ok($term = $qb->bool_or(
   $qb->term('aa'),
   $qb->term('bb'),
@@ -63,9 +64,38 @@
 ok($query = $qb->filter_by($term, $corpus), 'Filter by corpus');
 is($query->to_string, "filter(aa|bb|(bb|cc),genre=novel)", 'Stringification');
 ok($query_plan = $query->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Create query plan');
+
+# Non-complex queries are filtered only once
 is($query_plan->to_string, "filter(or(or(#10,#8),#6),#2)", 'Stringification');
 
 
+# Check filter optimization
+# On optimization level
+ok($term = $qb->bool_or(
+  $qb->term('cc'),
+  $qb->seq(
+    $qb->term('aa'),
+    $qb->term('aa'),
+  ),
+  $qb->term('bb'),
+  $qb->seq(
+    $qb->term('aa'),
+    $qb->term('bb'),
+  ),
+  $qb->term('aa'),
+), 'Create new term query');
+ok($query = $qb->filter_by($term, $corpus), 'Filter by corpus');
+
+# Order here is just alphabetical
+is($query->to_string, "filter((aa)|(aaaa)|(aabb)|(bb)|(cc),genre=novel)", 'Stringification');
+ok($query_plan = $query->normalize->finalize->identify($index->dict)->optimize($index->segment), 'Create query plan');
+
+# Non-complex queries are grouped, so filtering is done only once
+is($query_plan->to_string,
+   "or(or(filter(or(or(#10,#8),#6),#2),constr(pos=2:#6,filter(#8,#2))),constr(pos=2:#6,filter(#6,#2)))",
+   'Stringification');
+
+
 
 
 done_testing;