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