Pereiti prie turinio

MySQL tukstantcio uzklausu pavertimas i viena


Rekomenduojami pranešimai

Sveiki dar nemiegantys uzdarbieciai,

 

Susiduriau su problemele, turiu tukstancius tekstiniu dokumentu ir atsiradus naujam, man reikia palyginti ar nera teksto pasikartojimu. Teksto pasikartojimu laikau tada, kai kartojasi keli zodziai tokia pat tvarka (pvz.: 4 zodziai is eiles).

 

Kaip padaryti, kad kuo greiciau ivykdyti sia paieska ir gauti kurie zodziai kartojasi?

 

----------------------------------

 

Dabar dokumentu teksta saugau MySQL duomenu bazeje, MEDIUMTEXT laukelio tipas, jis yra indeksuoti FULLTEXT index (vienoje eiluteje irasytas vieno dokumento visas tekstas).

 

Tarkime turiu nauja teksta: "vienas du trys keturi penki sesi septyni astuoni devyni..."

 

Tai as darau taip, cikle vis imu po keturis zodzius is teksto ir tikrinu ar nera jau tokiu kompbinaciju duomenu bazeje:

 

$sql = "SELECT * FROM dokumentai WHERE MATCH (tekstas) AGAINST ('vienas du trys keturi') AND tekstas LIKE '%vienas du trys keturi%'";

$sql = "SELECT * FROM dokumentai WHERE MATCH (tekstas) AGAINST ('du trys keturi penki') AND tekstas LIKE '%du trys keturi penki%'";

$sql = "SELECT * FROM dokumentai WHERE MATCH (tekstas) AGAINST ('trys keturi penki sesi') AND tekstas LIKE '%trys keturi penki sesi%'";

...

 

----------------------------------

 

gal imanoma butu kaip nors padaryti, kad visa paieska atlikti su viena sql uzklausa ir kad grazintu kurie zodziu deriniai yra jau duomenu bazeje, tada su PHP butu jau nesunku pasitikrinti?

kaip manot, koks geriausias sprendimas?

 

P. S. tikriausiai labai jau cia painiai nupasakojau :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

nu tai gali padaryti užklausą skaičiuoti visus mysql row, tuomet susukti ciklą $i<$row ir tenai atlikinėti paieškos veiksmą, jeigu tarkim randa, darai ten kokį $a = $a + 1 ir po ciklo išvedi $a. taip žinosi kiek tokių pačių yra, bet dar geresnis variantas padaryti vieną užklausą ir išvest visus atitikmenis.

 

oj tu to ir klausei :D

Redagavo gio
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Galima susigeneruoti vieną masyvą su visais galimais variantais tam tekstui, kurį įterpi, ir kitą masyvą su visais galimais variantais iš db rezultatų. Tada tikrini ar yra masyvuose atitikmenų. Tai tilptų į vieą užklausą.

Bet čia jau toks kraštutinis variantas, jei tekstai ilgi, tai daug veiksmo vien masyvą generuoti.

Redagavo jusstinas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

aciu uz atsakymus

 

dienos metu gal aiskiau mintys sugebesiu desti :)

 

uzsiciklinsi :blink: bent paskaiciavai kiek truks sugeneruoti visus galimus zodziu junginius?

taip, sugeneravimas uztrunka apie 5% laiko. Kita laika sunaudoja SQL duomenu siuntimas, apdorojimas, gavimas. Del to reikia patobulinti SQL uzklausa :)

 

 

 

Galima susigeneruoti vieną masyvą su visais galimais variantais tam tekstui, kurį įterpi, ir kitą masyvą su visais galimais variantais iš db rezultatų. Tada tikrini ar yra masyvuose atitikmenų. Tai tilptų į vieą užklausą.

Bet čia jau toks kraštutinis variantas, jei tekstai ilgi, tai daug veiksmo vien masyvą generuoti.

kitą masyvą su visais galimais variantais iš db rezultatų - sitas variantas nelabai tinka, nes kai tekstiniu duomenu virs 1 GB, tai nelabai tai imanoma padaryti

 

 

 

vat cia tai, ko tu ieskai http://stackoverflow...with-match-agai

sitas yra vienas is geriausiu rezultatu, bet deja jis tinka tik vienai 4 zodziu kombinacijai patikrinti. Kol kas bent jau neradau kaip su FULLTEXT iskart patikrinti kelias kombinacijas ir grazinti rezultata.

 

Gal reikia visiskai kitaip daryti?

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------

 

esme tokia, kad planuoju mysql laikyti virs 1 GB teksto (is skirtingu dokumentu)

kai atsiranda naujas dokumentas, man reikia patikrinti ar jame esantis tekstas kartojasi su jau esanciais duomenu bazeje dokumentais (pvz.: skaitykime, kad tekstas kartojasi, kai sutampa bent 4 zodziai)

rezultatas - pazymeti teksto vietas kurios kartojasi (nereikia tiksliai nustatineti kuriame dokumente buvo aptiktas tekstas, svarbu tik ar kartojasi ar ne)

 

problema tame, kad jei naujame dokumente bus apie 50000 zodziu, tai panasiai tiek ir reikes MySQL uzklausu, kad patikrinti po 4 zodzius visa dokumenta

gal yra imanoma parasyti viena mysql uzklausa kuri atliktu si darba? ji turetu grazinti tik zodziu kombinacijas kurios jau yra duomenu bazeje

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...