Questions & Answers

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

Type a product name