Peter Karman
and 1 contributors


KinoSearch::Docs::Tutorial::FieldType - Specify per-field properties and behaviors.


The Schema we used in the last chapter specifies three fields:

    my $type = KinoSearch::Plan::FullTextType->new(
        analyzer => $polyanalyzer,
    $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:

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 = KinoSearch::Plan::StringType( 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.

Toggling 'stored'

For a taste of other FieldType possibilities, try turning off stored for one or more fields.

    my $content_type = KinoSearch::Plan::FullTextType->new(
        analyzer => $polyanalyzer,
        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 up next

Analyzers play a crucial role in the behavior of FullTextType fields. In our next tutorial chapter, KinoSearch::Docs::Tutorial::Analysis, we'll see how changing up the Analyzer changes search results.


Copyright 2008-2010 Marvin Humphrey


See KinoSearch version 0.30.