Search the FirstSpirit Knowledge Base
Wenn die Sprachsimulation in Basic Search über die Metadaten der Seite erfolgen soll, so muss beachtet werden, dass dies sowohl bei der Indexierung der Seiten als auch der Filterung der Suchergebnisse korrekt berücksichtigt wird.
Hier die entsprechenden Erläuterungen anhand eines Praxisbeispiels. Auf der Seite wird die Sprache über folgendes Metatag für Deutsch oder Englisch definiert:
<meta name="language" content="de" />
oder
<meta name="language" content="en" />
Bei der Indexierung muss dieses Tag entsprechend berücksichtigt werden. Dazu müssen innerhalb der Spider Engine folgende Tags angegeben werden:
<attribute name="locales" type="map">
<attribute name="de">de</attribute>
<attribute name="en">en</attribute>
</attribute>
<attribute name="localeField">language</attribute>
localeField definiert hierbei den Namen des Metatags aus dem HTML und locales definiert die Zuordnung der Werte zu den einzelnen Sprachkürzeln. Mit Hilfe dieser Definition wandern die indizierten Inhalte nun mit einer entsprechenden Sprachzuordnung in den Lucene Index.
Bei der Ausgabe der Suchergebnisse müssen die Inhalte nun noch sprachabhängig gefiltert werden. Hierzu werden entsprechende Filter benötigt, die innerhalb des FilterLocalizeEngineProxy angegeben werden müssen:
<attribute name="locales" type="map">
<!--DE HTML filter→
<filter name="de" class="de.espirit.firstspirit.opt.search.filter.RegexFilter">
<attribute name="property">language</attribute>
<attribute name="pattern">de</attribute>
</filter>
<!-- EN HTML filter →
<filter name="de" class="de.espirit.firstspirit.opt.search.filter.RegexFilter">
<attribute name="property">language</attribute>
<attribute name="pattern">en</attribute>
</filter>
</attribute>
Diese Filter dienen dazu, das bei der Suchanfrage übergebene locale dafür zu nutzen, nur passende Suchtreffer zurückzuliefern. Die gesamte Suchkonfiguration (fs-search.xml) könnte dann beispielsweise so aussehen:
<?xml version="1.0" encoding="UTF-8"?>
<service class="de.espirit.firstspirit.opt.search.service.proxy.MultiServiceProxy">
<attribute name="services" type="list">
<service class="de.espirit.firstspirit.opt.search.service.adapter.Log4jService">
<attribute name="log4j.rootCategory">INFO, file</attribute>
<attribute name="log4j.logger.de.espirit.firstspirit.opt.search.engine.spider.SimpleSpider">INFO</attribute>
<attribute name="log4j.logger.de.espirit.firstspirit.opt.search.engine.spider.indexer.LuceneIndexer">INFO</attribute>
<attribute name="log4j.logger.de.espirit.firstspirit.opt.search.engine.spider.indexer.WebIndexer">INFO</attribute>
<attribute name="log4j.appender.file">org.apache.log4j.RollingFileAppender</attribute>
<attribute name="log4j.appender.file.File">/basicsearch/log/fssearch.log</attribute>
<attribute name="log4j.appender.file.MaxFileSize">5MB</attribute>
<attribute name="log4j.appender.file.MaxBackupIndex">5</attribute>
<attribute name="log4j.appender.file.layout">org.apache.log4j.PatternLayout</attribute>
<attribute name="log4j.appender.file.layout.ConversionPattern">%-5p %d (%c)%m%n</attribute>
</service>
<service class="de.espirit.firstspirit.opt.search.service.adapter.ServerService">
<server class="de.espirit.firstspirit.opt.search.server.SimpleServer">
<engine name="Redaktionsserver" class="de.espirit.firstspirit.opt.search.engine.proxy.MonitorEngineProxy">
<engine class="de.espirit.firstspirit.opt.search.engine.proxy.FilterLocalizeEngineProxy">
<engine class="de.espirit.firstspirit.opt.search.engine.spider.SpiderEngine">
<attribute name="urls" type="list">
<attribute>http://myserver.com/index.html</attribute>
</attribute>
<attribute name="index">/basicsearch/lucene.index</attribute>
<attribute name="maxThreads">2</attribute>
<attribute name="threadPriority">1</attribute>
<attribute name="maxDocuments">5000</attribute>
<attribute name="maxTime">120m</attribute>
<attribute name="allowed" type="list">
<attribute class="de.espirit.firstspirit.opt.search.engine.spider.link.RegexWebLinkFilter">myserver.com</attribute>
</attribute>
<attribute name="locales" type="map">
<attribute name="de">de</attribute>
<attribute name="en">en</attribute>
</attribute>
<attribute name="localeField">language</attribute>
</engine>
<attribute name="locales" type="map">
<!--DE HTML filter -->
<filter name="de" class="de.espirit.firstspirit.opt.search.filter.RegexFilter">
<attribute name="property">language</attribute>
<attribute name="pattern">de</attribute>
</filter>
<!-- EN HTML filter -->
<filter name="de" class="de.espirit.firstspirit.opt.search.filter.RegexFilter">
<attribute name="property">language</attribute>
<attribute name="pattern">en</attribute>
</filter>
</attribute>
</engine>
</engine>
</server>
<attribute name="createRMI">false</attribute>
<attribute name="bindTo">local</attribute>
<attribute name="localName">fssServer</attribute>
</service>
<service class="de.espirit.firstspirit.opt.search.service.RebuildIndexTimerService">
<attribute name="engineURL">fssServer[myServer]</attribute>
<attribute name="startTime">6:00</attribute>
<attribute name="period">1h</attribute>
<attribute name="startNow">false</attribute>
</service>
</attribute>
</service>
Subject | Latest Article | |
---|---|---|