Autor | Zpráva | ||
---|---|---|---|
brdik Profil |
#1 · Zasláno: 22. 4. 2014, 13:39:14
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 |
#2 · Zasláno: 22. 4. 2014, 20:47:06
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 * |
#3 · Zasláno: 23. 4. 2014, 08:01:49
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 * |
#5 · Zasláno: 23. 4. 2014, 09:47:34
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 |
#6 · Zasláno: 23. 4. 2014, 09:53:45
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 |
#7 · Zasláno: 23. 4. 2014, 10:21:47
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 |
#8 · Zasláno: 24. 4. 2014, 23:27:18
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; |
||
Časová prodleva: 19 dní
|
|||
brdik Profil |
#9 · Zasláno: 13. 5. 2014, 11:45:31
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. |
||
Časová prodleva: 10 let
|
0