#!/usr/bin/perl # Run this test with KinoSearch revision 4669 # ------------- Index Schema ----------- # use KinoSearch::Schema; use KinoSearch::Analysis::Tokenizer; require KinoSearch::FieldType::FullTextType; my $schema = new KinoSearch::Schema; my $analyser = new KinoSearch::Analysis::Tokenizer; $schema->spec_field( name => 'content', type => new KinoSearch::FieldType::FullTextType analyzer => $analyser, highlightable => 1, ); $schema->spec_field( name => 'title', type => new KinoSearch::FieldType::FullTextType analyzer => $analyser, highlightable => 0, ); # ------ Set up the test index ------- # use KinoSearch::Searcher; use KinoSearch::Indexer; use KinoSearch::Store::RAMFolder; my $index = KinoSearch::Store::RAMFolder->new; my $invindexer = KinoSearch::Indexer->new( index => $index, schema => $schema ); $invindexer->add_doc( { title => '' } ); $invindexer->commit; use KinoSearch::Searcher; my $searcher = KinoSearch::Searcher->new( index => $index ); # create a composite query use KinoSearch::Search::ORQuery; use KinoSearch::Search::TermQuery; my $query = new KinoSearch::Search::ORQuery; $query->add_child(new MyTermQuery term => 'philaret', field => $_, ) for qw/ content title /; $query->make_compiler( searchable => $searcher, )->highlight_spans( searchable => $searcher, doc_vec => $searcher->fetch_doc_vec( 1 ), field => 'title', ); package MyTermQuery; BEGIN { @ISA = 'KinoSearch::Search::TermQuery'; } sub make_compiler { MyTermCompiler->new( parent => @_ ); } package MyTermCompiler; BEGIN { @ISA = 'KinoSearch::Search::TermCompiler'; } sub highlight_spans { return unless $_[0]->get_parent->get_field eq 'content'; shift->SUPER::highlight_spans(@_) }