Search the FirstSpirit Knowledge Base
99 Seiten Doku gelesen "FirstSpirit SEARCH" und trotzdem bekomme ich die simple Suche nicht zum laufen. Inzwischen spidert die integrierte Lucene zwar die gewünschten Seiten, was noch nicht geht, ist die Suchresultat-Seite. Ich vermute, es ist etwas falsch an der web.xml, allerdings finde ich dazu zuwenig Informationen in der Doku und im Forum.
Hier die Kurzanalyse:
Hat jemand eine funktionierende web.xml oder sieht jemand sonst einen Fehler in der Konfig?
Viiiiiiielen Dank! 🙂
<?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">DEBUG, file</attribute>
<attribute name="log4j.appender.file">org.apache.log4j.RollingFileAppender</attribute>
<attribute name="log4j.appender.file.File">/usr/share/tomcat6/logs/fs-search.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>
<!-- Der eigentliche Suchserver als Service verpackt, damit man ihn starten & stoppen kann -->
<service class="de.espirit.firstspirit.opt.search.service.adapter.ServerService">
<!-- START - Search Server -->
<server class="de.espirit.firstspirit.opt.search.server.SimpleServer">
<!-- START - Session Proxy -->
<engine name="fssEngine" class="de.espirit.firstspirit.opt.search.engine.proxy.MonitorEngineProxy">
<!-- START - Category Proxy -->
<engine class="de.espirit.firstspirit.opt.search.engine.proxy.FilterCategorizeEngineProxy">
<!-- START - Localization Proxy -->
<engine class="de.espirit.firstspirit.opt.search.engine.proxy.FilterLocalizeEngineProxy">
<!-- START - Indexing Engine -->
<engine class="de.espirit.firstspirit.opt.search.engine.spider.SpiderEngine">
<attribute name="index">/usr/share/tomcat6/webapps/dev_sfs/WEB-INF/searchindex</attribute>
<attribute name="threadPriority">1</attribute>
<attribute name="urls" type="list">
<attribute>http://dev.kunde.namics.com/</attribute>
</attribute>
<attribute name="allowed" type="list">
<attribute class="de.espirit.firstspirit.opt.search.engine.spider.link.RegexWebLinkFilter">/de/</attribute>
</attribute>
<attribute name="allowed" type="list">
<attribute class="de.espirit.firstspirit.opt.search.engine.spider.link.RegexWebLinkFilter">/en/</attribute>
</attribute>
</engine>
<!-- END - Indexing Engine -->
<attribute name="locales" type="map">
<filter name="de" class="de.espirit.firstspirit.opt.search.filter.RegexFilter">
<attribute name="property">url</attribute>
<attribute name="pattern">/de/</attribute>
</filter>
</attribute>
</engine>
<!-- END - Localization Proxy -->
<attribute name="categories" type="map">
<filter name="web" class="de.espirit.firstspirit.opt.search.filter.RegexFilter">
<attribute name="property">url</attribute>
<attribute name="pattern">(/de/)|(/en/)</attribute>
</filter>
</attribute>
</engine>
<!-- END - Category Proxy -->
</engine>
<!-- END - Session Proxy -->
</server>
<!-- END - Search Server -->
<attribute name="createRMI">false</attribute>
<attribute name="bindTo">local</attribute>
<attribute name="localName">fssServer</attribute>
</service>
<!-- Ein start-/stoppbarer Service, der zyklisch den Suchindex erneut aufbaut. -->
<service class="de.espirit.firstspirit.opt.search.service.RebuildIndexTimerService">
<attribute name="engineURL">fssServer[fssEngine]</attribute>
<attribute name="startTime">17:00</attribute>
<attribute name="period">5m</attribute>
<attribute name="startNow">true</attribute>
</service>
</attribute>
</service>
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:web="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>FirstSpirit SEARCH</display-name>
<description>FirstSpirit search engine for spidering and indexing web-site content.</description>
<servlet>
<servlet-name>fss-Init</servlet-name>
<servlet-class>de.espirit.firstspirit.opt.search.admin.web.ServiceServlet</servlet-class>
<init-param>
<param-name>service</param-name>
<param-value>/WEB-INF/fs-search.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>fss-Search</servlet-name>
<servlet-class>de.espirit.firstspirit.opt.search.web.SearchServlet</servlet-class>
<init-param>
<param-name>serverURL</param-name>
<param-value>fssServer</param-value>
</init-param>
<init-param>
<param-name>searchEngine</param-name>
<param-value>fssEngine</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>fss-Search</servlet-name>
<url-pattern>*.search</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<jsp-config>
<taglib>
<taglib-uri>fs-search</taglib-uri>
<taglib-location>/WEB-INF/fs-search.tld</taglib-location>
</taglib>
</jsp-config>
</web-app>
DEBUG 2012-01-02 17:56:02,019 (de.espirit.firstspirit.opt.search.engine.adapter.LuceneEngineAdapter) search "content:test" ...
DEBUG 2012-01-02 17:56:02,054 (de.espirit.firstspirit.opt.search.engine.adapter.LuceneEngineAdapter) search finished (31ms), results: 4
DEBUG 2012-01-02 17:56:02,064 (de.espirit.firstspirit.opt.search.session.proxy.SessionMonitor$SessionMonitorThread) add session: MonitorSessionProxy->ModifySessionProxy->ModifySessionProxy->de.espirit.firstspirit.opt.search.engine.adapter.LuceneEngineAdapter$LuceneSession@c4e21db (1)
DEBUG 2012-01-02 17:56:02,069 (de.espirit.firstspirit.opt.search.session.proxy.SessionMonitor$SessionMonitorThread) started
DEBUG 2012-01-02 17:56:02,071 (de.espirit.firstspirit.opt.search.session.proxy.SessionMonitor$SessionMonitorThread) wait for session: 1800497ms
Jan 2, 2012 5:56:02 PM org.apache.catalina.core.ApplicationContext log
INFO: fss-Search: search time (query=test, engine=fssEngine, available=4): 118ms
CMS_TRIM(level:3)$
$CMS_IF(!isSet(set_st_imports) || set_st_imports != true)$
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.Collections, java.util.ArrayList" %>
<%@ taglib uri="fs-search" prefix="fss" %>
$CMS_SET(set_st_imports,true)$
$CMS_END_IF$
<fss:getSearchDetails>
<p><%= totalResults %> Ergebnisse gefunden. </p>
<p>orderBy: <%= orderBy %></p>
<p>query: <%= query %></p>
<p>se (Search Engine): <%= se %></p>
<fss:isTrue><p><%= totalResults %> Ergebnisse gefunden.</p>
</fss:isTrue>
<fss:isFalse>
Keine Ergebnisse gefunden!
</fss:isFalse>
</fss:getSearchDetails>
0 Ergebnisse gefunden.
orderBy: null
query: null
se (Search Engine): null
Keine Ergebnisse gefunden!
Puh, ich hab's herausgefunden.
Offenbar ist auf Ebene Apache eine Rewrite Rule eingerichtet. Das Web ist zwar im Verzeichnis dev_kunde installiert, dieses wollte man aber nicht in der URL sehen (also statt /dev_kunde/de/web/homepage.html /de/web/homepage.html). Tomcat weiss davon allerdings nichts und setzt sein Session Cookie mit path=/dev_kunde.
Jedesmal, wenn der Browser nun eine Seite aufruft, findet er für den Request kein passendes Cookie, da das gespeicherte nur für /dev_kunde existiert, fordert eine Seite ohne eigenes Cookie an und Tomcat erstellt brav eine neue Session, wieder mit path=/dev_kunde.
Somit ist die Session der Suchanfrage eine andere wie die der Suchresultatseite, daher auch die Meldungen query=null, se=null etc.
Ich habe in der server.xml das Attribut emptySessionPath ergänzt, und nun wird das Session Cookie immer auf den path=/ gesetzt:
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" emptySessionPath="true" />
Wie sieht denn das Formular aus?
<form method="post" action="do.search">
$CMS_IF(!#global.preview)$
$CMS_SET(set_ft_seach_label,gc_search_field_default_text)$
$CMS_ELSE$
$CMS_SET(set_ft_seach_label,"No search in preview")$
$CMS_END_IF$
<input class="search" name="query" value="$CMS_VALUE(set_ft_seach_label)$" />
<input type="hidden" name="initialSize" value="10" />
<input type="hidden" name="pageSize" value="5" />
<input type="hidden" name="maxResults" value="500" />
$--<input type="hidden" name="se" value="fssEngine" /> steht in web.xml --$
$--<input type="hidden" name="singleton" value="true" />--$
<input type="hidden" name="resultsURL" value="$CMS_REF(ps_search_result,abs:1)$" />
</form>
Ich habe schon versucht, den Wert für se zu verändern, sowohl im Formular als auch in der web.xml. Werte != "fssEngine" werden mit einer Fehlermeldung quittiert, fssEngine scheint also korrekt zu sein. Trotzdem ist die Resultatseite dann mit der Zeile versehen:
se (Search Engine): null
Hallo,
leider finde ich auch keinen Fehler. Könnte ich bitte den kompletten Quellsource der Suchergebnisseite haben? (also die entsprechende JSP-Quellcode und zwar nicht vom Browser, sondern von dem Dateisystem)
Danke!
Besten Dank für das File. Installiert und getestet, hier das Resultat:
0 Ergebnisse gefunden.
orderBy: null
query: null
se (Search Engine): null
Keine Ergebnisse gefunden!
DEBUG 2012-01-04 13:26:47,220 (de.espirit.firstspirit.opt.search.engine.adapter.LuceneEngineAdapter) search "content:ein" ...
DEBUG 2012-01-04 13:26:47,220 (de.espirit.firstspirit.opt.search.engine.adapter.LuceneEngineAdapter) search finished (0ms), results: 10
DEBUG 2012-01-04 13:26:47,223 (de.espirit.firstspirit.opt.search.session.proxy.SessionMonitor$SessionMonitorThread) add session: MonitorSessionProxy->ModifySessionProxy->ModifySessionProxy->de.espirit.firstspirit.opt.search.engine.adapter.LuceneEngineAdapter$LuceneSession@5e2b105d (3)
DEBUG 2012-01-04 13:26:47,224 (de.espirit.firstspirit.opt.search.session.proxy.SessionMonitor$SessionMonitorThread) wait for session: 1659777ms
Jan 4, 2012 1:26:47 PM org.apache.catalina.core.ApplicationContext log
INFO: fss-Search: search time (query=ein, engine=fssEngine, available=10): 4ms
Aus welchem Grund auch immer (leider sehe ich immer noch keinen Fehler im Quellcode der Suchergebnisseite) werden die POST-Paramter wohl nicht übertragen. Kann es sein, dass die Suche funktioniert, wenn Sie im Formular method="GET" statt method="POST" angeben?
Puh, ich hab's herausgefunden.
Offenbar ist auf Ebene Apache eine Rewrite Rule eingerichtet. Das Web ist zwar im Verzeichnis dev_kunde installiert, dieses wollte man aber nicht in der URL sehen (also statt /dev_kunde/de/web/homepage.html /de/web/homepage.html). Tomcat weiss davon allerdings nichts und setzt sein Session Cookie mit path=/dev_kunde.
Jedesmal, wenn der Browser nun eine Seite aufruft, findet er für den Request kein passendes Cookie, da das gespeicherte nur für /dev_kunde existiert, fordert eine Seite ohne eigenes Cookie an und Tomcat erstellt brav eine neue Session, wieder mit path=/dev_kunde.
Somit ist die Session der Suchanfrage eine andere wie die der Suchresultatseite, daher auch die Meldungen query=null, se=null etc.
Ich habe in der server.xml das Attribut emptySessionPath ergänzt, und nun wird das Session Cookie immer auf den path=/ gesetzt:
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" emptySessionPath="true" />