![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 29.03.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam nastepujacy problem. Tabela SQLowa z tekstami oraz tabela ze slowami indeksowymi. Slowa indexowe tworza sie podczas dodawania tekstu do bazy, wywalane sa niepotrzebne znaki oraz slowa nie znaczace nic podczas wyszukiwania (np, a, lub itp), dodatkowo obliczana jest ilosc wystapienia danego slowa w tekscie. Sprawa wyszukania niby prosta. Wpisujemy slowo np 'minister' i znajduje mi 30 tekstow posortowanych wg trafnosci (ilosc wystapien w tekscie). Wylistowanie wynikow. Wszyskto pieknie. Problem pojawia sie w momencie wpisania do wyszukiwarki 'minister kalisz wyjechal do moskwy'. Obecnie program mam tak zrobiony ze szuka slowa minister, potem kalisz, podem wyjechal i na koncu moskwy. I wyswietla wyniki, z tym ze nie wylatuja teksty gdzie np bylo 30 wystapien slowa minister a ani jednego kalisz, wyjechal i moskwy. A tekst w ktorym wszystkie te slowa wystepuja wyskakuje gdzies na koncu. Zapytanie do bazki robi sie takie :
Wyszukiwarka jest swietna jezeli ktos wyszukuje 1 slowo. Problem jest jak ktos szuka frazy. Jak byscie zaprojektowali wyszukiwarke reagujaca na frazy, z uzyciem tabeli slow indeksowych i by byla wyliczana trafnosc ? Ten post edytował ElemenT 13.05.2005, 14:42:16 -------------------- lighttpd 1.4.22 / PHP 5.2.9 / MySQL 5.0.51 at hostname.pl
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 35 Pomógł: 0 Dołączył: 1.06.2005 Ostrzeżenie: (0%) ![]() ![]() |
Myślę że lepiej będzie stworzyć tabele z indexem typu FULLTEXT, następnie wyszukiwać przy pomocy AGAINST i MATCH.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Tu się zgadzam - co do trafności - najłatwiej jest to stworzyć na podstawie ilości wystąpień danych slow poprostu
![]() ![]() -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]()
Post
#4
|
|
![]() Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
Kiedys na forum byl taki watek w ktorym dyskusja byla na temat porownywania stringow i pokazania w ilu procentach sa podobne.
Poszukaj. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 29.03.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
dobra poradzilem sobie
wyszukuje pieknie i wstawia % trafnosci ![]() -------------------- lighttpd 1.4.22 / PHP 5.2.9 / MySQL 5.0.51 at hostname.pl
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
To sie podziel :]
-------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 29.03.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
tak jak napisal marcin
fulltext z pola ktore ma tylko tekst, wywalone tagi html itp. potem match , against
przy sprawdzaniu poprawnosci wyszukiwanych danych zrobilem takie cos dalo mi to max punkt odniesienia - 100% potem zaladowanie informacji o szukaniu do bazy szukaj - wlasnie ta trafnosc, w jakich dzialach sie szuka, czego sie szuka itp. przeladowanie stronki i zapytanie wyliczenie procentu
tak po krotce w dzialaniu : wyszukiwarka -------------------- lighttpd 1.4.22 / PHP 5.2.9 / MySQL 5.0.51 at hostname.pl
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 9.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
moglbys to jeszcze raz wytlumaczyc jak glupkowi
![]() bo uzywajac match against w swojej wyszukiwarce raz wyszukuje mi frazy raz nie od czego jest to uwarunkowane bo z tego co czytalem moje rozumowanie na temat tej funkcji jest takie ze porownuje ona slowa w kolumnach z podana fraza. dobrze wszystko ok tylko dlaczego raz wyszukuje raz nie wyszukuje mi wskazanych wyrazow jesli sa one w bazie ![]() robie tym oto twoim sposobem
i jeszcze jedno
nie rozumie skad masz te dwa rozne elemnty tablic z trafnoscia ![]() moglbys mi to wyjasnic dzieki i pozdrawiam ![]() -------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 29.03.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
jezeli wynikow jest wiecej niz polowa rekordow dla bazy to nie znajduje nic
ma to na celu zmniejszenie obciazenia bazy tak samo nie znajdzie ci nic jak szukasz w bazie ktora ma 5 rekordow wtedy mozesz uzyc funkcji sql np like (%slowo%) co do samej funkcji
$row[trafnosc] - to trafnosc wyrzuconego rekordu w pkt $search[trafnosc] - to najwieksza trafnosc jako pkt odniesienia robisz iloczyn i obliczasz procent Ten post edytował ElemenT 13.12.2005, 14:05:34 -------------------- lighttpd 1.4.22 / PHP 5.2.9 / MySQL 5.0.51 at hostname.pl
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Cytat(ElemenT @ 2005-12-13 15:03:13) $row[trafnosc] - to trafnosc wyrzuconego rekordu w pkt $search[trafnosc] - to najwieksza trafnosc jako pkt odniesienia robisz iloczyn i obliczasz procent Najwyższa trafność nie jest koniecznie trafnością 100%. Może być taka sytuacja, że najlepsze tranfienie będzie miało tylko 50% zgodności z frazą wyszukiwaną... |
|
|
![]()
Post
#11
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Cytat jezeli wynikow jest wiecej niz polowa rekordow dla bazy to nie znajduje nic ma to na celu zmniejszenie obciazenia bazy A nie lepiej jest wykluczyc podzapytaniem rekordy w ktorych nie ma pojedynczych slow? A dopiero wtedy szukanie frazy. Co do wydajnosci bedzie lepsze niz przeszukiwanie calej bazki i szukajac okreslonej frazy. Odnosnie pierszego zapytania sproboj to troche ulepszyc bo z tym IN to CI nie przejdzie, prosty test wstaw kilka milionow rekordow i wpisz np 20 slow do szukania. -------------------- |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 3.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
A jako że bark tu informacji o tym że to ma być MySQL, to ja polecam PostgreSQL-a + TSearch2. Dzięki niemu można nawet wyszukiwać w bazie słów "podobnych" do szukanego (np. w innej postaci).
Tu takie tam wprowadzenie: http://www.sai.msu.su/~megera/postgres/gis...h-V2-intro.html Pozdrawiam Marcin Staniszczak |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 17:26 |