On 1/17/15 8:55 AM, Gerald Richter wrote:
> Hi,
> 
>  
> I have defined a field in the following way:
> 
>  
>     my $tokenizer    = Lucy::Analysis::StandardTokenizer->new;
>     my $normalizer   = Lucy::Analysis::Normalizer->new (strip_accents => 1, 
> case_fold => 1) ;
>     my $field_analyzer = Lucy::Analysis::PolyAnalyzer->new
>                             (
>                             analyzers => [ $tokenizer, $normalizer ],
>                             );
>     my $field_type  = Lucy::Plan::FullTextType->new (analyzer => 
> $field_analyzer) ;
>     $schema->spec_field( name => 'option_ndx',  type => $field_type );
> 
>  
> When I now run a query (either with a TermQuery or a WildcardQuery), and the 
> indexed document was "Foo baß", it works as long as I query for "foo", but 
> not when I query for "Foo" or "baß". So I guess I have to run the query 
> string thru the same analyzer as the indexer does.
> 
>  
> The question is how can I do this or is Lucy able to do this for me?
> 

In addition to the good advice elsewhere on this thread, you can use the
Search::Query Lucy dialect to parse and analyze plain strings
appropriately, with code like this:

----------------------------------
use Lucy;
use Search::Query;

my ($idx, $query) = get_index_name_and_query();

my $searcher = Lucy::Search::IndexSearcher->new( index => $idx );
my $schema   = $searcher->get_schema();

# build field mapping
my %fields;
for my $field_name ( @{ $schema->all_fields() } ) {
    $fields{$field_name} = {
        type     => $schema->fetch_type($field_name),
        analyzer => $schema->fetch_analyzer($field_name),
    };
}

my $query_parser = Search::Query->parser(
    dialect        => 'Lucy',
    croak_on_error => 1,
    default_field  => 'foo',  # applied to "bare" terms with no field
    fields         => \%fields
);

my $parsed_query = $query_parser->parse($query);
my $lucy_query   = $parsed_query->as_lucy_query();
my $hits         = $searcher->hits( query => $lucy_query );

--------------------------------



Something similar is performed in Dezi::Lucy::Searcher:
https://metacpan.org/source/KARMAN/Dezi-App-0.013/lib/Dezi/Lucy/Searcher.pm#L124

See
https://metacpan.org/pod/Search::Query::Dialect::Lucy



-- 
Peter Karman  .  http://peknet.com/  .  [email protected]

Reply via email to