Onlangs maakte
Diana Aué van e-office voor een klant een agent die een import deed. Via een
FTSearch werden er bestaande documenten in verschillende databases (met hetzelfde design) gezocht die moesten worden ge-update.
de foutmelding
Nu bleek in één database deze zoekcode de volgende fout te geven: "Query is not understandable".
Dit was de query: [MobileNumber]="0610014373".
Wanneer de code in een copy van de database met alleen een subset aan documenten gebruikt werd - om te testen- ging alles wel goed.
Ook in een andere database met hetzelfde design ging het zoeken geheel zonder fouten.
het zoeken naar de oorzaak
Mogelijke oorzaken van het probleem:
- het veld is niet van het type Text, of op sommige documenten toch van het type Number
--> dit bleek niet het geval te zijn. Het veld was type Text en ook op alle document van het type Text
- de FTindex zou misschien corrupt zou zijn
--> verwijderen (ook op file niveau) en het opnieuw aanmaken van de index was helaas niet de oplossing van het probleem
- er zit ergens een corrupt document in de database
--> ook het uitvoeren van een compact proces door een beheerder bood geen oplossing
het inzicht
Toen het ook voor ons erg lastig werd dit op te lossen, begon er iets te dagen. Ooit had Diana eens van iemand gehoord dat als een veld ooit als een
Number type geïndexeerd is geweest in een database, ditzelfde veld nooit meer goed als een
Text veld geïndexeerd kan worden.
de verklaring
Nu bleek dat dit veld inderdaad jaren geleden een
Number veld was. Nu is het een
Text type, en op alle content in de database is het van het type
Text. Ook het opnieuw aanmaken van een FTindex zou geen oplossing bieden voor dit probleem.
Dit verklaart ook waarom het testen van de code in een copy van de database wel goed ging: in die copy/ft-index is het veld nooit van het type
Number geweest en dus kon het veld gewoon goed geïndexeerd worden. Ook in de andere databases waarin gezocht werd ging het zoeken goed omdat die databases pas later zijn aangemaakt en daarin het betreffende veld altijd van het type
Text is geweest.
de oplossing
Het oplossen van het probleem was nu eenvoudig. We hebben een nieuw veld van het type
Text aangemaakt, en die gevuld met de waarde uit het originele veld. Het zoeken op het nieuwe veld verliep vervolgens zonder problemen.