Search the FirstSpirit Knowledge Base
Hallo,
ich möchte mit FirstSpirit Integration (FSI) etwas in einer Datenquelle suchen. Dabei sollte Groß- und Kleinschreibung ignoriert werden.
In "normalem" SQL würde ich sowas in der Art wie "where tolower(name) like tolower(suchbegriff)" machen (richtige Syntax sei jetzt mal dahingestellt)
Wie mache ich das aber bei FSI?
<QUERY entityType="datenquellenname">
<LIKE attribute="name_DE" datatype="java.lang.String" value="<%=searchfor%>"/>
</QUERY>
"searchfor" ist der Suchbegriff, der bereits escaped und ggf. in Kleinbuchstaben daher kommt...z.B: "Test"
Datenquelle sieht in etwa so aus:
Test 1
Test 2
Test 3
Suchbegriff "Test" funktioniert, "test" nicht. (Oracle DB)
Die Hilfe und das Handbuch haben mich leider nicht weiter gebracht...
Vielen Dank und viele Grüße
Jannis
Ich kann doch nicht der erste sein, der in einer Datenbank was suchen möchte...wie habt Ihr es bei Euch implementiert?
Hallo Jannis,
die Frage hatte ich schon mal dem Helpdesk (2008) gestellt. Ich glaub aber auch, dass sich da nichts geändert hat:
> Gibt es in der o.g. Content-Select-Funktion so eine Einstellung?
> Beim "normalen SQL-Select" würde man ein "upper" oder "lower" in der Abfrage angeben.
absolut richtig. Doch in FirstSpirit implementierte Datenbankschnittstelle ist ja datenbankunabhängig. D.h. FirstSpirit gibt schon die Sortierung vor und leitet diese an die DB weiter, doch letztendlich liegt die Entscheidung der Sortierungsart bei der DB selbst. Unter Oracle kann man (meines Wissens nach) einstellen, dass diese bei der Sortierung per default zwischen Klein-/Großschreibung nicht unterscheidet. Eine andere Lösung/Workaround kann ich Ihnen hier (zumindest mit FS 4.0) leider nicht bieten.
Wenn es nicht gerade riesen Datenmengen sind, könnte man über alle Einträge iterieren (also kein <LIKE attribute..> angeben - was natürlich nicht performant ist) und dann selbst den test durchführen. Aber vieleicht hat noch jemand anderes eine hilfreiche Idee.
Grüße aus Dresden
Andreas
Danke. Ja ich hab dann die "von Hand Methode" implementiert, damit es erstmal überhaupt geht - sprich "Datensatz so stark einschränken wie es geht und dann programmatisch prüfen ob das aktuell auszugebene Dokument dem Suchbegriff ähnelt..." Ich hoffe ja, dass da ein paar Cachingfunktionen im Hintergrund noch halbwegs annehmbare Performance leisten können....*seufz*
Oracle sollte sich auch so konfigurieren lassen, dass Suchabfragen case-insensitive beantwortet werden.
evftl. hilft folgendes weiter
http://www.dba-oracle.com/t_case_insensitive_indexes_searches.htm
create index
nlsci1_gen_person
on
MY_PERSON
(NLSSORT
(PERSON_LAST_NAME, 'NLS_SORT=BINARY_CI')
)
;
Hallo,
also unsere (bereits so konfigurierte) Oracle-DB liefert bei dem Statement "select * from table_name order by name asc" folgende Auflistung:
achim
Albert
Bruno
claus
dieter
In FS (R4) mit der Abfrage
<QUERY entityType="table_name">
<ORDERCRITERIA attribute="name" descending="0"/>
</QUERY>
Folgendes:
Albert
Bruno
achim
claus
dieter
Gibt es hier noch weitere Möglichkeiten, die Auflistung wie aus der DB zu erhalten? Vielleicht ein Attribut oder Flag? Denn anscheinend ändert ja FS die erhaltene List und gibt diese gruppiert nach Groß- und Kleinschreibung weiter bzw. aus.
Das ist ein Punkt, der unserem Kunden wichtig ist. Oder kann / soll dies als ChangeRequest diskutiert werden?
Danke vorab für eine Antwort,
Grüße aus Hamburg,
Matthias Przybylski
FirstSpirit selber sortiert nichts automatisch um, eventuell ist das eine Eigenschaft des JDBC-Treibers?
Ansonsten gibt es natürlich noch die Möglichkeit, im Template manuell zu sortieren.
Das manuelle Sortieren kann ich wohl ncith umsetzen, da es sich um eine Combobox in einem Eingabeformular handelt, welche auf eine andere Tabelle zugreift und für die Sortierung eine Abfrage nutzt.
Also wie folgt:
<CMS_INCLUDE_OPTIONS type="database">
<LABELS>
<LABEL lang="*">#item.name</LABEL>
</LABELS>
<QUERY name="data.sort_mytable"/>
<TABLE>data.mytable</TABLE>
</CMS_INCLUDE_OPTIONS>
Wir prüfen mal den Treiber...
Danke für den Tip!
Hallo,
die manuelle Sortierung müsste aber auch funktionieren (ohne es jetzt getestet zu haben!) in dem sie einfach das QUERY-Tag erweitern
<QUERY name="data.sort_mytable">
<ORDERCRITERIA attribute="ATTRIBUT" descending="NUMERISCHER_BOOLESCHER_WERT" />
</QUERY>