Aktualności - Moim zdaniem
Image
MOIM ZDANIEM
Autor

Partnerstwo firm Citrix i Microsoft było burzliwe i interesujące od zawsze - niezależnie od tego, czy w modzie były akurat usługi terminalowe, czy wirtualizacja i chmury obliczeniowe. Wielu zadaje sobie pytanie, czy na dłuższą metę da się współpracować oferując niemalże identyczne produkty na wąskim jak by nie patrzeć rynku, w tym przypadku hypervisorów? Citrix mówi, że się da i że nie konkuruje z Microsoftem - a co na to Microsoft?

21.10.2010
19.10.2010
16.07.2010
Image
Nowe oprogramowanie do serwerów sieciowych QNAP – wersja V3.3
01.07.2010
QNAP Systems udostępnił nową wersję firmware do obsługi swoich dysków sieciowych NAS. Aktualizacja V3.3 wprowadza nowe funkcje oraz udoskonalenia,...  
Analitycy Gartnera i IDC są zgodni: na umowie VMware-Novell skorzystają klienci obu firm – i one same
24.06.2010
W tym miesiącu firmy VMware i Novell ogłosiły rozszerzenie strategicznego partnerstwa o nową umowę OEM, na mocy której VMware będzie dystrybuował i...  
Nowe produkty HP do zarządzania usługami
22.06.2010
HP zaprezentował nowe produkty do zarządzania usługami, które pomogą klientom wdrażać hybrydowe modele dostarczania aplikacji. Obejmują one...  
Oracle prezentuje pakiet oprogramowania Oracle Business Process Management Suite 11g
22.06.2010
Firma Oracle zaprezentowała pakiet oprogramowania Oracle Business Process Management Suite 11g, który pozwoli klientom obniżyć koszty, lepiej...  
Cryptzone zaprezentował AppGate Satellite
18.06.2010
Cryptzone przedstawił dziś nowy pomysł dotyczący kontroli dostępu do sieci – AppGate Satellite. Jest to sposób na budowę bezpiecznych wirtualnych...  
Asmax prezentuje nowe urządzenie klasy NAS
18.06.2010
W ofercie Veracomp jest już dostępne nowe rozwiązanie kategorii NAS - Asmax GIGA NAS-Print Serwer. Jest to jedno z najmniejszych urządzeń NAS,...  
Oracle rozszerza ofertę rozwiązań do wirtualizacji komputerów biurkowych
14.06.2010
Nowy klient Sun Ray oraz nowa wersja oprogramowania Oracle Virtual Desktop Infrastructure zapewniają wyższy poziom wydajności, elastyczności i...  
Niższe ceny na serwery i dyski sieciowe QNAP
14.06.2010
EPA Systemy wprowadziła nowy cennik na dyski i serwery sieciowe QNAP. Podstawowe modele, kierowane głównie do odbiorców indywidualnych oraz małych...  
Nowy ProxyAV 1200 firmy Blue Coat chroni przed złośliwym oprogramowaniem
09.06.2010
Firma Blue Coat Systems rozszerzyła rodzinę urządzeń Blue Coat ProxyAV o model Blue Coat Proxy AV1200, służący do skanowania treści w czasie...  
Exploity – najczęściej wykorzystywane szkodliwe narzędzia w maju
08.06.2010
Kaspersky Lab prezentuje listę szkodliwych programów, które najczęściej atakowały użytkowników w kwietniu 2010 r. Podobnie jak w poprzednich...  
Image

Full-Text Search po polsku szuka kiepsko

22.01.2010 23:00, Autor: Wojciech Kowasz (Docent), Komentarze (12)

Wierzyć się nie chce, że przez ładnych kilka lat całkiem poważny moim zdaniem błąd w wyszukiwaniu pełnotekstowym SQL Servera nie został przez nikogo dostrzeżony, a raczej zgłoszony do Microsoftu – bo być może ktoś zauważył, że Full-Text Search zwraca czasem różne zestawy wyników, ale nie miał możliwości, czasu lub chęci by problem eskalować. My zadaliśmy sobie ten trud, bo wyszukiwarka jest bardzo ważnym elementem wszystkich naszych witryn i powinna działać dobrze. Okazało się, że faktycznie obsługa polskiego języka w FTS jest zrobiona po prostu źle.

Czasy, gdy do wyszukiwania w bazach danych używało się predykatu LIKE chyba już minęły – tam, gdzie ruch w wyszukiwarce liczy się w zapytaniach na sekundę, a tabele zawierają miliony rekordów zwykły LIKE po prostu się nie sprawdza. Również sama precyzja wyników nie jest w takim scenariuszu zadowalająca. Po to wymyślono wyszukiwanie pełnotekstowe, by całą treść zaindeksować, a wyszukiwanie przebiegało błyskawicznie i na dodatek bardziej „inteligentnie”. W MySQL, z którego korzystaliśmy w dobrychprogramach przez całe lata wyszukiwania pełnotekstowego najpierw nie było, a później jak już było, to prezentowało się bardzo blado. Wraz z niedawną migracją na ASP.NET nie było już jednak żadnych przeszkód, by zaprząc do pracy wbudowany w SQL Server i rozwijany od dawna Full-Text Search, a od kilkunastu tygodni bardziej intenstywnie pracujemy nad tym, by wyniki były bardziej adekwatne do oczekiwań pytających.

