Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> FULLTEXT INDEX
borpaw
post
Post #1





Grupa: Zarejestrowani
Postów: 439
Pomógł: 0
Dołączył: 3.06.2010

Ostrzeżenie: (50%)
XXX--


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
Go to the top of the page
+Quote Post
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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/

Ten post edytował wookieb 12.09.2010, 19:35:20
Go to the top of the page
+Quote Post
borpaw
post
Post #3





Grupa: Zarejestrowani
Postów: 439
Pomógł: 0
Dołączył: 3.06.2010

Ostrzeżenie: (50%)
XXX--


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?
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Ż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.

Ten post edytował wookieb 12.09.2010, 20:05:52
Go to the top of the page
+Quote Post
borpaw
post
Post #5





Grupa: Zarejestrowani
Postów: 439
Pomógł: 0
Dołączył: 3.06.2010

Ostrzeżenie: (50%)
XXX--


Projektuje forum internetowe
chodzi o wyświetlanie postów po wyszukaniu wg zadanej frazy
Go to the top of the page
+Quote Post
wookieb
post
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




To po co Ci ta ilość wystąpień slów?
Go to the top of the page
+Quote Post
borpaw
post
Post #7





Grupa: Zarejestrowani
Postów: 439
Pomógł: 0
Dołączył: 3.06.2010

Ostrzeżenie: (50%)
XXX--


posty mają byc posortowane malejąco wg ilości wystąpień słowa w tekscie
Go to the top of the page
+Quote Post
wookieb
post
Post #8





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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.
Go to the top of the page
+Quote Post
borpaw
post
Post #9





Grupa: Zarejestrowani
Postów: 439
Pomógł: 0
Dołączył: 3.06.2010

Ostrzeżenie: (50%)
XXX--


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?
Go to the top of the page
+Quote Post
wookieb
post
Post #10





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




MATCH AGAINST zwraca ci liczbą oznaczającą trafność. Wystarczy to zsumować i pogrupować według id_tematu.
Go to the top of the page
+Quote Post
borpaw
post
Post #11





Grupa: Zarejestrowani
Postów: 439
Pomógł: 0
Dołączył: 3.06.2010

Ostrzeżenie: (50%)
XXX--


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


Ten post edytował borpaw 13.09.2010, 06:52:46
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 25.09.2025 - 00:56