Skocz do zawartości

[php][mysql] Wyszukiwarka dużych ilości treści


Eldoka

Rekomendowane odpowiedzi

witam,

Mam np. taką strukturę bazy mysql:

ID | TRESC

TRESC to kolumna gdzie są przechowywane artykuły czyli dosyć dużo znaków (powyżej 2k do nawet 8k znaków).

Teraz pytanie:

-Chcę zrobić wyszukiwarkę, które przeszukuje tą kolumnę w poszukiwaniu frazy i pokazuje największe zagęszczenie tych słów (czyli to może być środek tekstu, koniec itp.)

Przykład:

Szukam słowo natręctwa

Wynik:

przechwytywanieah.png

forum zdrowotne - dodaj ogłoszenie za darmo!

naprawiasz elektronikę? - dodaj ogłoszenie za darmo!

masz kwiaciarnię? - dodaj ogłoszenie za darmo!

Odnośnik do komentarza
Udostępnij na innych stronach

Ale tu w demo nie ma zagęszczenia tylko pojedyncze wystąpienia danego słowa. NIe do końca rozumiem o co Ci chodzi.

Jakie sortowanie, wyświetlanie itd ????

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

@Mion

Zobacz sobie na https://www.kardiolo.pl/natrectwa.htm i sprawdź na żywo jak działa ta wyszukiwarka.

O coś takiego mi chodzi.

Można to nazwać inteligentną wyszukiwarką ale chcę to zrobić najoptymalniej.

forum zdrowotne - dodaj ogłoszenie za darmo!

naprawiasz elektronikę? - dodaj ogłoszenie za darmo!

masz kwiaciarnię? - dodaj ogłoszenie za darmo!

Odnośnik do komentarza
Udostępnij na innych stronach

Wpisałem antydepresyjnych w pole wyszukiwania i SERP'y nic mi nie mówią :)

---

Jeśli tekst wyników wyszukiwania MA SIĘ zaczynać od danego pierwszego wystąpienia np "neurotransmitera" należy zainteresować się funkcją:

https://dev.mysql.com/doc/refman/5.0/en/str...function_locate

https://dev.mysql.com/doc/refman/5.0/en/str...#function_instr

https://dev.mysql.com/doc/refman/5.0/en/str...function_substr

Widzę, że tak to działa jak piszę np dla szukania "dopamina" zwraca teksty zaczynające się na ... dopamina[...]...

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

@Mion to jednak tak nie działa.

Po wpisaniu url dostaje inne wyniki a wyszukiwarka faktycznei działa tak jak mówisz ale chodzi mi o to:

https://www.kardiolo.pl/serce.htm

(pokazuje też w środku a nie na poczatku)

forum zdrowotne - dodaj ogłoszenie za darmo!

naprawiasz elektronikę? - dodaj ogłoszenie za darmo!

masz kwiaciarnię? - dodaj ogłoszenie za darmo!

Odnośnik do komentarza
Udostępnij na innych stronach

Tuataj masz różne szukaczki, może któraś spełni wymagania.

edyta:// do tego będziesz musiał utworzyć słownik z odmianami słów kluczowych dla wyszukiwania.

Strony internetowe Gorzów

Nieuczciwy kontrahent? Nie wiesz jak napisać wezwanie do zapłaty? daj znać na prv, prawnik zrobi to za Ciebie.

Darmowy katalog stron

Odnośnik do komentarza
Udostępnij na innych stronach

Tylko Kolego zwróć uwagę, że są to dwie zupełnie inne funkcje:

1) Standardowe wyszukiwanie usługuje żądanie POST wyszukaj_fraza=dopamina&x=37&y=6 i zwraca wynik w postaci adresu: https://www.kardiolo.pl/wyszukiwarka.htm

2) To co podajesz np: https://www.kardiolo.pl/dopamina.htm jest żądaniem typu GET i z tego co widzę klasycznie obsługiwane z podświetleniem pasujących do wzorca słów co można zrealizować w PHP na wynikach z zapytania. Tak samo można zastosować podane funkcje szukając wystąpienia danego ciągu i w SUBSTR dając początkowe znaki tekstu. Można to zrobić w MySQL, lub w PHP obrabiając już same wyniki zapytania. Wyniki można też czasowo cachować co zmniejszy obciążenia dla kolejnych wyszukiwań dokładnie takiego samego ciągu znaków.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Mion

Czyli to z GETa to najoptymalniej zrobić tak?:

Kolumny news_title, news_text są ustawione na pełno tekstowe w mysql.

1) Pobieramy wyniki np. $query = $this->db->query("SELECT *, MATCH(news_title, news_text) AGAINST ('".$fraza."') AS score FROM ".$this->db->dbprefix."news WHERE MATCH(news_title, news_text) AGAINST ('".$fraza."') ORDER BY score DESC");

2) Obrabiamy je w PHP tak aby znaleźć wystąpienie słowa i zostawiamy np. x znaków z przodu i x z tyłu za słowem.

Dobrze jest takie coś? Nie będzie za bardzo obciążać serwera (dodam cache jak coś)?

forum zdrowotne - dodaj ogłoszenie za darmo!

naprawiasz elektronikę? - dodaj ogłoszenie za darmo!

masz kwiaciarnię? - dodaj ogłoszenie za darmo!

Odnośnik do komentarza
Udostępnij na innych stronach

Inaczej tego raczej nie zrobisz.

Co do obciążenia to zależy od popularności wyszukiwania, bo jak będzie raz na minutę i wykonywać się nawet w ciągu 1 sekundy to powinieneś ujechać bez cache. Gorzej gdy szukanie będzie zajmowało ok 10 sekund i wyszukiwarka bezie oblegana wtedy trzeba myśleć ostro o cache.

PS widzę, [$this->db->query] że z Ciebie "Kohanek" :)

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności