Suche mit mehreren Suchbegriffen erstellen
Hallo zusammen,
ich nutze schönen an verschiedenen Stellen in meinen Datenbanken folgende Arten der Suche
let mySuche := lower(Suche);
select VC where contains(lower(Projekt + text(id) + Kunde.Firmenname), mySuche)
Das funktioniert auch ganz gut. wie bekomme ich es aber hin, das nicht zusammengehörige Begriffe im Suchfeld gefunden werden.
Beispiel:
mySuche := "Adidas Fußballschuhe"
Als Ergebnis wünsche ich mir VC (Verkaufschancen) beim Kunden Adidas mit dem Begriff Fußballschuhe im Projektnamen. oben würde er mir ja nur Ergebnisse anzeigen die entweder mySuche im Firmennamen oder im Projektnamen hat.
In der globalen Suche funktioniert dies ja ähnlich allerdings für alle Tabellen.
3 Antworten
-
Hi zusammen,
falls hier wie ich jemand eine Antwort sucht, kommt hier zumindest eine, die funktioniert, allerdings bezogen auf eine eigene Suche. Kann ich bei Unverständnis auch auf das obige Beispiel ummünzen.
Nehme zudem gerne elegantere Varianten entgegen. Bei vielen Ansichten auf einer Such-Seite leidet die Performance doch etwas unter den vielen Schleifen:
Vorweg:
Das Feld "Suche" bezieht sich auf das Suchfeld und besteht aus der Formel
split(lower(Suchbegriff), " ")
Das Feld "Suchrelevant" in meiner Auftragstabelle ist einfach eine Aneinanderreihung der Felder, die für meine Suche relevant sind. Also "Auftragstitel + 'Externe Nummer' + Standort" usw.
Die Abfrage am Anfang (if myCounter = 1...) dient lediglich dazu, dass keine Schleifen berechnet werden müssen, solange nur nach einem Wort gesucht wird. Ich erhoffe mir davon eine bessere Performance. Gerne bestätigen oder widerlegen.
let myID := this;
let myCounter := cnt(Suche);
let einzelsuche := first(Suche);
let myAuftraege := (select 'Aufträge')[Suchrelevant like einzelsuche];
if myCounter = 1 then
myAuftraege
else
let myAuftraegeVerbleiben := myAuftraege[Nr = 0];
for a in myAuftraege do
let myCounterAuftrag := 0;
for b in Suche do
if a.Suchrelevant like b then
myCounterAuftrag := myCounterAuftrag + 1
end
end;
if myCounterAuftrag = myCounter then
myAuftraegeVerbleiben := array(myAuftraegeVerbleiben, myAuftraege[Nr = a.Nr])
end
end;
myAuftraegeVerbleiben
end -
Ich nutze gerne testx() für Volltextsuche:
let search := deinSuchfeld; let filteredList:= select ... ; filteredList[if search != null then testx( Feld1 + "," + Feld2+ "," + Feld3+ "," , "(?:" + search + ")\.*[^]", "gi") else true end]
Das else true ist notwendig um dir alle anzuzeigen, falls nichts in deinem Suchfeld steht.
Content aside
-
2
„Gefällt mir“ Klicks
- vor 2 JahrenZuletzt aktiv
- 3Antworten
- 588Ansichten
-
4
Folge bereits