blob: ed0d3d268e02ffc0f89061db45dd6f6472363142 [file] [log] [blame]
Akron6e629862017-01-01 17:08:27 +01001package Krawfish::Result::Snippet;
2use parent 'Krawfish::Result';
3use Krawfish::Result::Snippet::Highlights;
Akrona1fbdeb2016-12-12 02:06:08 +01004use Krawfish::Log;
5use strict;
6use warnings;
7
Akron12736192017-03-08 20:31:58 +01008use constant DEBUG => 0;
Akrona1fbdeb2016-12-12 02:06:08 +01009
Akronc001d362016-12-12 19:07:52 +010010# TODO:
11# - ExpandToSpan
12# - Context with chars and tokens
13
Akrona1fbdeb2016-12-12 02:06:08 +010014sub new {
15 my $class = shift;
Akronc001d362016-12-12 19:07:52 +010016 my %param = @_;
17
18 my $self = bless {
19 query => $param{query},
20 index => $param{index}
Akrona1fbdeb2016-12-12 02:06:08 +010021 }, $class;
Akronc001d362016-12-12 19:07:52 +010022
Akron6a749732017-02-14 14:43:06 +010023 $self->{subtokens} = $self->{index}->subtokens;
Akronc001d362016-12-12 19:07:52 +010024
25 # Create highlight object
Akron6e629862017-01-01 17:08:27 +010026 $self->{highlights} = Krawfish::Result::Snippet::Highlights->new(
Akronc001d362016-12-12 19:07:52 +010027 $param{highlights},
Akron6a749732017-02-14 14:43:06 +010028 $self->{subtokens}
Akronc001d362016-12-12 19:07:52 +010029 );
30
31 return $self;
Akrona1fbdeb2016-12-12 02:06:08 +010032};
33
34
35# Iterated through the ordered linked list
36sub next {
37 my $self = shift;
38 $self->{match} = undef;
Akroneed53912017-02-17 03:09:45 +010039 # $self->{highlights}->clear;
Akrona1fbdeb2016-12-12 02:06:08 +010040 return $self->{query}->next;
41};
42
43
Akroneed53912017-02-17 03:09:45 +010044# Return the current match
Akrona1fbdeb2016-12-12 02:06:08 +010045sub current_match {
46 my $self = shift;
47
48 print_log('c_snippet', 'Get current match') if DEBUG;
49
50 # Match is already set
51 return $self->{match} if $self->{match};
52
53 # Get current match from query
54 my $match = $self->match_from_query;
55
56 print_log('c_snippet', 'match is' . $match) if DEBUG;
57
58 my $pd = $self->{index}->primary->get(
59 $match->doc_id,
60 0,
61 500
62 ) // '';
63
Akronc001d362016-12-12 19:07:52 +010064 # TODO: $highlights
65
Akrona1fbdeb2016-12-12 02:06:08 +010066 $match->fields({snippet => $pd});
67
68 $self->{match} = $match;
69 return $match;
70};
71
Akroneed53912017-02-17 03:09:45 +010072
73# Stringification
Akrona1fbdeb2016-12-12 02:06:08 +010074sub to_string {
75 my $self = shift;
76 my $str = 'collectSnippet(';
77 $str .= $self->{query}->to_string;
78 return $str . ')';
79};
80
Akroneed53912017-02-17 03:09:45 +010081
Akrona1fbdeb2016-12-12 02:06:08 +010082# From Mojo::Util
83sub _squote {
84 my $str = shift;
85 $str =~ s/(['\\])/\\$1/g;
86 return qq{'$str'};
87};
88
89
901;