| Akron | b009400 | 2017-01-02 18:01:03 +0100 | [diff] [blame^] | 1 | use Test::More; |
| 2 | use Test::Krawfish; |
| 3 | use strict; |
| 4 | use warnings; |
| 5 | |
| 6 | use_ok('Krawfish::Index'); |
| 7 | use_ok('Krawfish::Koral::Query::Builder'); |
| 8 | use_ok('Krawfish::Result::Aggregate'); |
| 9 | use_ok('Krawfish::Result::Aggregate::Count'); |
| 10 | |
| 11 | my $index = Krawfish::Index->new; |
| 12 | |
| 13 | ok_index($index, { |
| 14 | docID => 7 |
| 15 | } => [qw/aa bb/], 'Add complex document'); |
| 16 | ok_index($index, { |
| 17 | docID => 3, |
| 18 | } => [qw/aa cc cc/], 'Add complex document'); |
| 19 | ok_index($index, { |
| 20 | docID => 1, |
| 21 | } => [qw/aa bb/], 'Add complex document'); |
| 22 | |
| 23 | |
| 24 | my $kq = Krawfish::Koral::Query::Builder->new; |
| 25 | |
| 26 | my $query = $kq->token('bb'); |
| 27 | |
| 28 | my $count = Krawfish::Result::Aggregate::Count->new; |
| 29 | |
| 30 | # Get count object |
| 31 | ok(my $aggr = Krawfish::Result::Aggregate->new( |
| 32 | $query->prepare_for($index), |
| 33 | [$count] |
| 34 | ), 'Create count object'); |
| 35 | |
| 36 | ok($aggr->next, 'Next'); |
| 37 | ok($aggr->next, 'Next'); |
| 38 | ok(!$aggr->next, 'No more nexts'); |
| 39 | |
| 40 | |
| 41 | is($count->doc_freq, 2, 'Document frequency'); |
| 42 | is($count->freq, 2, 'Occurrence frequency'); |
| 43 | |
| 44 | |
| 45 | is($aggr->to_string, "aggregate([count]:'bb')", 'Get counts'); |
| 46 | $query = $kq->token('cc'); |
| 47 | |
| 48 | $count = Krawfish::Result::Aggregate::Count->new; |
| 49 | |
| 50 | # Get count object |
| 51 | ok($aggr = Krawfish::Result::Aggregate->new( |
| 52 | $query->prepare_for($index), |
| 53 | [$count] |
| 54 | ), 'Create count object'); |
| 55 | |
| 56 | ok($aggr->finish, 'Finish'); |
| 57 | is($aggr->to_string, "aggregate([count]:'cc')", 'Get counts'); |
| 58 | is($count->doc_freq, 1, 'Document frequency'); |
| 59 | is($count->freq, 2, 'Occurrence frequency'); |
| 60 | |
| 61 | done_testing; |
| 62 | __END__ |
| 63 | my $index = Krawfish::Index->new; |
| 64 | |
| 65 | ok(defined $index->add('t/data/doc1.jsonld'), 'Add new document'); |
| 66 | ok(defined $index->add('t/data/doc2.jsonld'), 'Add new document'); |
| 67 | ok(defined $index->add('t/data/doc3-segments.jsonld'), 'Add new document'); |
| 68 | |
| 69 | my $kq = Krawfish::Koral::Query::Builder->new; |
| 70 | my $query = $kq->token('Der'); |
| 71 | |
| 72 | my $facet_license = Krawfish::Result::Aggregate::Facets->new( |
| 73 | $index, |
| 74 | 'license' |
| 75 | ); |
| 76 | |
| 77 | my $facet_corpus = Krawfish::Result::Aggregate::Facets->new( |
| 78 | $index, |
| 79 | 'corpus' |
| 80 | ); |
| 81 | |
| 82 | # Get facets object |
| 83 | ok(my $aggr = Krawfish::Result::Aggregate->new( |
| 84 | $query->prepare_for($index), |
| 85 | [$facet_license, $facet_corpus] |
| 86 | ), 'Create count object'); |
| 87 | |
| 88 | is( |
| 89 | $aggr->to_string, |
| 90 | "aggregate([facet:license,facet:corpus]:'Der')", |
| 91 | 'Stringification' |
| 92 | ); |
| 93 | |
| 94 | ok($aggr->next, 'Next'); |
| 95 | ok($aggr->next, 'Next'); |
| 96 | ok(!$aggr->next, 'No more nexts'); |
| 97 | |
| 98 | my $hash = $facet_license->facets; |
| 99 | is($hash->{free}->[0], 1, 'Document frequency'); |
| 100 | is($hash->{free}->[1], 1, 'frequency'); |
| 101 | is($hash->{closed}->[0], 1, 'Document frequency'); |
| 102 | is($hash->{closed}->[1], 1, 'frequency'); |
| 103 | |
| 104 | $hash = $facet_corpus->facets; |
| 105 | is($hash->{'corpus-2'}->[0], 2, 'Document frequency'); |
| 106 | is($hash->{'corpus-2'}->[1], 2, 'frequency'); |
| 107 | |
| 108 | is_deeply($aggr->result, { |
| 109 | facets => { |
| 110 | license => { |
| 111 | free => [1,1], |
| 112 | closed => [1,1] |
| 113 | }, |
| 114 | corpus => { |
| 115 | 'corpus-2' => [2,2] |
| 116 | } |
| 117 | } |
| 118 | }, 'aggregated results'); |
| 119 | |
| 120 | done_testing; |
| 121 | __END__ |