Knowledgebase ► Suche ► Volltextsuche ► Konfiguration des SOLR-Volltextindex

Startseite Zurück zur Knowledgebase Zurück zur den Artikeln

Zunächst einmal sollte ein leerer Volltextindex (core) mit den von SOLR vorgegebenen Standardparametern angelegt werden. Dies sollte NICHT über die Weboberfläche, sondern über die Kommandozeile mit Hilfe des Befehls:

./bin/solr create_core -c name-des-index

erfolgen. Da unter Linux die Erstellung eines Core mit root-Rechten nicht erlaubt ist, wird der Core hier mit folgendem Befehl angelegt:

sudo su - solr -c "/opt/solr/bin/solr create_core -c name-des-index"

Für die reibungslose Zusammenarbeit des Volltextindex mit BeeCollect Professional müssen am jeweiligen Index einige Einstellungen vorgenommen werden. Der Index wird konfiguriert über die Datei „managed-schema“, welche sich im Unterverzeichnis „conf“ innerhalb des Wurzelverzeichnisses des Index befindet.

Folgende Feldtypen müssen abweichend von Standard definiert werden:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.GermanNormalizationFilterFactory"/>
<filter class="solr.GermanLightStemFilterFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory" catenateNumbers="0" generateNumberParts="1" splitOnCaseChange="1" generateWordParts="1" catenateAll="0" catenateWords="0"/>
<filter class="solr.SnowballPorterFilterFactory" language="German"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
<filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.GermanNormalizationFilterFactory"/>
<filter class="solr.GermanLightStemFilterFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory" catenateNumbers="0" generateNumberParts="1" splitOnCaseChange="1" generateWordParts="1" catenateAll="0" catenateWords="0"/>
<filter class="solr.SnowballPorterFilterFactory" language="German"/>
</analyzer>
</fieldType>
<fieldType name="globalkey" class="solr.StrField" indexed="true" stored="true" multiValued="false"/>
<fieldType name="identity" class="solr.IntPointField" indexed="true" stored="true" multiValued="false"/>
<fieldType name="indextext" class="solr.TextField" indexed="true" stored="false" multiValued="true"/>
<fieldType name="text_suggest" class="solr.TextField" positionIncrementGap="100" multiValued="true">
   <analyzer>
     <tokenizer class="solr.StandardTokenizerFactory"/>
       <filter class="solr.LowerCaseFilterFactory"/>
       <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
     </analyzer>
 </fieldType>

Für die korrekte Handhabung bestimmter Feldinhalte und um eine unnötige Belastung des Index zu vermeiden, werden folgende dynamische Felder definiert:

<dynamicField name="*_dt" type="pdate" indexed="true" stored="true"/>
<dynamicField name="*_i" type="pint" indexed="true" stored="true"/>
<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
<dynamicField name="*_txt" type="text_general" indexed="true" stored="true"/>
<dynamicField name="*_guid" type="globalkey"/>
<dynamicField name="*_id" type="identity"/>
<dynamicField name="*_idx" type="indextext"/>

Für die gemeinsame Indizierung aller Inhalte kommt ein berechnetes Feld zu Einsatz, welches folgendermaßen definiert wird:

<field name="collector" type="text_general" uninvertible="true" multiValued="true" indexed="true" stored="true"/>
<field name="SortByContent_S" type="text_general" multiValued="false" indexed="true" stored="true"/>
<field name="suggest" type="text_suggest" indexed="true" stored="true" multiValued="true" />
 <field name="weight" type="pfloat" indexed="true" stored="true" multiValued="false"/>
 <field name="suggestshort" type="text_suggest" indexed="true" stored="true" multiValued="true" />
 <field name="weightshort" type="pfloat" indexed="true" stored="true" multiValued="false"/>

<copyField source="*_s" dest="collector"/>
<copyField source="*_S" dest="collector"/>
<copyField source="*_idx" dest="collector"/>
<copyField source="*_idx" dest="suggest"/>
<copyField source="ShortInfo_txt" dest="suggestshort"/>

Bei der oben aufgeführten Definition ist zu beachten, dass einige Einstellungen bereits in der Standardkonfiguration enthalten sind. Die Standardeinstellungen sind in diesen Fällen durch die o.g. zu überschreiben.

Darüber hinaus müssen in der im gleichen Verzeichnis abgelegten Datei solrconfig.xml noch folgende Einstellungen für die Vorschlagssuche vorgenommen werden:

<searchComponent name="suggest" class="solr.SuggestComponent">
   <lst name="suggester">
     <str name="name">suggest-full</str>
     <str name="lookupImpl">FreeTextLookupFactory</str>
     <str name="storeDir">suggester_freetext</str>
     <str name="dictionaryImpl">DocumentDictionaryFactory</str>
     <str name="field">suggest</str>
     <str name="weightField">weight</str>
     <str name="suggestFreeTextAnalyzerFieldType">text_suggest</str>
     <str name="suggestAnalyzerFieldType">text_suggest</str>
     <str name="buildOnStartup">true</str>
     <str name="buoldOnCommit">false</str>
   </lst>
   <lst name="suggester">
     <str name="name">suggest-short</str>
     <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
     <str name="indexPath">suggester_infix</str>
     <str name="dictionaryImpl">DocumentDictionaryFactory</str>
     <str name="field">suggestshort</str>
     <str name="contextField">Module_s</str>
     <str name="weightField">weightshort</str>
     <str name="suggestAnalyzerFieldType">text_suggest</str>
     <str name="highlight">false</str>
     <str name="buildOnStartup">true</str>
     <str name="buoldOnCommit">false</str>
   </lst>
 </searchComponent>

<requestHandler name="/suggest-full" class="solr.SearchHandler" startup="lazy">
   <lst name="defaults">
     <str name="suggest">true</str>
     <str name="suggest.count">10</str>
     <str name="suggest.dictionary">suggest-full</str>
     <str name="suggest.onlyMorePopular">true</str>
     <str name="suggest.collate">true</str>
   </lst>
   <arr name="components">
     <str>suggest</str>
   </arr>
 </requestHandler>

 <requestHandler name="/suggest-short" class="solr.SearchHandler" startup="lazy">
   <lst name="defaults">
     <str name="suggest">true</str>
     <str name="suggest.count">10</str>
     <str name="suggest.dictionary">suggest-short</str>
     <str name="suggest.onlyMorePopular">true</str>
     <str name="suggest.collate">true</str>
   </lst>
   <arr name="components">
     <str>suggest</str>
   </arr>
 </requestHandler>