Jannis
I'm new here

Datenquelle Eintrag abfrage case insensitive

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

0 Kudos
14 Replies
Jannis
I'm new here

Ich kann doch nicht der erste sein, der in einer Datenbank was suchen möchte...wie habt Ihr es bei Euch implementiert?

0 Kudos
aVogt
Returning Creator

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*

0 Kudos

Oracle sollte sich auch so konfigurieren lassen, dass Suchabfragen case-insensitive beantwortet werden.

0 Kudos
andre
I'm new here

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')
   )
;

0 Kudos

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

0 Kudos

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.

Peter
0 Kudos

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!

0 Kudos

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>

0 Kudos