SolR Schema.xml

albert's picture

Beschrijving van schema.xml

In schema.xml wordt beschreven welke velden er zijn en van welk type. Er kunnen nieuwe typen worden gedefiniëerd en voor ieder type kan worden bepaald welke acties moeten worden uitgevoerd voordat het veld wordt geïndexeerd of gezocht.

Kort overzicht van schema.xml:

<schema>
  <types>
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
    <fieldType name="sint" class="solr.SortableIntField" />
    <fieldType name="text" class="solr.TextField">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.StopFilterFactory"/>
      </analyzer>
    </fieldType>
  <fields>
    <field name="id" type="string" indexed="true" stored="true" required="true" />
    <field name="body" type="text" indexed="true" stored="true" termVectors="true"/>
    <copyField source="teaser" dest="text" maxChars="300" />
    <dynamicField name="*_i" type="sint" indexed="true" stored="true"/>
  </fields>
  <uniqueKey>id </uniqueKey>
  <defaultSearchField>text</defaultSearchField>
  <solrQueryParser defaultOperator="OR"/>
</schema>

fieldType

Alle veldtypes in SolR moeten worden gedefiniëerd in een fieldType tag. Deze heeft als belangrijkste attributen name en class. De class is een Java-class.

Standaard solr-classes zijn: BCDIntField, BCDLongField, BCDStrField, BinaryField, BoolField, ByteField, DateField, DoubleField, ExternalFileField, FloatField, IntField. LongField, RandomSortField, ShortField, SortableDoubleField, SortableFloatField, SortableIntField, SortableLongField, StrField, TextField, TrieDateField, TrieDoubleField, TrieField, TrieFloatField , TrieIntField, TrieLongField, UUIDField.

Analyzers

TextField types kunnen een of meer analyzers hebben. Een analyzer kan een class zijn die afgeleid is van org.apache.lucene.analysis.Analyzer of een lijst van charFilters, Tokenizer en TokenFilters. Een analyzer kan voor indexeren (type="index") of voor zoeken (type="query") gebruikt worden, of voor beide (geen type-attribuut)

Tokenizers

Voordat een veld wordt geïndexeerd (of doorzocht)  wordt de tekst in "Tokens" omgezet. Er zijn veel mogelijkheden om te "tokenizen".
Voorbeelden

  • Standard Tokenizer. Splitst op wit en interpunctie, laat internet domeinen en e-mail adressen ongemoeid. "Hoi! aap-je a@b.com Re: x?" wordt: Hoi aap-je a@b.com Re x
  • Lowercase Tokenizer. Splitst op niet-letters, converteert naar onderkast en verwijdert alle niet-letters. "Hoi! aap-je a@b.com Re: x?" wordt: hoi aap je a b com re x
  • White Space Tokenizer. Splitst op wit, bewaart overige interpunctie. "Hoi! aap-je a@b.com Re: x?" wordt: Hoi! aap-je a@b.com Re: x?
  • N-gram tokenizer. Splitst op in "n-gram"s, stukken van n tekens of een range (standaard 1 of 2). "Hallo" wordt: H a l l o Ha al ll lo
  • Regular Expression Pattern Tokenizer. Splitst op Java reguliere expressies, of gebruikt gematchte expressies.
    Voorbeelden: <tokenizer class="solr.PatterTokenizerFactory" pattern="\s*[-.!,]*\s"> "Dit is @$!&,vind je , niet?" wordt Dit is @$ & vind je niet?
    <tokenizer class="solr.PatterTokenizerFactory" pattern="[A-Z][a-z]*" group="0"> "Hoeveel RAM heeft jouw PC,Jan" wordt Hoeveel R A M P C Jan

Let Op: Alle Tokenizers worden via een Factory aangeroepen.

Filters

Daarna kan de tekst bewerkt worden door tokens te filteren.
Voorbeelden:

  • HyphenatedWordsFilter. Recombineert woorden die door een afbreekteken gescheiden zijn. "Een af- gebroken woord" wordt: Een afgebroken woord
  • KeepWordFilter. Alleen tokens die in een bestand voorkomen worden gebruikt, de overige tokens worden verwijderd.
  • StopFilter. Alle tokens die in een bestand voorkomen worden verwijderd. (omgekeerde van keepwordsfilter)
  • SynonymFilter. Wordt gebruikt om synonymen te definiëren. Een token kan worden vervangen door een of meer synonymen of deze kunnen worden toegevoegd.
  • LowerCaseFilter. Verandert all bovenkast in onderkast in alle tokens.
  • PatternReplaceFilter. De naam zegt het.
  • RemoveDuplicatesTokenFilter.

Fields

Nu we de typen hebben gedefinieerd kunne we velden gaan definieren.
Iedere veld heeft een name en een type.
Daarnaast kan een veld andere eigenschappen hebben zoals stored (het veld kan in een query worden opgehaald) of indexed (er kan op het veld worden gezocht).

Voorbeeld: <field name="price" type="sfloat" indexed="true" stored="true"/>

Met de copyField directive is het mogelijk bepaalde velden op meerder manier te analyseren of te combineren. Ook kan worden aangegeven hoevel tekens maximaal gekopieerd moeten worden.

Met <dynamicField> kunnen velden worden gedefieerd waarvan de naam (nog) niet bekend is. Met een wildcard kan worden aangegeven wlke dynamische velden gemaakt moeten worden. Voorbeeld:
<dynamicField name="*_i" type="sint" indexed="true" stored="true"/>
maakt van ieder veld dat eindigt op _i een sortable integer field dat geindexeerd wordt en opgeslagen.


Naar Introductie SolR