Fick en rolig följdfråga på problemet jag inledde denna tråd med. Frågan gällde vad blir prestandan på sökningar där man söker på wildcards. Säg att man behöver söka på tex chassinummer eller registreringsnummer på en bil, serienummer på en pistol eller liknande där man bara har tillgång till ett par siffror i rätt positioner, men inte övriga.
I FileMaker finns det två typer av wildcards:
* Som betyder ett eller flera tecken
@ Som betyder endast ett tecken (jepp, det är helt idiotiskt att ha @ som sådan symbol, det har de säkerligen ångrat några gånger, men som vanligt finns det workarounds på det med).
En sökning på en wildcard O*LA gav svar på 10-15 sekunder (jag räknade sekunder, hade inget tidtagarur). En sökning på O@A@ gav svar på ungefär samma tid. En sökning på O@AA (ett wildcard) tog ca 30 sekunder
Detta var ett intressant problem så jag bestämde mig för att kolla om man kunde få snabbare sökningar via relationer. Ett antal uppdateringar av index i 5 miljoner poster senare, kan jag rapportera att det går att få ögonblickliga sökresultat även på detta.
Lösningen
Först skapade jag fyra fält som "plockade ut" bokstaven för den positionen (position 1-4), så att fältet bara innehåller en bokstav. Använde funktionen Left och Middle. Jag kallar de för char1-char4.
I posten där ordet är tex SBFG så finns alltså S i ett fält, B i ett annat osv.
Sedan skapade jag fyra globala sökfält, ett per position. I dessa skall man då kunna skriva S i position 1, lämna position 2 tomt och fylla i F i position 3 och lämna det sista tomt.
Sedan skapade jag fyra beräkningsfält som fungerar sålunda: Om sökfältet för positionen innehåller något, så returneras sökfältets innehåll. Är det tomt returneras istället hela alfabetet och alla siffror på varsina rader.
Sedan skapade jag en självrelation (en relation till samma tabell) baserad på sökfälten (beräkningsvarianten av dem) på vänster sida och på höger sida char1-char4-fälten.
Slängde in dessa fält och en portal i en layout och jag kan nu söka och även här är resultaten ögonblickliga. I portalen får jag fram alla poster som innehåller de bokstäver jag anger i de olika positionerna direkt.
Coolt!
Återkommer med bilder när databasen indexerat ytterligare en grej...