Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Wyszukiwanie fraz z tekstu
adam882
post 2.02.2014, 12:23:05
Post #1





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

Ostrzeżenie: (0%)
-----


Witam serdecznie!

Planuję napisać moduł, który na podstawie podanego tekstu szuka w nim fraz z posiadanych w bazie tagów.

Przykładowo mam tabelę "tagi" o strukturze:
ID | NAZWA
Z ilością ok. 8000-10000 rekordów.

Użytkownik dodaje na stronę treść (np. do 2000 znaków). Teraz chciałbym tak zrobić, aby system wychwycił wszystkie słowa z tego tekstu, które są w tabeli "tagi".
Nie mam pomysłu jak się do tego zabrać. W jaki sposób można coś takiego zrobić? Czy tego typu operacja bardzo obciąża serwer?

Pozdrawiam!



Go to the top of the page
+Quote Post
ibalyx
post 2.02.2014, 12:46:23
Post #2





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.08.2013

Ostrzeżenie: (0%)
-----


ja bym zrobił tak:

- najpierw rozdzielił wszystkie wyrazy z tekstu (explode?) do tablicy
- potem zagnieżdżona pętla (1 pętla taki, 2 pętla wyrazy z tablicy
- i porównał

ale pewnie idzie to zrobić lepiej smile.gif
Go to the top of the page
+Quote Post
KR2615
post 2.02.2014, 12:46:52
Post #3





Grupa: Zarejestrowani
Postów: 311
Pomógł: 13
Dołączył: 7.05.2007

Ostrzeżenie: (0%)
-----


Najprościej: wyciągasz z bazy danych wszystkie tagi i sprawdzasz czy pojawiają się w tekscie:
  1. $res = mysql_query("SELECT * FROM tags");
  2. while( $row = mysql_fetch_array($res) ) {
  3. if (preg_match( $row[nazwa], $body)) {
  4. $result .= "$row[id],";
  5. }
  6. }
  7. return $result;

Gdzie $body to to, co wklepał user. Funkcja zwróci ci id tagów które występują oddzielone przecinkami.

Edit: Co do obciązenia serwera to troche daje ale jeżeli funkcja miałaby być wywoływana raz, tylko gdy user dodaje tekst to można by to przecierpieć.

Ten post edytował KR2615 2.02.2014, 12:55:03


--------------------
Go to the top of the page
+Quote Post
adam882
post 2.02.2014, 13:09:12
Post #4





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

Ostrzeżenie: (0%)
-----


@ibalyx
myślałem nad czymś takim, ale to by chyba było trochę nieoptymalne rozwiązanie, ale dzięki w każdym razie wink.gif

@KR2615
dzięki. Przetestowałem podaną metodę i prz tekście mającym 4000 znaków i 16000 tagach znalazło mi je w czasie średnio 0,3s. Chociaż przy benchmarku apache wypada kiepsko.

Myślałęm też nad tym, czy da się coś takiego zrobić z poziomu bazy danych bez preg_match. Czy da się mimo wszystko szybciej wykonać taką operację?

Ten post edytował adam882 2.02.2014, 13:37:43
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 02:17