Od jakiego� czasu zmagam si� z tematem wyszukiwania w�r�d rekord�w
zawierajacycych du�e partie tekstu.
Mam baz� FB. W jednej z tabel jest pole blob (tekstowe) do kt�rego mam
za�adowany zwyk�y tekst. Tego tekstu jest kilka stron. Takich rekord�w mam
ok. 10 ty�.
Chcia�bym zrealizowa� wyszukiwanie rekord�w w tabeli po podaniu fragmentu
wyst�pujacego w tek�cie z pola blob. Obecnie robi� to poprzez odpowiednei
zapytanie SELECT i WHERE, jednak to rozwi�zanie staje si� coraz wolniejsze
(w miar� przybywania rekord�w w tabeli).
Czy jest jaka� alternatywa dla takiego wyszukiwania w bazie?
Nie pragn� gotowca - w celach edykacyjnych wystarczy nakierowanie mnie na
odpowiedni� droge.
Licz� na pomoc.
> Liczďż˝ na pomoc.
Zacznij od archiwum - by�o o tym w tym miesi�cu...
A jak jesteďż˝ aďż˝ tak leniwy, to zapytaj google - np. tak:
Full Text Search Firebird
--
wloochacz
Dzięki Tobie już się do tej technologii przemierzam od jakiegoś czasu.
Niewątpliwie jest to właściwe podejście, szczególnie jeżeli dokumenty
są np. spakowane.
Paweł Krzyżanowski
Nie robi�em niczego takiego, ale na twoim miejscu rozwa�a�bym dwie
nasuwaj�ce si� mo�liwo�ci:
1.
Mo�na poszuka� gotowego rozwi�zania (kt�re zapewne ma swoje zalety i
wady). Trzeba te� po�wi�ci� troch� czasu na nauczenie si� korzystania z
tych rozwi�za�.
2.
Mo�na na przyk�ad za�o�y� dodatkowe tabele. W tabeli zawieraj�cej bloby
w wyzwalaczach BEFORE INSERT OR UPDATE oraz w AFTER DELETE
aktualizowa�by� te dodatkowe table aktualizuj�c list� s��w b�d� fraz
wyst�puj�cych w poszczeg�lnych blobach, ze wskazaniem, w kt�rych
rekordach dane s�owo lub fraza wyst�puje. Wtedy nie szukasz bezpo�rednio
w blobach, ale w tej dodatkowej tabeli indeksuj�cej teksty z blob�w.
Wydaje mi si�, �e nie powinno to by� specjalnie trudne.
--
Pozdrawiam,
Grzegorz Skoczylas
http://gskoczylas.rekord.pl
----------------------------------------------
> 2.
> Mo�na na przyk�ad za�o�y� dodatkowe tabele. W tabeli zawieraj�cej bloby
> w wyzwalaczach BEFORE INSERT OR UPDATE oraz w AFTER DELETE
> aktualizowa�by� te dodatkowe table aktualizuj�c list� s��w b�d� fraz
> wyst�puj�cych w poszczeg�lnych blobach, ze wskazaniem, w kt�rych
> rekordach dane s�owo lub fraza wyst�puje. Wtedy nie szukasz bezpo�rednio
> w blobach, ale w tej dodatkowej tabeli indeksuj�cej teksty z blob�w.
Gotowe rozwi�zanie:
http://www.ibphoenix.com/downloads/FirebirdConf2006/TECH-TPZ303-R/TECH-TPZ303-R.zip
> Wydaje mi si�, �e nie powinno to by� specjalnie trudne.
Tak si� wydaje, ale nie jest to specjalnie �atwe, je�eli chce mie� si�
obs�ug� s��w kluczowych, s��w stop, operator�w pe�notekstowych (np.
near) itd., itp.
Tak czy siak, podany przeze mnie link zawiera opis i implementacjďż˝
rozwi�zania quasi FTS i warto chocia� przeczyta� za��czon� prezentacj�...
--
wloochacz
ciach
Wdzi�czno�� moja nie zna granic :-)
Skoro teraz ju� bez problemu mog� wyszuka� rekordy zawieraj�ce podany ci�g
to czy polecenia sql umo�liwiaja mi dok�adne zlokalizowanie miejsca
wyst�pienia tej zmiennej?
Pos�u�� si� przyk�adem:
W tabeli bazy mam rekord zawieraj�cy taki tekst:
"123456789"
Wyszukanie tego rekordu odbywa si� poprzez select, czyli
SELECT * FROM BAZA WHERE POLE='56'
Chcia�bym zlokalizowa� miejsce wyst�powania szukanego s�owa po to, aby m�c
pobra� np. 2 znaki wyst�pujace przed szukan� fraz� oraz 2 znaki po szukanej
frazie, czyli uzysa� co� takiego:
"345678"
Oczywi�cei mog� dokona� tego przy u�yciu posex, ale czy niema prostrzej
metody?