Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]FULTEXT.. na jakiej zasadzie działa parametr score?
Forum PHP.pl > Forum > PHP
kukix
Witam.

Przygoptowuje wyszukiwarke opartą o parametr FULLTEXT..

Czy mógłby mi ktoś podpowiedziec, na jakiej zasadzie zwracany jest parametr score?

Znalazłem takie przykładowe zapytanie:

  1. SELECT *,
  2. MATCH(body) AGAINST ('string string2') AS score,
  3. (MATCH(body) AGAINST ('string') / maxScore) AS normalisedScore
  4. FROM home_posts,
  5. (SELECT MAX(MATCH(body) AGAINST ('string string2')) AS maxScore
  6. FROM home_posts) maxScoreTable
  7. WHERE MATCH(body) AGAINST ('string string2')


W jaki sposób mogę okreslić, żeby wyszukiwarka ograniczała wyniki tylko do wyników, ktore zawierają wszystkie słowa z zapytania mojego?
Michael2318
Score to właśnie ilość słów, które pasują do danych wyników.

Przykładowo, jeśli wpiszesz do inputa szukajki: testowe szukanie
To posty, które będą zawierały te dwa słowa, będą miały score = 2, jeśli wpis będzie miał 1 słowo spośród tych dwóch to score = 1 itd.
kukix
Cytat(Michael2318 @ 4.03.2013, 17:04:36 ) *
Score to właśnie ilość słów, które pasują do danych wyników.

Przykładowo, jeśli wpiszesz do inputa szukajki: testowe szukanie
To posty, które będą zawierały te dwa słowa, będą miały score = 2, jeśli wpis będzie miał 1 słowo spośród tych dwóch to score = 1 itd.


W takim razie dlaczego czasami score np przy dwóch słowach ma wartośc np 5 6 itd.. ma też liczby dziesiętne? czy to oznacza, że znazł dana wartośc kilka razy, lub w kilku komórkach bazy?
Crozin
1. Wartość zwrócona przez MATCH AGAINST sama w sobie nie jest zbyt istotna. Istotne jest tylko porównywanie wyników między sobą. Im wyższy wynik, tym bardziej trafne wyszukiwanie.
2. Jeżeli chcesz wymusić występowanie obu słów w wyszukiwanych dokumentach możesz skorzystać z BOOLEAN MODE i ewentualnie modyfikatora "+" - więcej w dokumentacji MySQL.
3. Jeżeli chciałbyś dowiedzieć się więcej n/t samego wyniku wyszukiwania (w Twoim przypadku: score) - na początek powinno wystarczyć: http://en.wikipedia.org/wiki/Tf-idf oraz http://en.wikipedia.org/wiki/Vector_space_model
kukix
Cytat(Crozin @ 4.03.2013, 17:14:17 ) *
1. Wartość zwrócona przez MATCH AGAINST sama w sobie nie jest zbyt istotna. Istotne jest tylko porównywanie wyników między sobą. Im wyższy wynik, tym bardziej trafne wyszukiwanie.
2. Jeżeli chcesz wymusić występowanie obu słów w wyszukiwanych dokumentach możesz skorzystać z BOOLEAN MODE i ewentualnie modyfikatora "+" - więcej w dokumentacji MySQL.
3. Jeżeli chciałbyś dowiedzieć się więcej n/t samego wyniku wyszukiwania (w Twoim przypadku: score) - na początek powinno wystarczyć: http://en.wikipedia.org/wiki/Tf-idf oraz http://en.wikipedia.org/wiki/Vector_space_model


Ad1. Czyli wartośc parametru score nie ma żadnego znaczenia jeżeli chodzi o wyznaczenie czy wszystkie słowa zostały odnalezione?
Ad2. Próbowałem doac przed każda frazą +, jednak nie powoduje to wymuszneie wszystkich wyrazów sad.gif
Ad3. Tutaj musze na dłużej przysiąść, nie bardzo jestem w stanie to zrozumieć
Sephirus
Ad2. musisz dodać "IN BOOLEAN MODE" wtedy plusy zaczną działać

  1. ... MATCH(pole) AGAINST('slowo1+ slowo2+' IN BOOLEAN MODE) ...


tylko wtedy trzeba pamiętać, że MATCH-AGAINST będzie zwracało tylko 1 lub 0 - nie jak dotychczas różne wartości.
@Crozin - prawda - pokićkało mi się z czymś innym. Sorki.
Crozin
1. Nie, wartość zwracana przez MATCH AGAINST nie informuje o ilości znalezionych słów.
2. O ile nie podałeś tzw. stop words (np. "for", "this", "of" czy w przypadku polskiego "na", "po", "bo") dodanie plusa przy wyszukiwaniu (w trybie BOOLEAN) wymusza istnienie słowa. Pokaż kod.

@Sephirus: MATCH AGAINST IN BOOLEAN MODE nadal zwraca wynik reprezentujący "trafność", nie 0/1.
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.