Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: FULLTEXT INDEX
Forum PHP.pl > Forum > Bazy danych > MySQL
borpaw
Mam takie zapytanie sql

  1.  
  2. $fraza = "test";
  3.  
  4. SELECT id_pozycje, user_id, TRIM(temat), MATCH(tekst) AGAINST('$fraza') AS SOURCE
  5. FROM airforum_POZYCJE WHERE MATCH(tekst) AGAINST('$fraza') ORDER BY SOURCE DESC


Chciałbym wyświetlać rekordy posortowane po ilości wystąpień słowa "test" a dzieje się coś takiego, jeśli mam przykładowo trzy wpisy
test test
test
test test test

to wynikiem jest mimo że mam ustawione sortowanie malejące, o co chodzi?
test
test test
test test test

a chciałbym wyświetlać to malejącą w zależności od ilości słów "test" w tekście
wookieb
Niestety do tego celu nie możesz użyc FULLTEXT-a
Musisz ręcznie policzyć ilość słów w tekście i po tym sortować.
Dodatkowo bardzo dokładnie zapoznaj się z metodą działania FULLTEXT w MySql bo niekoniecznie musi działać tak jak chcesz.
Jeżeli twoje przykładowe dane są rzeczywistymi rekordami to FULLTEXT się nie nada.
http://www.mwasif.com/2008/12/count-number...a-mysql-column/
borpaw
a jak to najlepiej zrobić, masz może jakiś wydajny algorytm zliczania słów?

Czy może lepiej przy każdym nowym wpisie od razu podzielić tekst na słowa?

Jak to się powinno zrobić żeby nie zarżąć bazy?
wookieb
Żeby nie zarżnąć no to niestety... Tabela typu
word | exists_count | record_id i indeksy. Oczywiście powyższą tabelę musisz uzupełniac CO ZMIANĘ, DODANIE, USUNIĘCIE rekordu.
Nie wiem jakie możliwości dają inne silniki wyszukiwania ale nie jestem pewien czy dadzą rade.

Powiedz co dokładniej projektujesz to może znajdziemy sensowne rozwiązanie.
borpaw
Projektuje forum internetowe
chodzi o wyświetlanie postów po wyszukaniu wg zadanej frazy
wookieb
To po co Ci ta ilość wystąpień slów?
borpaw
posty mają byc posortowane malejąco wg ilości wystąpień słowa w tekscie
wookieb
Dziwne sortowanie. No nic, rozwiązanie dostałeś więc tak też trzeba będzie zrobić. Moim zdaniem nie ma sensu robić takiego "sortowanie" bo kiedy się przydaje?
Możesz np liczyć trafność wyników dla tematu (suma współczynnika podobieństwa dla postów z danego tematu). Co byś nie zrobił to odrazu mówię, że chyba żaden relacyjny silnik baz danych nie daje sobie bardzo dobrze rady z FULLTEXT-em i lepiej do tego celu użyć innych programów. W skrócie, przygotuje swoją aplikację na to aby mieć możliwość łatwego przejścia z jednego rozwiązania do drugiego.
borpaw
Cytat(wookieb @ 13.09.2010, 07:06:59 ) *
Dziwne sortowanie. No nic, rozwiązanie dostałeś więc tak też trzeba będzie zrobić. Moim zdaniem nie ma sensu robić takiego "sortowanie" bo kiedy się przydaje?
Możesz np liczyć trafność wyników dla tematu (suma współczynnika podobieństwa dla postów z danego tematu). Co byś nie zrobił to odrazu mówię, że chyba żaden relacyjny silnik baz danych nie daje sobie bardzo dobrze rady z FULLTEXT-em i lepiej do tego celu użyć innych programów. W skrócie, przygotuje swoją aplikację na to aby mieć możliwość łatwego przejścia z jednego rozwiązania do drugiego.



A jak zrobić liczenie trafności wyników?
wookieb
MATCH AGAINST zwraca ci liczbą oznaczającą trafność. Wystarczy to zsumować i pogrupować według id_tematu.
borpaw
Cytat(wookieb @ 13.09.2010, 07:36:31 ) *
MATCH AGAINST zwraca ci liczbą oznaczającą trafność. Wystarczy to zsumować i pogrupować według id_tematu.



Czyli tak jak mam teraz?

  1. $fraza = "test";
  2. SELECT id_pozycje, user_id, TRIM(temat), MATCH(tekst) AGAINST('$fraza') AS SOURCE
  3. FROM airforum_POZYCJE WHERE MATCH(tekst) AGAINST('$fraza') ORDER BY SOURCE DESC
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.