Autor Zpráva
brdik
Profil
mám problém v myslq při fultextovém vyhledávání, při hledání pojmu Draft v následujícím příkladu se jako první najde
Draft Error: Draft angle may be too large resulting in intersecting shells. Please edit Draft angle or Draft side. s relevancí =9.43488502502441 a teprve až potom někde dole záznam se samotným slovem Draft s relevancí =5.30999898910522. Potřebuji, aby ty jednoslovné záznamy byly před víceslovnými záznamy.
Kajman
Profil
Poladit to číslo nepůjde. Můžete ho ale např. použít k výpočtu poměru relevance dle mysql a délky textu. Třeba by šlo něco jako
order by (match(sloupec) against('Draft'))/log2(length(sloupec))
Brdik
Profil *
to by šlo, ale proč tam použít tu funkci log2?
Kajman
Profil
Tak to zkuste i bez toho, byl to jen návrh. Bez zmenšení vlivu délky textu nejspíše hrozí, že budou krátké nerelevantní před dlouhými relevantními.
Brdik
Profil *
a nemělo by to být nějak uváženo už přímo v té relevanci? pořád ve mě hlodá pocit, že mám někde chybu, buď v tom dotazu, nebo v práci s fulltextovým indexem. Je možné, že mohutnost fulltextovéjo indexu na tomto sloupci má hodnotu 1?
juriad
Profil
Kajman:
Ještě by to chtělo ošetřit situaci, kdy délka sloupce je 1 (pak logaritmus vrací nulu a tou se blbě dělí) a situaci, kdy třeba díky jiné podmínce by byl sloupec dokonce prázdný nebo NULL (log je pak nedefinovaný).
Kajman
Profil
Brdik:
Fulltextové indexy v mysql jsou je jednoduchá pomůcka, co se moc konfigurovat nedá. Pokud výsledky nejsou použitelné, zkuste si najít jiné řešení (Lucene, Sphinx, Xapian,...).

juriad:
Takové krátké hodnoty ale match ve where nikdy nenajde.
rafej
Profil
Zkus tento dotaz:

SELECT sloupce1, sloupec2, (MATCH(sloupec kde hledas) AGAINST('Draft' IN BOOLEAN MODE)) as relevance FROM tabulka WHERE MATCH(sloupec kde hledas) AGAINST('Draft' IN BOOLEAN MODE) ORDER BY relevance DESC, id ASC;
brdik
Profil
díky, verze od kajmana bez logaritmu funguje dobře, ale ještě jeden dotaz: jak při hledání sousloví bonusovat, aby byly vpředu výskyty s celým souslovím a až po nich výskyty s jednotlivými slovy
Milkys
Profil
Nevím zda nenapíši blud, nejsem zkušený programátor, kdyžtak to smažte.
Pokud mezi hledanými slovy je mezera (bílý znak) přidej této frázi větší váhu. Toto bych zakomponoval nějak do příkazu.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0