Zadejte hledaný výraz...

Hledání pomocí LIKE – řazení dle počtu nalezení v jednotlivém postu

Martin Adamec
verified
rating uzivatele
(13 hodnocení)
16. 1. 2014 23:53:55
Zdravím,
měl bych dotaz jak nejlépe vyřešit následující:
dejme tomu že bych hledal slovo "pes" a měl bych dva příspěvky:
"ahoj jmenuji se pes"
"jsem pes a říkají mi pes"
no a já bych potřeboval zjistit, že slovo "pes" je v jednom příspěvku vícekrát než v druhém, aby se řadilo dle relevance
nemáte někdo radu jak by se to dalo dělat nejlépe jen v dotazu, nikoliv si pomáhat PHP-čkem?
Díky :)
16. 1. 2014 23:53:55
https://webtrh.cz/diskuse/hledani-pomoci-like-razeni-dle-poctu-nalezeni-v-jednotlivem-postu#reply986646
Macejko.sk
verified
rating uzivatele
(5 hodnocení)
17. 1. 2014 00:18:41
Neodporucam to robit v jednom SQL dotaze. Uz samotne pouzitie LIKE-u by som zvazil. Dovodov je viac, ale to je OT. Kazdopadne spojenie LIKE-u s nejakym vnutornym dotazom pri trosku vacsej databaze, ti vytvori, ani neviem ako to slusne nazvat.
Ak chces vyuzit ten LIKE, tak urcite samostatne a potom v PHP si to sortovat ako chces. Ver mi, ze niet inej cesty.
Pri realnej aplikacii, urcite fulltext.
17. 1. 2014 00:18:41
https://webtrh.cz/diskuse/hledani-pomoci-like-razeni-dle-poctu-nalezeni-v-jednotlivem-postu#reply986645
Martin Adamec
verified
rating uzivatele
(13 hodnocení)
17. 1. 2014 00:25:11
Napsal Michal Macejko;1045311
Neodporucam to robit v jednom SQL dotaze...
Přemýšlel jsme i nad fulltextem, ale dle domluvy s klientem se bude hledat pouze v sloupci typu varchar - tedy název příspěvku. Jinde bude i vyhledávání v textu, kde už zvolím fulltext. Ono v podstatě v tomto vyhledávání ta relevance je potřebná jen k následujícímu: když se bude hledat fráze, tak se vyhledá první celá fráze a výsledky ohodnotím. Následně se fráze rozdělí na slova a ty se budou hledat a ty se zase ohodnotí, takže vlastně jsem chtěl toto dělat kvůli tomu abych mohl všechny slova hledat v jednom dotazu, ale jelikož se dá předpokládat délka hledané fráze dejme tomu do 10 slov, tak se to dá rozdělit na 10 dotazů, pro každé slovo 1.
Každopádně díky za postřehy :)
17. 1. 2014 00:25:11
https://webtrh.cz/diskuse/hledani-pomoci-like-razeni-dle-poctu-nalezeni-v-jednotlivem-postu#reply986644
udělej si stored funkci, která ti spočítá počet výskytů slova
17. 1. 2014 00:28:00
https://webtrh.cz/diskuse/hledani-pomoci-like-razeni-dle-poctu-nalezeni-v-jednotlivem-postu#reply986643
crs
verified
rating uzivatele
(1 hodnocení)
17. 1. 2014 06:46:19
v MySQL existuje toto:
Ty ], ] ti zastupují znaky, které nejsou součástí slova a/nebo začátek/konec textu (jinými slovy - vyhledávání výrazu jako celého slova). Bohužel ale počet výskytů nevrací - co vím, tak to jen MATCH...AGAINST.
17. 1. 2014 06:46:19
https://webtrh.cz/diskuse/hledani-pomoci-like-razeni-dle-poctu-nalezeni-v-jednotlivem-postu#reply986642
To, co potřebujete, už za vás řeší fulltextové hledání v MySQL
The rows returned are automatically sorted with the highest relevance first. Relevance is computed based on the number of words in the row, the number of unique words in that row, the total number of words in the collection, and the number of documents (rows) that contain a particular word.
Nebo ještě lépe nadstavby typu Sphinx.
17. 1. 2014 10:19:23
https://webtrh.cz/diskuse/hledani-pomoci-like-razeni-dle-poctu-nalezeni-v-jednotlivem-postu#reply986641
Martin Adamec
verified
rating uzivatele
(13 hodnocení)
17. 1. 2014 14:34:26
Takže zkusil jsem to přes ten fulltext, ale vyhledává to celkem podivně např.:
A) "Mýtus: Proč ženy nechtějí posilovat...."
B) "...s lékařem, vzhledem k zatížení oběhového systém..."
1) hledám "mytus" - najdu správně A
2) hledám "myt" - nenajdu nic! - špatně
3) hledám "žen" - najdu B (kde je to uprostřed slova), ale nenajdu A (kde to je začátek slova)
I) takže jaké má vlastně omezení fulltext? (sloupce mají indexy fulltext)
II) jak to nejefektivněji hledat s ohledem na zátěž a správnost?
III) proč vlastně je hledání přes LIKE cesta do pekla?
IV) Regexp jsem ještě nezkoušel, kdyžtak večer vyzkouším i ten, ale myslím si, že like je zjednodušený regexp ne?
Děkuji :)
17. 1. 2014 14:34:26
https://webtrh.cz/diskuse/hledani-pomoci-like-razeni-dle-poctu-nalezeni-v-jednotlivem-postu#reply986640
Fulltext v přirozeném modu nehledá prefixy (stejně jako to nedělají jiné fulltextové vyhledávače).
Např. "žen" nenajde "ženský".
Můžete tak hledat v BOOLEAN modu.
Fulltext nenajde slova kratší než ft_min_word_len, standardně 4 písmena.
A pozor při testování, nevrátí výsledky, pokud je hledané slovo obsažené ve více než 50% výsledků. Slovo pak považuje za stopword.
Doporučuji si přečíst manuál.
17. 1. 2014 17:14:43
https://webtrh.cz/diskuse/hledani-pomoci-like-razeni-dle-poctu-nalezeni-v-jednotlivem-postu#reply986639
Pro odpověď se přihlašte.
Přihlásit