Zobacz temat
Mechanizm wyszukiwania w MySQL
|
|
m_i_n |
Dodany dnia 22.05.2007 19:19:46
|
Bywalec Postów: 836 Pomógł: 3 Data rejestracji: 15.02.2006 10:04 |
Czy ktos sie orientuje jak dziala wyszukiwanie w MySQL? Zaluzmy ze szukamy po jakims polu tekstowym. Jak to jest realizowane? chyba sprawdzanie kazdego po kolei nie wchodzi w rachube. Tak samo jak na glownej stronie mamy ost. aktywne tematy, tam nastepouje wyszukiwanie po dacie (wlasciwie sortowanie), watpie aby byly po kolei wszystkie rekordy sprawdzane bo trwalo by to wieki. Orientuje sie ktos w tej kwesti? konkretnie o algorytm mi chodzi. //Przenoszę - jantom Edytowane przez jantom dnia 22.05.2007 19:22:05 |
|
|
Wścibski Gość |
Dodany dnia 30.12.2024 19:33:59
|
Pan Kontekstualny Postów: n^x Data rejestracji: Zawsze |
|
IP: localhost | |
SebaZ |
Dodany dnia 22.05.2007 21:00:59
|
Zaawansowany Postów: 1598 Pomógł: 2 Data rejestracji: 10.11.2004 22:39 |
PHP=FUSION = prostota! Nie ma żadnego algorytmu wyszukanego. Sprawdzana jest data ostatniej aktywności, porównywana z postami i wyświetlane tematy gdzie został napisany post po ostatniej aktywności. Zadawanie pytań na forum to nie jest prawo, to jest przywilej, którego każdy może być pozbawiony jeżeli nie będzie umiał z niego korzystać. Nie wymagaj więc natychmiastowej odpowiedzi.
|
|
|
m_i_n |
Dodany dnia 22.05.2007 21:36:44
|
Bywalec Postów: 836 Pomógł: 3 Data rejestracji: 15.02.2006 10:04 |
LOL. SebaZ, prosze, nie wypowiadaj sie jesli nie wiesz o czym wogole pisze autor. Co do tego ma fusion? ja pytam o MySQL (na ktorym akurat fusion bazuje)... i nie ma znaczenia czy fusion jest prosty, trudny czy w ciapki... pyt. tyczy sie czegos innego. |
|
|
SebaZ |
Dodany dnia 22.05.2007 21:40:00
|
Zaawansowany Postów: 1598 Pomógł: 2 Data rejestracji: 10.11.2004 22:39 |
A czego? Zapytałes jak działa wyszukiwanie, np. ost. aktywne tematy. Skoro źle Cię zrozumiałem wyrażaj jaśniej swoje myśli następnym razem! Zarzuć jakimś kodem, bo szczerze nie kumam nadal, aby tyle że w MySQL Zadawanie pytań na forum to nie jest prawo, to jest przywilej, którego każdy może być pozbawiony jeżeli nie będzie umiał z niego korzystać. Nie wymagaj więc natychmiastowej odpowiedzi.
|
|
|
m_i_n |
Dodany dnia 22.05.2007 21:47:36
|
Bywalec Postów: 836 Pomógł: 3 Data rejestracji: 15.02.2006 10:04 |
Wytlumacze ci najprosciej jak moge: co robi MySQL po wpisaniu np: SELECT * FROM tabelka WHERE pole=wartosc jaki algorytm wyszukuje... na pewno nie jest to zwykle przeszukiwanie, by moze drzewo binarne, nie wiem, pytam sie czy ktos sie orientuje, bo mam pewien problem natury programistycznej z trzymaniem duzej ilosci danych i jestem ciekawy jak to wyglada w takich profesionalnych prodkcjach jak MySQL gdzie, jak widac dziala znakomicie. |
|
|
SebaZ |
Dodany dnia 22.05.2007 23:11:02
|
Zaawansowany Postów: 1598 Pomógł: 2 Data rejestracji: 10.11.2004 22:39 |
A co moze byc innego poza indeksowaniem?
Zadawanie pytań na forum to nie jest prawo, to jest przywilej, którego każdy może być pozbawiony jeżeli nie będzie umiał z niego korzystać. Nie wymagaj więc natychmiastowej odpowiedzi.
|
|
|
Wooya |
Dodany dnia 23.05.2007 00:12:04
|
Zaawansowany Postów: 1449 Pomógł: 22 Data rejestracji: 30.01.2005 15:40 |
Heh. Sprawa natury wyjatkowo skomplikowanej. m_i_n mysle ze powinienes zapoznac sie dokladniej z matrycami, jako ze tabele sa takowymi. Bieganie po polach w poszukiwaniu czegokolwiek jest strata czasu. Bieganie po kolumnach (warunek WHERE) sprowadza do poszukiwan w jednej (ilus) kolumnach/wierszach. Generalnie chodzi o tablice i problem jest naprawde skomplikowany. Mozesz przedstawic w czym problem?
... Pomagam tylko przy najnowszych wersjach PHP-Fusion ... |
|
|
m_i_n |
Dodany dnia 23.05.2007 00:42:30
|
Bywalec Postów: 836 Pomógł: 3 Data rejestracji: 15.02.2006 10:04 |
Potrzebuje do swojej aplikacji aby przetrzymywac pewne dane i w nich wyszukiwac, sa to duze ilosci i dlatego mechanizm musi byc wydajny. Z tego co wlasnie rozmawialem z moim znajomym to on twierdzi ze wyglada to mniej wiecej tak ze sa odpowiednie indeksy tworzone na kazda litere na ten przyklad (dla pola tekstu), tak jakby sie tworzylo foldery a,b,c... a w kazdym z nich znow a,b,c... dzieki temu tak szybko to dziala. I to ma sens w gruncie rzeczy, tylko MySQL jakos to wszystko trzyma w calosci a nie tak lamerksko w folderach wiadomo. Ale chyba finalnie wezme i podepne sie swoja aplikacja pod baze MySQL, bo nie ma sensu odkrywac na nowo czegos co juz jest A co moze byc innego poza indeksowaniem? Google + Algorytmy wyszukiwania to zobaczysz co moze byc innego i jak wiele tego jest... Edytowane przez m_i_n dnia 23.05.2007 00:44:43 |
|
|
Riklaunim |
Dodany dnia 23.05.2007 00:54:17
|
Początkujący Postów: 244 Data rejestracji: 07.08.2004 10:53 |
MySQL dla tabel MyISAM oferuje wyszukiwanie pełnotekstowe (wyszukiwanie z prawdopodobieństwem), które jest wydajniejsze od wyszukiwania LIKE Jest to rozwiązanie wydajne, a jeżeli potrzebujemy coś jeszcze wydajniejszego to np. Xapian z API dla PHP.
|
|
|
wlodekp |
Dodany dnia 23.05.2007 01:07:29
|
Weteran Postów: 3101 Pomógł: 29 Data rejestracji: 21.05.2005 22:27 |
Dawno pisałem u nas i na uk o Fulltext-ale po publikacji szukajki Wooya odpuściłem temat. http://www.php-fu...post_90540 |
|
|
Riklaunim |
Dodany dnia 23.05.2007 14:02:25
|
Początkujący Postów: 244 Data rejestracji: 07.08.2004 10:53 |
tutaj mam przykład: http://www.php.rk...zukiwanie/ Kwestia zmiany zapytań SQL. |
|
|
wlodekp |
Dodany dnia 23.05.2007 15:39:53
|
Weteran Postów: 3101 Pomógł: 29 Data rejestracji: 21.05.2005 22:27 |
Dobrze mówisz przykład wyłącznie teoretyczny, a sprawdż to sobie np w Fusion ,a może sprawdziłeś bo nie jest to takie oczywiste i dlatego jeszcze nie ma fusionowej takiej szukajki, w kodzie nie widzę bolean mode, a jak pisałem o tym to dokładnie temat przerobiłem z manualem mysqla-i tę ostatnią modyfikację uk też jeszcze nie chodzi to jak powinno teoretycznie. Więc nie ma-a jeśli to będzie jednak w powiązaniu z like. |
|
|
Riklaunim |
Dodany dnia 23.05.2007 17:15:46
|
Początkujący Postów: 244 Data rejestracji: 07.08.2004 10:53 |
Przykładowo do wyszukiwania na forum. 1. Wykonaj zapytanie (np. phpMyAdmin, zakładka SQL) (zakładamy wyszukiwanie tylko po treści posta 2. search.php, wiersz 171: zamień na: 3. wiersz 178: zamień na: Dla odpowiedniej ilości postów powinno być widać efekt wyszukiwania pełnotekstowego. |
|
|
wlodekp |
Dodany dnia 23.05.2007 17:30:35
|
Weteran Postów: 3101 Pomógł: 29 Data rejestracji: 21.05.2005 22:27 |
Dobrze postawię nawet nowego fusiona i sprawdzę zasymuluje forum mówimy oczywiście o wyszukiwaniu kilku wyrazów i zobaczymy czy nie wyrzuci błędów i zmiana wyszukiwania inna fraza kilku wyrazów i ponownie i sprawdzenie ilości znalezionych. Jeśli tak zadziała prawidłowo no problem a co do fulltext klucza to no problem bo mam pełne uprawnienia phpmyadmin łacznie z nadawaniem uprawnień global-bo sam je ustanawiam albo root serwera i mysgl polecenia. I wszystko na najnowszych 5. Nie chodzi o szybkość to później a konkretne frazy zobaczymy? DOPISANE W EDYCJI zapytam na wstępie SPRAWDZIŁEŚ??? -- Struktura tabeli dla `fusion_posts` -- DROP TABLE IF EXISTS `fusion_posts`; CREATE TABLE `fusion_posts` ( `forum_id` smallint(5) unsigned NOT NULL DEFAULT '0', `thread_id` smallint(5) unsigned NOT NULL DEFAULT '0', `post_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `post_subject` varchar(100) COLLATE utf8_polish_ci NOT NULL DEFAULT '', `post_message` text COLLATE utf8_polish_ci NOT NULL, `post_showsig` tinyint(1) unsigned NOT NULL DEFAULT '0', `post_smileys` tinyint(1) unsigned NOT NULL DEFAULT '1', `post_author` smallint(5) unsigned NOT NULL DEFAULT '0', `post_datestamp` int(10) unsigned NOT NULL DEFAULT '0', `post_ip` varchar(20) COLLATE utf8_polish_ci NOT NULL DEFAULT '0.0.0.0', `post_edituser` smallint(5) unsigned NOT NULL DEFAULT '0', `post_edittime` int(10) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`post_id`), KEY `thread_id` (`thread_id`), FULLTEXT KEY `post_message` (`post_message`) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=6 ; TWÓJ KOD $result = dbquery( "SELECT tp.*, tf.* FROM ".$db_prefix."posts tp INNER JOIN ".$db_prefix."forums tf USING(forum_id) WHERE ".groupaccess('forum_access')." AND MATCH(post_message) AGAINST ('".$stext."')" ); $rows = dbrows($result); if ($rows != 0) { echo $rows." ".($rows == 1 ? $locale['414'] : $locale['415']).$locale['422'].":<br><br>\n"; $result = dbquery( "SELECT tp.*, tf.*, tu.user_id,user_name FROM ".$db_prefix."posts tp INNER JOIN ".$db_prefix."forums tf USING(forum_id) INNER JOIN ".$db_prefix."users tu ON tp.post_author=tu.user_id WHERE ".groupaccess('forum_access')." AND MATCH(post_message) AGAINST ('".$stext."') ORDER BY post_datestamp DESC LIMIT $rowstart,10" ); I wynik zapytania-przy 6 postach 1 słowo dwa nie ma znaczenia a jest w każdym(6-widać w tabeli) 0 Posty na Forum wyników pasujących do kryteriów wyszukiwania. I wydaje mi się jeśli zmiana trybu danych na bolean jeśli ma chodzić. Edytowane przez wlodekp dnia 23.05.2007 18:41:43 |
|
|
Riklaunim |
Dodany dnia 23.05.2007 18:51:44
|
Początkujący Postów: 244 Data rejestracji: 07.08.2004 10:53 |
Mi działa jako tako - by MySQL sensownie to szukało musi mieć trochę danych (parę rekordów to za mało). Wrzuć zrzut swojej strony i przetestuj.
|
|
|
wlodekp |
Dodany dnia 23.05.2007 19:02:00
|
Weteran Postów: 3101 Pomógł: 29 Data rejestracji: 21.05.2005 22:27 |
Ilość rekordów nie ma znaczenia tylko przy trafności i szybkości jeden też powinien znaleść. Nie mam w tej chwili czasu na zabawę tworzenia bo kłopot polega że nie posiadam forum ale przypnę do niusów w nocy i popatrzę skoro twierdzisz że działa to też bym chciał żeby u mnie zadziałało BO O TO TYLKO MI CHODZI a jest to niekiepska metoda. Edytowane przez wlodekp dnia 23.05.2007 22:37:21 |
|
Przejdź do forum: |