Search the FirstSpirit Knowledge Base
Hallo,
Wir nutzen exalead über das SearchServlet von e-spirit.
In der alten Version Exalead 4.6 wurde der Parameter serverAddress
mit http://xxx.iv.local:10000/soap/test.relaunch?wsdl=com.exalead.search.wsdl gefüllt.
In exalead selber gab es dann unter sources den Eintrag test.relaunch.
Es wird also ganz konkret dieser Index abgefragt.
Jetzt habe ich zwei ungelöste Probleme.
1) Wie muss der Parameter serverAddress gefüllt sein
2) Wie muss die Konfiguration in exalead aussehen
Wenn ich die Dokumention richtig verstanden habe entspricht sources einem Http Connector.
Ok Frage 1) und 2) haben sich erledigt, nach eintragen der korrekten Parameter und nutzen der aktuellen libs
funktioniert der Zugriff jetzt. Ich habe dann mal die passende Doku gelesen 😉
Offen ist jetzt noch wie die Suche auf einen bestimmten Index beschränkt oder das Ergebnis gefiltert werden kann.
tschau Peter
Es betrifft Cloudview V6R2013x.SP2.49247
Hallo Peter,
die Suche einschränken kannst Du, indem Du der Suchabfrage
corporate/tree:"Top/Source/SUCHINDEXNAME"
hinzufügst. Ich manipuliere den Suchsting vor dem Absenden per JavaScript. Da wird u.a. der Index (ExaleadCloudview -Source) hinzugfügt. Auf die Weise kann man auch in bestimmten feldern suchen
Zum filtern der Suchergebnisse siehe Doku (im odfs -> Doku -> zusätzl. DOku-> FirstSpirit Exalead CloudView Integration) Punkt 3.11 Tags zur Verfeinerung der Suchergebnisse
Testen am besten direkt in der Exalead-Suche http://servername:port/mashup-ui
Grüße
Andeas
Hallo Andreas,
ja danke erstmal.
Technisch funktioniert das dann, über die search-api erhält man dann das korrekte Ergebnis. Allerdings benutzen wir ja das SearchServlet von e-spirit.
Dann enthält man nicht das korrekte Ergebnis und im Suchbegriff ist dann ja auch corporate/tree.....
Ich habe schon mal mit dem Parameter "r" getestet. Das führt aber nur zu Fehlern in exalead?
<form action="do.search">
<input type="text" name="q" value=""/>
<input type="hidden" name="b" value="0"/>
<input type="hidden" name="l" value="de"/>
<input type="hidden" name="hf" value="10"/>
<input type="hidden" name="r" value="Top/source/intranet"/>
Gruß Peter
Hallo Peter,
Das ist schon mal der richtige Ansatz. name="r" verwende ich nicht (hat bei mir nicht funktioniert).
Wir verwenden diesen Weg:
Beim Absenden des Formulars wird ein JavaScript "dazwischen geschaltet" (z.B. onsubmit="return addRefinement();").
In dem JavaScript wird der Inhalt des Feldes "q" geändert. Also
Dann steht z.B. im Feld "q":
Wegen dem "corporate/tree ..." im Suchstring. bei der Ausgabe wird das wieder entfernt. Ebenso alle anderen Angaben, wenn nach bestimmten Merkmalen gesucht wird.
Falls JavaScript keine Alternative ist, verwenden wir in einem anderen Projekt noch die Alternative (da wird nur auf die Source eingeschränkt):
form-Tag: <form id="searchform" action="" method="post" accept-charset="UTF-8">
In jeder Seite, in dem das Sucheingabefeld steht, nachfolgenden Code ganz am Anfang der Datei einfügen:
String searchStringInput = SABConvert.getRequestStringForForm(request.getParameter("help-form"),"",200);
if (!searchStringInput.equals("")) {
String q = "(" + searchStringInput + " language:$CMS_VALUE(#global.language.abbreviation.toLowerCase)$) (corporate/tree:\"Top/Source/SAB_Internet\")";
RequestDispatcher dispatcher = request.getRequestDispatcher("/de/do.search?q="+q+"&b=0&hf=10&l=$CMS_VALUE(#global.language.toString().toLowerCase())$&redirectUrl=$CMS_REF(ss_searchresult)$&errorUrl=$CMS_REF(pageref:"error")$");
dispatcher.forward(request, response);
}
SABConvert.getRequestStringForForm ... = Abfragen des Parameters (bestimmte Länge, null, ... - spez. Methode von uns)
help-form = name des Sucheingabefeldes
$CMS_REF(ss_searchresult)$ = Suchergebnisseite
Funktioniert auch (allerdings auch mit dem "corporate/tree ..." im Ergbnis(Such)string)
Ob und wie das mit dem Feld "r" geht, muss jemand anderes beantworten.
Grüße
Andreas
Hallo Andreas,
also mit dem einfügen von corporate/tree: indexname in die Query funktioniert die Suche.
Ich habe das nur ein wenig anders gelöst.
Durch eine Erweiterung der Klasse SearchServlet wird dies an einer zentralen Stelle gemacht und ist auch um weitere Parameter erweiterbar. In der Jsp Seite muss dann nur eine Variable ergänzt werden.
Irgendwie muss dies aber auch mit dem refinement Parameter r funktionieren.
Wobei dann die Frage ist ob die Suche mit corporate/tree: index nicht schneller ist 😉
Hier noch die Anpassungen für das Servlet:
public class IviSearchServlet extends SearchServlet
{
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
IviRequestWrapper rw = new IviRequestWrapper(request);
String q = request.getParameter("q");
String searchStringOrg = null;
if (q != null)
{
String indexName = request.getParameter("indexName");
if (indexName != null)
{
searchStringOrg = ServletUtil.escape(q);
rw.addParameter("q", q + " corporate/tree:Top/Source/" + indexName);
}
}
super.service(rw, response);
if (searchStringOrg != null)
{
request.getSession().setAttribute("searchString", searchStringOrg);
}
}
}
Gruß Peter
Hallo zusammen,
abschließend möchte ich hier die 3 Lösungsansätze auflisten.
1) Einfügen von corporate/tree: [indexname] in den Suchbegriff
2) Nutzen des Parameters r (refines) in der Suche, dies muss dann
im Formular so definiert sein: <input type="hidden" name="r" value="f/Source/[indexname]"/>
3) Im Server eine Suchstrategie, siehe Search Logics, definieren und im Aufruf der Suche den Namen der Strategie mitgeben.
Der Name des Parameters ist sl.
Ich habe mich für die Variante 1 entschieden. Umgesetzt ist das mit einem angepassten SearchServlet, wie schon beschrieben.
Es ist in der web.xml ein Default Suchindex definiert der aber über einen Parameter aus dem Suchformular überschrieben werden kann.