Search the FirstSpirit Knowledge Base
Hallo,
wie verwenden Exalead:cloudview 5.1.9.24000 (auf Solaris - ich hoffe es liegt nicht daran), dabei ist einem Nutzer folgender Fehler aufgefallen:
Ein Suchtreffer/-Eintrag kan mehreren Produkten zugeordnet sein. Bei der Ausgabe des Merkmales Produkt wird mir aber nur eine Zuordnung angezeigt (obwohl es mehrere gibt).
Ausgabe per:
<search:hits_field key="gaf_produkte"><b>Produkt(e):</b><%=value%> <br /></search:hits_field>
innerhalb von <search:loop_hits>
Bei der Verfeinerung werden alle Produkte angeboten, denen der Suchtreffer zugeordnet wurde. (Ich habe so gesucht, dass nur ein Treffer mit zwei Produkten angezeigt wird)
Also
Sucheintrag ist Produkt A und B zugeordnet
- bei der Ausgabe des Feldes Produkt innerhalb der Iteration über die Suchergebnisse wird nur 1 Produkt angezeigt
- in der Suchverfeinerung werden alle Produkte angezeigt
Muss die Ausgabe anders vorgenommen werden oder handelt es sich um einen Bug?
Grüße
Andreas
Bug wurde in den Versionen 1.7 und 2.1 des EnterpriseSearch-Moduls gefixt.
Hallo Andreas,
ich habe versucht, das mal hier nachzustellen, allerdings mit unserem PushSkript. Ihr verwendet ja ein eigenes, richtig? Unser PushSkript nimmt eine automatische Splittung der Metadaten vor und fügt jeden einzelnen Wert unter demselben Namen als Metaattribut dem Dokument hinzu.
Wird bspw. der Wert "test1,test2,test3" als Metaattribut für ein Dokument gesetzt und mit unserem Skript gepusht, erhält man in der Verfeinerung automatisch die drei Punkte "test1", "test2" und "test3". Bei der Ausgabe des Feldes werden die drei Werte zusammen ausgegeben, jeweils getrennt durch ein Leerzeichen (siehe Screenshot):
Auf Exalead-Seite wurde nichts speziell konfiguriert (kein Splitting oder ähnliches).
Nun wäre es interessant zu wissen, wie euer PushSkript die einzelnen Produkte pusht. Werden die Produkte zu einem Dokument einzeln, jedoch alle unter demselben Namen hinzugefügt, dann sollte in der Ausgabe des Feldes wie oben beschrieben eine durch Leerzeichen getrennte Liste ausgegeben werden.
Viele Grüße
Donato
Hallo Donato,
Ja, wir verwenden ein eigenes Script.
> Nun wäre es interessant zu wissen, wie euer PushSkript die einzelnen Produkte pusht.
...
PushAPIDocumentValues doc = new PushAPIDocumentValues();
HashMap metaAttributes = new HashMap();
metaAttributes.put("gaf_produkte", gafProdukte); // gafProdukte ist eine Kommaseparierte Aufzählung
...
doc.setMetaAttributes(metaAttributes);
...
pushApiGaf.sendDocument(doc);
Die Produkte werden also als Metaattribut übergeben. Somit muss ich m.E. eine Liste übergeben.
Wenn ich für jedes doc das Produkt mit:
metaAttributes.put("gaf_produkte", [NUR EIN PRODUKT]);
setzte und das für jedes Produkt wiederhole, wird ja nur das letzte genommen.
> Auf Exalead-Seite wurde nichts speziell konfiguriert (kein Splitting oder ähnliches).
Bei uns eigentlich auch nicht (so weit ich das überblicke)
" Einstellungen habe ich für das merkmal gefunden (siehe Anlagen)
Grüße
Andreas
Hmm, das ist seltsam. Genauso wie Du es gerade geschrieben hast, bin ich in meinem Test auch vorgegangen:
HashMap map = new HashMap();
map.put("md_text", "test1,test2,test3");
doc.setMetaAttributes(map);
Und dabei habe ich die Ausgabe aus dem Screenshot erhalten.
Wie sieht bei euch denn die Ergebnisseite von Exalead aus? Wird dort ebenfals nur ein Produkt ausgegeben oder sieht man dort beide Produkte unterm Treffer?
Grüße
Donato
In Exalead wird alles so ausgegeben wie gewünscht (also alle Produkte zu einem Treffer).
Bei der Ausgabe der Suchtreffer gebe ich das merkmal Produkte wie folgt aus:
<search:hits_field key="gaf_produkte"><b>Produkt(e):</b><%=value%> <br />
</search:hits_field>
Da wird mir immer nur das letzte aus der Liste (das per Metaattribut übergeben wurde) angezeigt.
Ich kann aber direkt nach nach einem Produkt abfragen:
z.B.
<search:is_in_category fullPath="Top/gaf_produkte/0225">0225</search:is_in_category>
Das liefert für alle Produkte des Treffers true
Grüße
Andreas
Hier mal ein Screenshot meiner Suchergebnisseite, auf der ich das Attribut ebenfalls über
<search:hits_field key="md_text"><br/><b>md_text: </b><%= value %></search:hits_field>
ausgebe:
Wenn das Pushen und die Ausgabe bei uns beiden identisch ist, dann kann es eigentlich nur noch eine Exalead-Einstellung sein. Kannst Du noch mal unter Process -> Analysis -> Document Processors nachschauen, ob da nicht vielleicht doch irgendein Parsing für das Attribut eingestellt ist?
Gruß
Donato
> Wenn das Pushen und die Ausgabe bei uns beiden identisch ist, dann kann es eigentlich nur noch eine Exalead-Einstellung sein.
Sehe ich eigentlich fast auch so. Allerdings sollten sich doch die Exalead-Einstellungen doch auch auf die Exalead-Suche auswirken, oder?
>Du noch mal unter Process -> Analysis -> Document Processors
Ich habe nichts direkt für das Merkmal gefunden.
Unter "csv_encoder - Multi-Context Encoder" ist es aufgelistet. Process Unmapped Contexts ist deaktiviert
Stimmt, da hast Du natürlich Recht. Eine Exalead-Einstellung sollte sich dann auch auf die Darstellung auf der Exalead-Seite auswirken.
Bei mir ist das Metadatum nicht unter csv_encoder - Multi-Context Encoder aufgelistet. Ich habe es aber mal hinzugefügt und es ändert nichts an der Ausgabe.
Kannst Du mal schauen, was ausgegeben wird, wenn Du das Feld nicht über das Tag ausgibst, sondern direkt darauf zugreifst über:
<%= ((com.exalead.searchapi.xmlv10.client.SearchAnswer) pageContext.getSession().getAttribute("searchAnswer")).getHits().get(0).getMeta("gaf_produkte").getValues().get(0).getStringValue() %>
(der Ausdruck gibt nur das Feld des ersten Suchtreffers wieder, also bitte die Suche wieder so einschränken, dass nur ein Treffer ausgegeben wird)
Gruß
Donato
Da wird leider auch nur ein Produkt angezeigt.
Gruß
Andreas
((com.exalead.searchapi.xmlv10.client.SearchAnswer) pageContext.getSession().getAttribute("searchAnswer")).getHits().get(0).getMeta("gaf_produkte").getValues()
liefert:
[0046, 0225]
Das ist Richtig!!
Das letzte get(0) gibt doch bestimmt nur den ersten Wert der Liste zurück, oder?
Gruß
Andreas