Fórum > SQL > Fulltext. vyhledávání na více sloupcích

Fulltext. vyhledávání na více sloupcích

Autor: Jary
Datum: 23.8. 2002 00:31
Nemá někdo nápad, jak udělat fulltext. vyhledávání na více sloupcích (VARCHAR, LONGTEXT) i s např. sčítáním či násobením "score" výsledků?
Nevím jestli to půjde přímo v MySQL. Jestli ne, udělal bych to výce dotazy a následnou analýzou a zppracováním v PHP. Dík
Autor: Lukasik
Datum: 23.8. 2002 08:17
Míro kde je to tlačítko?!... ;).
Autor: Jary
Datum: 23.8. 2002 18:55
Cože?
Autor: Master
Datum: 23.8. 2002 20:04
taky nechapu co zase Luk. placa
Autor: Lukasik
Datum: 23.8. 2002 20:39
Ale nic, narážel jsem na jinej thread kde radek říkal aby míra udělal tlačítko s tím že se do zprávy vrazí něco typu: Byl jsem tu, ale nechápu...
Autor: Radek
Datum: 23.8. 2002 21:46
BOZE!!! ODPUST MI!!! ... to jsem zas neco placnul :) ... ze mi obe ruce neupadnou!

Radek

PS: jako pokani se zitra kouknu na ten fulltext, at je tu alespon jeden prispevek trosku k veci ... stejne se mi to bude hodit :o)
Autor: Lukasik
Datum: 23.8. 2002 22:53
A co bys dělal, pokud by ti upadly?! Dyť bys nemohl psát;)).
Jinak fulltext zkus hledat na www.hotscipts.com
Autor: Radek
Datum: 24.8. 2002 08:29
> A co bys dělal, pokud by ti upadly?! Dyť bys nemohl psát;)).

... no prave ...

Radek
Autor: Lukasik
Datum: 24.8. 2002 08:47
No a pak si by si nemohl radit, ani už psát zdrojáky a co potom?
Autor: Radek
Datum: 24.8. 2002 21:03
> No a pak si by si nemohl radit, ani už psát zdrojáky a co potom?

... mel bych svatej klid :o)

Ale zkusme trosku k veci :o) ... po dnesnim badani nad fulltextem v MySQL, jsem prisel zhruba na toto ... vse podstatne je receno v referencnim nanuallu MySQL ... vrele doporucuju prelouskat :)

http://www.mysql.com/doc/en/Fulltext_Search.html

Fulltext hledani nad dvema sloupci muzes udelat primo tak, ze udelas fulltext index nad dvema sloupci ... 

CREATE TABLE articles (
 id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
 title VARCHAR(200),
 body TEXT,
 FULLTEXT INDEX (title, body)
);

... pak uz jenom polozis dotaz ...

SELECT * FROM articles WHERE MATCH (title, body) AGAINST ('slova ktere hledas')

... je tam pomerne slusna podpora toho, jak menit vahu (vyznamnost) jednotlivych hledanych slov, ale nikde jsem nenasel, jak menit vahu jednotlivych sloupcu (jako aby titulek mel vetsi vahu nez text ... pocitam, ze to uz by se muselo rikat pri vytvareni indexu) ... pokud bys na tomto trval, je moznost (MATCH (title, body) AGAINST ('slova ktere hledas')) pouzit jako funkci, ktera ti vraci miru prislusnosti k danemu radku. Muzes ji pouzit skoro kdekoli v SQL dotazu ... tzn. i ve vyrazu, tak uz zalezi jen na tobe, jak budes vynalezavej ... 

... WHERE ... AND (
(MATCH (title) AGAINST ('slova ktere hledas'))*0.8 +
(MATCH (body) AGAINST ('slova ktere hledas'))*0.2
) > 0.1;

Tot vse, co se mi podarilo zjistit ... ale asi pisu notoriky zname veci, ze :)

Radek
Autor: Radek
Datum: 24.8. 2002 22:48
Drobny patch ... to rizeni vahy klicovych slov je az od MySQL 4.0 :)

Radek
Autor: Jary
Datum: 1.9. 2002 00:19
Děkuji všem (hlavně Radkovi). Manuál sem prolít asi 2*, ale spíš z rychlíku, než z náklaďáku. Kouknu se, co z toho vyrobím.
Autor: Radek
Datum: 1.9. 2002 09:11
Jeste jedna drobna poznamka ... pokud ve WHERE klauzuli pouzijes MATCH(jak jsem ti daval priklad na zaver) ... tak to NENI moc stastnej napad :) ... protoze pak se fulltext-index nepouzije a dotaz bude stejne pomalej (mozna pomalejsi) nez kdybys pouzil klasikcky LIKE.

Nikde jsem to explicitne nenasel, ale co jsem z experimentu vypozoroval, tak ...

MATCH (...)  AGAINST (...) AND MATCH (...)  AGAINST (...)

... podle indexu jede, ale uz ...

MATCH (...)  AGAINST (...) OR MATCH (...)  AGAINST (...)

... mysql nedokaze proves podle indexu, natoz pak nejaky +, *, ...

V pripade toho OR by se to dalo obejit pres UNION dvou selektu, ale to mysql tusim taky nepodporuje :) ... takze polozit 2 dotazy a v PHP si je zmergeovat :)

Radek
Tento web používá k poskytování služeb a analýze návštěvnosti soubory cookie. Používáním tohoto webu s tím souhlasíte. Další informace