Peter_Kluge
I'm new here

Problem mit der Anpassung der Suche bei der Umstellung auf Exalead 5.1

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

0 Kudos
6 Replies
MarcusDau
Occasional Collector

Es betrifft Cloudview V6R2013x.SP2.49247

0 Kudos
aVogt
Returning Creator

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

0 Kudos

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

  • Wert des Feldes "q" holen
  • Source hinzufügen (oder sonstwas - z.B. wenn nur nach bestimmten Merkmalen gesucht werden soll)
  • geänderten Suchstring in "q" speichern
  • Formular absenden

Dann steht z.B. im Feld "q":

  • nach einem bestimmten Wort in einer Source suchen:
    ((Urlaub)) (corporate/tree:"Top/Source/SAB_sfo")
  • und als Bsp. nach bestimmten Merkmalen (die Feldnamen existieren in dem Fall nur bei uns)
    corporate/tree:"Top/Source/SAB_sfo" AND ( corporate/tree:"Top/sfo_vabt/AB") AND (sfo_datever<=2015/01/01))

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

0 Kudos

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

0 Kudos

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.

0 Kudos