Zum Hauptinhalt gehen

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

Kommentare

6 Kommentare

  • Zendesk API User
    Author: MarcusDau - 8/21/2015 8:17

    Es betrifft Cloudview V6R2013x.SP2.49247

    0
  • Zendesk API User
    Author: aVogt - 9/2/2015 8:36

    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

    0
  • Zendesk API User
    Author: Peter_Kluge - 9/2/2015 17:32

    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
  • Zendesk API User
    Author: aVogt - 9/3/2015 6:56

    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
  • Zendesk API User
    Author: Peter_Kluge - 9/10/2015 13:48

    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
  • Zendesk API User
    Author: Peter_Kluge - 12/9/2015 8:59

    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

Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.