blob: 5ed9bcde2eb894ade6c37ce351a698140d3703d5 [file] [log] [blame]
Akron6d9341b2016-11-16 16:59:01 +01001package Krawfish::Query::Unique;
2use parent 'Krawfish::Query';
3use Krawfish::Log;
4use strict;
5use warnings;
6
7use constant DEBUG => 0;
8
9sub new {
10 my $class = shift;
11 bless {
12 span => shift,
13 last => undef
14 };
15};
16
Akronb7653672017-08-07 14:34:14 +020017sub clone {
18 my $self = shift;
19 __PACKAGE__->new(
20 $self->{span}->clone
21 );
22};
23
Akron6d9341b2016-11-16 16:59:01 +010024sub next {
25 my $self = shift;
26
27 print_log('unique', 'Next unique span') if DEBUG;
28
29 my $span = $self->{span};
30 while ($span->next) {
31 my $current = $span->current;
32
33 print_log('unique', 'Found ' . $current->to_string) if DEBUG;
34
Akrona3581a92017-08-17 17:45:37 +020035 unless ($current->same_as($self->{last})) {
Akron6d9341b2016-11-16 16:59:01 +010036
37 print_log('unique', 'Span is unique') if DEBUG;
38
39 $self->{last} = $current;
40 $self->{doc_id} = $current->doc_id;
41 $self->{start} = $current->start;
42 $self->{end} = $current->end;
43 $self->{payload} = $current->payload;
44 return 1;
45 }
46 elsif (DEBUG) {
47 print_log('unique', 'Span is not unique');
48 };
49
Akron4204f172017-10-02 22:32:02 +020050 CORE::next;
Akron6d9341b2016-11-16 16:59:01 +010051 };
52 return;
53};
54
55sub to_string {
56 return 'unique(' . $_[0]->{span}->to_string . ')';
57};
58
Akron0c998cc2017-07-19 03:29:37 +020059
Akronfaf76852017-07-19 17:37:07 +020060sub max_freq {
61 $_[0]->{span}->max_freq;
Akron0c998cc2017-07-19 03:29:37 +020062};
63
Akron15fc1972017-07-20 22:53:00 +020064
65sub filter_by {
66 my ($self, $corpus) = @_;
67 $self->{span} = $self->{span}->filter_by($corpus);
68 return $self;
69};
70
Akron6d9341b2016-11-16 16:59:01 +0100711;