ForumCała strona

Nawigacja

Aktualnie online

Gości online: 30

Użytkowników online: 0

Łącznie użytkowników: 25,400
Najnowszy użytkownik: AlojzyBartek

Logowanie

Nazwa użytkownika

Hasło



Zarejestruj się

Odzyskaj hasło

Shoutbox

Musisz zalogować się, aby móc dodać wiadomość.

Zbigniew@
17.11.2024 11:33:24
Nie ten grzeszy kto pije, ale ten, kto się nie upije.

JazOOn
16.11.2024 20:46:18
tja

Zbigniew@
15.11.2024 18:58:17
Kto pije, ten nie bije.

JazOOn
31.10.2024 20:49:47
Kto pije?

piterus
30.10.2024 19:45:48
I będziemy śpiewać: "Kiedy 20 blisko, przebadaj wszystko, przebadaj wszystko..." Pfft

Pobierz nową wersję
Pobierz podręcznik
Zobacz inne oficjalne Supporty
Statystyki supportu
PHP-Fuson PL na Facebooku

RSS

Polecamy hosting SferaHost.pl

Zobacz temat

 Drukuj temat
Mechanizm wyszukiwania w MySQL
m_i_n
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
 
http://www.bbproject.net
Wścibski Gość
Dodany dnia 24.11.2024 20:44:15
Pan Kontekstualny

Postów: n^x
Data rejestracji: Zawsze

Polecamy hosting SferaHost.pl
IP: localhost  
SebaZ
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
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.
 
http://www.bbproject.net
SebaZ
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
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.
 
http://www.bbproject.net
SebaZ
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
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 ...
koder_1.png
 
m_i_n
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 Wink wiadomo. Ale chyba finalnie wezme i podepne sie swoja aplikacja pod baze MySQL, bo nie ma sensu odkrywac na nowo czegos co juz jest Smile

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
 
http://www.bbproject.net
Riklaunim
MySQL dla tabel MyISAM oferuje wyszukiwanie pełnotekstowe (wyszukiwanie z prawdopodobieństwem), które jest wydajniejsze od wyszukiwania LIKE Wink Jest to rozwiązanie wydajne, a jeżeli potrzebujemy coś jeszcze wydajniejszego to np. Xapian z API dla PHP.
 
http://www.cms.rk.edu.pl
Spoczywaj w pokoju... wlodekp
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
 
wlodekp.europa.pl
Riklaunim
tutaj mam przykład: http://www.php.rk...zukiwanie/
Kwestia zmiany zapytań SQL.
 
http://www.cms.rk.edu.pl
Spoczywaj w pokoju... wlodekp
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.
 
wlodekp.europa.pl
Riklaunim
Przykładowo do wyszukiwania na forum.

1. Wykonaj zapytanie (np. phpMyAdmin, zakładka SQL)
Pobierz kod źródłowy  Rozwiń Kod źródłowy
(zakładamy wyszukiwanie tylko po treści posta

2. search.php, wiersz 171:
Pobierz kod źródłowy  Rozwiń Kod źródłowy


zamień na:
Pobierz kod źródłowy  Rozwiń Kod źródłowy


3. wiersz 178:
Pobierz kod źródłowy  Rozwiń Kod źródłowy


zamień na:
Pobierz kod źródłowy  Rozwiń Kod źródłowy


Dla odpowiedniej ilości postów powinno być widać efekt wyszukiwania pełnotekstowego.
 
http://www.cms.rk.edu.pl
Spoczywaj w pokoju... wlodekp
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
 
wlodekp.europa.pl
Riklaunim
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.
 
http://www.cms.rk.edu.pl
Spoczywaj w pokoju... wlodekp
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
 
wlodekp.europa.pl
Przejdź do forum:
Created by Arox Copyright (C) 2004
Copyright (C) 2004 - 2018 Ekipa PHP-Fusion.pl