=?iso-8859-2?q?[MySQL]_FullText-Search_i_trafno=B6=E6_(zawsze_1)_i_szacowanie?=
=?iso-8859-2?B?RL95c3psYQ==?= - 24-06-2007 00:16
=?iso-8859-2?q?[MySQL]_FullText-Search_i_trafno=B6=E6_(zawsze_1)_i_szacowanie?=
Od razu zastrzegam, że szukałem wszędzie i nie znalazłem.
Mam takie oto zapytanie: SELECT *,MATCH (text) AGAINST ('wyraz*' IN BOOLEAN MODE) AS score FROM posts WHERE MATCH (text) AGAINST ('wyraz*' IN BOOLEAN MODE) ORDER BY time DESC LIMIT 0, 50
I teraz w wynikach mam ZAWSZE trafność (score) wynoszącą 1. Czy ja coś źle sformuowałem? Jeśli nie określe warunków, to wyniki mam albo 0 albo 1. Wersja MySQL - 4.1.21
I przy okazji - ma ktoś jakiś pomysł na oszacowanie ilości wyników tak, aby nie trzeba było wywoływać czasochłonnego SELECT COUNT(*) WHERE MATCH (text) AGAINST ('wyraz*' IN BOOLEAN MODE)
DeyV - 24-06-2007 00:16
=?iso-8859-2?q?Re:_FullText-Search_i_trafno=B6=E6_(zawsze_1)_i_szacowanie?=
> I przy okazji - ma ktoś jakiś pomysł na oszacowanie ilości wyników > tak, aby nie trzeba było wywoływać czasochłonnego > SELECT COUNT(*) WHERE MATCH (text) AGAINST ('wyraz*' IN BOOLEAN MODE)
SQL_CALC_FOUND_ROWS tells MySQL to calculate how many rows there would be in the result set, disregarding any LIMIT clause. The number of rows can then be retrieved with SELECT FOUND_ROWS().
http://dev.mysql.com/doc/refman/5.0/...tml#FOUND_ROWS
Piotr Keplicz - 24-06-2007 00:16
Dżyszla: > I przy okazji - ma ktoś jakiś pomysł na oszacowanie ilości wyników > tak, aby nie trzeba było wywoływać czasochłonnego > SELECT COUNT(*) WHERE MATCH (text) AGAINST ('wyraz*' IN BOOLEAN MODE)
SELECT SQL_CALC_FOUND_ROWS *, MATCH() ... a potem SELECT FOUND_ROWS()
..pk.
Maciek Dobrzanski - 24-06-2007 00:16
=?iso-8859-2?Q?Re:_=5BMySQL=5D_FullText-Search_i_trafno=B6=E6_=28zawsze_1?==?iso-8859-2?Q?=29_i_szacowanie?=
"Dżyszla" <dzyszla@dzyszla.aplus.pl> wrote in message news:1182600300.850908.284250@n2g2000hse.googlegro ups.com...
> Mam takie oto zapytanie: > SELECT *,MATCH (text) AGAINST ('wyraz*' IN BOOLEAN MODE) AS score > FROM posts WHERE MATCH (text) AGAINST ('wyraz*' IN BOOLEAN MODE) > ORDER BY time DESC LIMIT 0, 50 > > I teraz w wynikach mam ZAWSZE trafność (score) wynoszącą 1. Czy ja > coś źle sformuowałem? Jeśli nie określe warunków, to wyniki mam > albo 0 albo 1.
Tryb BOOLEAN nieco inaczej "wylicza" trafność. W przeciwieństwie do normalnego trybu, jest to hmmm... bardziej sucha ocena trafności konstrukcji logicznej, niż zawartości według liczby wystąpień. Wartość 1 oznacza, że jedna poszukiwana fraza (wyraz*), o którą pytasz, występuje w przeszukiwanych kolumnach. Gdybyś szukał 'wyraza wyrazb' to możliwe wartości wynosiły by 0, 1 lub 2, w zależności od tego ile z tych wyrazów pojawiłoby się w "wierszu". Dla bardziej złożonych operacji obejmujących różne operatory logiczne, przyjmowane wartości mogą być jeszcze nieco inne (tj. mogą być liczbą wymierną a nie tylko całkowitą).
> I przy okazji - ma ktoś jakiś pomysł na oszacowanie ilości wyników > tak, aby nie trzeba było wywoływać czasochłonnego
A tak bardzo Ci to potrzebne? Jeśli dokładna wartość liczby pasujących rekordów nie jest konieczna, lepiej zastosować jakieś przybliżenie, a w trakcie "przewijania" wyników dokonywać ewentualnych korekt.
Pozdrawiam,
Maciek
=?iso-8859-2?B?RL95c3psYQ==?= - 25-06-2007 00:00
=?iso-8859-2?q?Re:_FullText-Search_i_trafno=B6=E6_(zawsze_1)_i_szacowanie?=
On 23 Cze, 20:59, Piotr Keplicz <kepl...@bigfoot.com> wrote: > Dżyszla: > > > I przy okazji - ma ktoś jakiś pomysł na oszacowanie ilości wyników > > tak, aby nie trzeba było wywoływać czasochłonnego > > SELECT COUNT(*) WHERE MATCH (text) AGAINST ('wyraz*' IN BOOLEAN MODE) > > SELECT SQL_CALC_FOUND_ROWS, *, MATCH() ... > a potem > SELECT FOUND_ROWS() > > .pk.
Dzięki! Nie wiem czemu, ale gdzieś wcześniej wyczytałem, że to tak samo obciąża, jak zwykłe wyszukiwanie (pomijając przekazanie wyników), ale teraz zagłębiając się w manuala, to chyba też tak zalecają. Ciekawe, jak google szacuje :) Bo podejrzewam, że w/w metoda jest wolniejsza i tak od tej googlowskiej.
=?iso-8859-2?B?RL95c3psYQ==?= - 25-06-2007 00:00
=?iso-8859-2?q?Re:_FullText-Search_i_trafno=B6=E6_(zawsze_1)_i_szacowanie?=
On 23 Cze, 22:17, "Maciek Dobrzanski" <svc.use...@posterus.com> wrote: > "Dżyszla" <dzys...@dzyszla.aplus.pl> wrote in message > > news:1182600300.850908.284250@n2g2000hse.googlegro ups.com... > > > Mam takie oto zapytanie: > > SELECT *,MATCH (text) AGAINST ('wyraz*' IN BOOLEAN MODE) AS score > > FROM posts WHERE MATCH (text) AGAINST ('wyraz*' IN BOOLEAN MODE) > > ORDER BY time DESC LIMIT 0, 50 > > > I teraz w wynikach mam ZAWSZE trafność (score) wynoszącą 1. Czyja > > coś źle sformuowałem? Jeśli nie określe warunków, to wynikimam > > albo 0 albo 1. > > Tryb BOOLEAN nieco inaczej "wylicza" trafność. W przeciwieństwie do > normalnego trybu, jest to hmmm... bardziej sucha ocena trafności konstrukcji > logicznej, niż zawartości według liczby wystąpień. Wartość 1 oznacza, że > jedna poszukiwana fraza (wyraz*), o którą pytasz, występuje w > przeszukiwanych kolumnach. Gdybyś szukał 'wyraza wyrazb' to możliwewartości > wynosiły by 0, 1 lub 2, w zależności od tego ile z tych wyrazów pojawiłoby > się w "wierszu". Dla bardziej złożonych operacji obejmujących różne > operatory logiczne, przyjmowane wartości mogą być jeszcze nieco inne (tj. > mogą być liczbą wymierną a nie tylko całkowitą). > > > I przy okazji - ma ktoś jakiś pomysł na oszacowanie ilości wyników > > tak, aby nie trzeba było wywoływać czasochłonnego > > A tak bardzo Ci to potrzebne? Jeśli dokładna wartość liczby pasujących > rekordów nie jest konieczna, lepiej zastosować jakieś przybliżenie, a w > trakcie "przewijania" wyników dokonywać ewentualnych korekt. > > Pozdrawiam, > > Maciek
Myślałem po prostu o opcji sortowania po trafności, gdzie by ta trafność była określona w jakiś bardzo wymierny sposób. Dzięki za wyjaśnienia niemniej!
Pozdrawiam Dawid
=?iso-8859-2?B?RL95c3psYQ==?= - 25-06-2007 00:00
=?iso-8859-2?q?Re:_FullText-Search_i_trafno=B6=E6_(zawsze_1)_i_szacowanie?=
On 23 Cze, 21:08, Piotr Keplicz <kepl...@bigfoot.com> wrote: > Dżyszla: > > > I przy okazji - ma ktoś jakiś pomysł na oszacowanie ilości wyników > > tak, aby nie trzeba było wywoływać czasochłonnego > > SELECT COUNT(*) WHERE MATCH (text) AGAINST ('wyraz*' IN BOOLEAN MODE) > > SELECT SQL_CALC_FOUND_ROWS *, MATCH() ... > a potem > SELECT FOUND_ROWS() > > .pk.
Nie wiem czemu, ale wydawało mi się wcześniej, że wyczytałem, iż metoda ta wiele się nie różni od COUNT(*) i tak samo obciąża... Ale zagłębiając się w manuala to chyba jednak też tak zalecają. Dzięki!
Pozdrawiam Dawid
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Gdzie MySQL 4.1, a gdzie 5.0?
[MS SQL] "set names" (mySQL) w MS SQL
oracle -> oracle lub oracle -> mysql replikacja - programy
[mysql 4.0] SELECT t1.id, t1.foo FROM t1 oraz COUNT t2 w jednym zapytaniu.
[MySQL] Zwrot tego, co pasuje i nie pasuje :-/
[pgsql] Dostosowanie składni MySQL 5.0 -> PGSQL 8.1
[mysql] galeria zdjec - numerowanie zdjec
[MySQL] Zapytanie z pliku , wynik do pliku
[mysql] CONCAT agregujący, ale nie GROUP_CONCAT()
mysql data 0000-00-00 na koniec
zanotowane.pldoc.pisz.plpdf.pisz.plkfia-tek.keep.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|