Lucy::Docs::Tutorial::FieldTypeTutorial - Specify per-field properties and behaviors.
The Schema we used in the last chapter specifies three fields:
my $type = Lucy::Plan::FullTextType->new( analyzer => $easyanalyzer, ); $schema->spec_field( name => 'title', type => $type ); $schema->spec_field( name => 'content', type => $type ); $schema->spec_field( name => 'url', type => $type );
Since they are all defined as “full text” fields,
they are all searchable – including the url
field,
a dubious choice.
Some URLs contain meaningful information,
but these don’t,
really:
http://example.com/us_constitution/amend1.txt
We may as well not bother indexing the URL content.
To achieve that we need to assign the url
field to a different FieldType.
Instead of FullTextType, we’ll use a StringType, which doesn’t use an Analyzer to break up text into individual fields. Furthermore, we’ll mark this StringType as unindexed, so that its content won’t be searchable at all.
my $url_type = Lucy::Plan::StringType->new( indexed => 0 ); $schema->spec_field( name => 'url', type => $url_type );
To observe the change in behavior,
try searching for us_constitution
both before and after changing the Schema and re-indexing.
For a taste of other FieldType possibilities,
try turning off stored
for one or more fields.
my $content_type = Lucy::Plan::FullTextType->new( analyzer => $easyanalyzer, stored => 0, );
Turning off stored
for either title
or url
mangles our results page,
but since we’re not displaying content
,
turning it off for content
has no effect – except on index size.
Analyzers play a crucial role in the behavior of FullTextType fields. In our next tutorial chapter, AnalysisTutorial, we’ll see how changing up the Analyzer changes search results.
Copyright © 2010-2015 The Apache Software Foundation, Licensed under the
Apache License, Version 2.0.
Apache Lucy, Lucy, Apache, the Apache feather logo, and the Apache Lucy project logo are trademarks of The
Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their
respective owners.