Full-Text Search w SQL Server 2008 (skupmy się na tej wersji, bo tej właśnie używamy) oferuje dwa predykaty służące do odpytywania indeksu FTS. Pierwszy z nich, CONTAINS, bardzo przypomina LIKE, bo wykonuje dopasowanie wyrazu lub jego prefiksu (lub kilku wyrazów/prefiksów). Tak na marginesie, od lat klienci na całym świecie żądają od Microsoftu wprowadzenia możliwości wyszukiwania po sufiksach (czyli wpisując „office” dostajemy też „openoffice”), ale funkcji tej nadal nie ma i nie wiadomo, czy będzie. Obejściem problemu jest trzymanie w oddzielnej kolumnie tego samego tekstu, tyle że pisanego od prawej do lewej (pomaga w tym wbudowana funkcja REVERSE), dzięki czemu szukanie po prefiksie daje nam efekt jakbyśmy szukali po sufiksie. Generalnie CONTAINS dość dobrze sprawdza się do dokładnego wyszukiwania bardzo konkretnych wyrazów czy krótkich fraz. Do wyszukiwania kontekstowego, w obszernych tekstach bardziej nadaje się predykat FREETEXT. Szuka on wystąpień całych wyrazów, a ponadto umożliwia szukanie form fleksyjnych danego wyrazu czy nawet jego synonimów (jeśli wcześniej skonfigurujemy tezaurus). Szukamy frazy „zarządzanie siecią” i dostajemy dokument „o zarządzaniu sieciami” – całkiem sensowne, ani LIKE ani CONTAINS nie zwróci nam takich wyników i to w tak szybkim czasie.

Niestety gdy zaczęliśmy implementować FREETEXT pojawiły się pewne problemy. SQL Server raz zwracał pełen zestaw wyników, czyli wystąpienia danego słowa i jego wszystkich form fleksyjnych, a raz po prostu ignorował formy fleksyjne i szukał tylko ściśle tej formy, jaka została wpisana w wyszukiwarce. Trwające kilka dni intensywne próby debugowania problemów spełzły na niczym, a że akurat była okazja, zgłosiliśmy problem bezpośrednio do pomocy technicznej Microsoftu. Problem szybko został eskalowany do grupy produktowej SQL Servera i przez trzy tygodnie kilku inżynierów dość intensywnie pracowało (także zdalnie na naszych serwerach) nad ustaleniem przyczyny.

Dopiero dzisiaj otrzymałem e-mail, w którym ostatecznie uznano problem za zbadany – to znaczy udało się opracować obiektywną metodę jego reprodukcji. Za przyczynę wstępnie uznano polski word-breaker, komponent odpowiedzialny za przetwarzanie i przygotowywanie wpisanej frazy do wyszukiwania. Dzięki poleceniu sys.dm_fts_parser udało się ustalić, że czasami word-breaker po prostu nie generuje form fleksyjnych i dlatego nie są one wyszukiwane w indeksie. Co ciekawe, obsługa języka polskiego w Full-Text Search nie jest realizowana przez Microsoft – wraz z SQL Serverem dostarczane są biblioteki tworzone przez polską firmę TiP i trzeba je ręcznie włączyć w rejestrze postępując według instrukcji na stronach MSDN. Podobnie jest z językiem duńskim i tureckim, resztę języków robi już bezpośrednio Microsoft.

Jak zreprodukować problem? Trzeba utworzyć sobie bazę danych z tabelą i jakimś przykładowym tekstem (trzeba oczywiście zadbać o umieszczenie odpowiednich form fleksyjnych - dla przykładu niech będzie to wyraz "system" i formy "systemowi", "systemów" itp.), a następnie załączyć na tej tabeli FTS z polskim językiem na domyślnych ustawieniach. Przed testem należy zrestartować SQL Server i na takim czystym środowisku odpalić polecenie:

USE Baza
GO

DECLARE @i int
SET @i=1

WHILE @i < 10000
BEGIN
   SELECT * FROM dbo.Tabela WHERE FREETEXT(Kolumna, 'system')
   SET @i=@i+1
END
GO

Czasami już wtedy widać rezultaty w postaci nieprawidłowych wyników - zwracane są tylko wiersze zawierające "system", w wynikach nie ma wyrazów "systemowi", "systemów" itp. Jeśli wszystko jest OK, to w trakcie wykonywania tej pętli w drugim oknie edytora należy wykonać to samo zapytanie, tyle że już bez instrukcji WHILE. W tym momencie wyniki zwracane w jednym lub drugim oknie na pewno już będą nieprawidłowe. Stan taki utrzymuje się jakiś czas, by po chwili znów zwracane wyniki były poprawne. Znowu jednak wystarczy kilka kolejnych zapytań, by otrzymywane rezultaty były niewłaściwe.

