Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]FULTEXT.. na jakiej zasadzie działa parametr score?, Zwraca różne cyfry
kukix
post
Post #1





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Michael2318
post
Post #2





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


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





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


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?

Ten post edytował kukix 4.03.2013, 15:13:03
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


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ć
Go to the top of the page
+Quote Post
Sephirus
post
Post #6





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


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.

Ten post edytował Sephirus 5.03.2013, 11:50:31


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Crozin
post
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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.
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 Aktualny czas: 22.08.2025 - 04:07