Az egyik cégnek írtam full text keresős kódot. Az egész elég egyszerű stuff, full text catalogot kell létrehozni, és megjelölni az indexelendő oszlopokat. A catalog lehet accent sensitive vagy nem (ékezet számít-e), de mindig case insensitive (kis-nagy betű nem számít). A táblák oszlopainál meg kell adni egy word breakert, ez tördeli fel a szöveget szavakra, ezt indexeli, ebben keresünk.
A keresést az sql where feltételben contains és társai kulcsszavakkal lehet elérni. Én a containstable-t szoktam használni, mert így hatékonyan lehet limitálni a visszaadott halmazt, részletekbe most nem megyek bele.
Sokan nem tudják, de a bináris tartalomban is lehet keresni. Ehhez meg kell adni egy plusz oszlopot, amiben a tartalom file extensionjét kell megadni. Ez alapján kikeresi a registryben a megfelelő IFilter (ez még com) implementációt, ami kiszedi neki a szavakat a bináris moslékból. Van pl. pdfhez, htmlhez, office doksikhoz, képekhez (állítólag ocrezik, nekem még nem működött), stb. Szóval hatékonyan lehet kerestetni nagy doksikban is.
A probléma esetünkben az volt, hogy C#-ra adott vissza eredményeket, c#-ra nem. Ez ezért fura, mert a case sensitivity-t nem is lehet állítani, alapban nem az.
Már elkezdtem írni az ms fórumra, amikor a precíz dokumentálás érdekében elkezdtem bepasztázni a DDLeket:
CREATE FULLTEXT CATALOG [xxx] WITH ACCENT_SENSITIVITY = OFF; CREATE FULLTEXT INDEX ON [KB].[Article]( [ArticleText] LANGUAGE [English], [ArticleTitle] LANGUAGE [English]) KEY INDEX [PK_Article] ON ([xxx], FILEGROUP [PRIMARY]) WITH (CHANGE_TRACKING = AUTO, STOPLIST = SYSTEM);
Na, hol a hiba?
Rossz volt a word breaker! Véletlenül angolt állítottam be. Ezzel már egyszer szívtam, akkor az ékezetes keresés volt beteg, főleg a híres őű betűink miatt.
Mi a helyes, ha magyar szöveget indexelünk? Hungarian sajnos nincs. Szlovák van, román van, ukrán van. Magyar nincs. Mi marad nekünk? Neutral. Mi ilyen langyi nemzet vagyunk, ilyen semlegesek, a mi karaktereink mellett csak ezzel lehet rendesen kerestetni. Persze, ragozást, szótőkeresést ne várjunk így el, ami a többi nyelvben rendesen van implementálva.
De örüljünk annak, ami van, neutral beállítás mellett már mindkét szí sárpot megtalálja.
Hogy angol mellett miért nem? Nem tudom.