Brzmi dość magicznie i trochę to trwało, zanim inżynierowie z pomocy technicznej uwierzyli :-) Zobaczyć znaczy jednak uwierzyć i teraz czekam na kontakt, co dalej – błąd został potwierdzony, tylko rozwiązania póki co brak... Miejmy nadzieję, że uda się coś na ten problem poradzić. Jak tylko otrzymam jakieś konkretne informacje od Microsoftu, dam oczywiście znać :-)

Komentarze

Orion
25.01.2010 1:43

Orion
 

I tak oto kochany MS wspiera bardzo szczerze i równo wszystkich użytkowników dowolnego kraju :P
Szczerze - dla mnie zakrawa to na kpinę ze strony tak znanej firmy.

 
olo
28.01.2010 8:29

olo
 

nie dość, że użytkownicy X360 nie mają Live-a w Polsce, to my nie mamy Full-Text Search-a. MS naprawdę ma Polskę za kraj 3. kategorii, smutne. Hej, przecie my też jesteśmy w UE...

 
Limak
29.01.2010 0:20

Limak
 

do MySQL / pgSQL jest Sphinx (http://www.sphinxsearch.com) - opensource'owy full-text-search ;) ale wiem czy to w ogole zadziała z SQL serverem... raczej nie. Warto tylko dodać, że Sphinx posiada gotowe API do php,ruby, pythona, javy i c, oraz dostępne są gotowe wtyczki, np do phpBB, Drupala czy mediaWiki.

 
Limak
29.01.2010 0:28

Limak
 

o, znalazłem w dokumentacji: do Sphinxa, można podpiać MS SQL server (można też do nawiązania połączenia z bazą wykorzystać ODBC) - info: http://www.sphinxsearch.com/docs/current.html#conf... :)

 
Docent
29.01.2010 9:31

Docent
 

@Limak:

Sphinksa widzieliśmy już jakiś czas temu, gdy szukaliśmy alternatywy dla FTS w MySQL wykorzystywanego aktualnie przez nasze fora phpbb. Wtedy chyba o ile mnie pamięć nie myli nie było wersji na Windows albo była w strasznych powijakach... Jeśli chodzi o Sphinx dla MSSQL to... sorry, nie mam jakoś ochoty tego próbować, po pierwsze spodziewam się marnych efektów (doświadczenie z łączenia Open Source'owych projektów do rozwiązań komercyjnych nie zachęca), po drugie jak słyszę ODBC to włos się jeży ;)

 
Limak
29.01.2010 20:06

Limak
 

acha:) no teraz juz wersja na windowsa jest. A co do mssql, to zgodze sie - nie wiem czy jest sens tego próbować... sphinx jest typowo pod MySQL napisany..
a co do ODBC to zle mnie zrozumiales - dla mssql jest natywne wsparcie (tak samo jak dla Mysql i pgSQL), a oprocz tego dla odbc:)

 
breja
(niezalogowany)
07.02.2010 21:34

breja (niezalogowany)
 

Tez jestem za SPHINXem i baza tu nie ma wiekszego znaczenia wystarczy by potrafila wypluc zawartosc z siebie do indexu sphinxa ;)

 
thi
(niezalogowany)
18.02.2010 9:23

thi (niezalogowany)
 

Z obsługą jezyka polskiego to ma problemy chyba co drugi program "spolszczony" a czasem i polski.
Szkoda gadać, chyba obsługa języków powinna być od nowa przemyślana, unormowana i zaimplementowana.
Taka ogólna moja dygresja.

 
prachwal
(niezalogowany)
20.02.2010 0:11

prachwal (niezalogowany)
 

polska język trudna język ;)
co do ODBC - chyba można wybrać jakiś sensowny sterownik i w miarę pracować

 
Slawek Guzek
(niezalogowany)
26.04.2010 12:00

Slawek Guzek (niezalogowany)
 

..."a przyczynę wstępnie uznano polski word-breaker.."

Jak dla mnie to lekko bez sensu wytlumaczenie..

Word-broker jest odpowiedzialny za podzielenie tekstu na pojedyncze wyrazy, ktore to potem sa przesylane do komponentu stemmer, ktory to generuje formy fleksyjne na podstawie tezaurusa.. W tym konkretnym przypadku, wyszukiwania pojedynczego slowa, word-broker moze albo przekazac to slowo dalej albo nie. Rezultatem uszkodzenia czy bledu w tym komponencie byloby zatem albo zwrocenie jakisch wynikow, albo nie zwrocenie niczego..

W moim przekonaniu word-broker jest jak najbardziej w porzadku, a uwage nalzaloby skierowac na dalsze komponenty , w czegolnosci Stemmer. Jesli Microsoft/TiP zaczna szukac bledu w word-broker to na dzialajaca poprawke raczej dluuuuugo poczekamy...

 
Daniel
(niezalogowany)
31.05.2011 13:00

Daniel (niezalogowany)
 

Czy poniższy (lub inny) fix rozwiązuje problem?
http://support.microsoft.com/kb/980350

 
Docent
31.05.2011 20:14

Docent
 

@Daniel:

Tak, tutaj artykuł podsumowujący całą sprawę:
http://www.techit.pl/MoimZdaniem/KB980350-czyli-na...

 

Dodaj komentarz

Autor: