Topic: "Atvirkštinė paieška

Jeigu mes DB turime įrašus "Petras eina į kiną"; "Medalį gavo Petras"; "Kur po velnių slepiasi pavasaris???" rasti įrašus apie Petrą yra lengva.

Tačiau mane domintų atvirkštinis variantas, kai duomenų bazėje yra daug įrašų (Petras, Jonas, saulė, pavasaris etc) ir man reikia rasti kurie iš jų yra paminėti mano duotoje konkrečioje eilutėje. Aišku galima viską ištraukti iš BD ir praleisti masyvą su regexpu, bet gal yra koks būdas tai padaryti su mysql?

Re: "Atvirkštinė paieška

na man pirmas į galvą šovęs variantas, tai skaldyti eilutę į žodžius ir ieškoti jų DB.

Su sąlyga, kad šūdo nebus...

Re: "Atvirkštinė paieška

Aš apie tokį variantą galvojau, bet žmonės yra labai tingūs tad kyla klausimas, kaip normalizuoti tokius variantus, kaip HipHop, Hip/Hop, hip hop etc, kai DB reikia rasti Hip...  Aišku taip giliai knisantis galima baigti su tūkstnačiu ne į temą rezultatų, jei ieškomas žodis yra trumpas.

Bet atvejais kai reikia rasti gana unikaliuose įrašuose, pvz duota eilutė yra url adresas, kuriame bar kodas.  Tad lieka 2 variantai arba yra kokia stebuklinga msyql funkcija, arba rašyti kiekvienam domenus atskiras url skaidymo funkcijas

Re: "Atvirkštinė paieška

Na stebūklingų funkcijų nėra (-;

Aišku tikriausiai, kad gavus kažkokį tekstą, jį reikėtų apdoroti taip, kad to teksto unikalūs, ir kažkokius tai ilgio ar kitus kriterijus atitinkantys, žodžiai atitinktų tavo turimų žodžių aibę. Tada beliktų tik atlikti paiešką kiekvieno individualaus žodžio.

Tas žodžių "subendravardiklinimas" į vieną formą yra sunkus uždavinys, čia reikėtų pasidomėti tokiomis bibliotekois kaip ispell, taip pat kas per daiktas yra stemming.

Dėl žodžių paieškos tai manau jeigu tu turi žodžių aibe ir jie yra indekse, tai nereikia jokių kitų papildomų įrankių žodžio suradimui iš to indekso.

Jeigu kalba eina apie tai, kad išvengti duotų tekstų karpymo/apdorimo, tai tikriausiai reikėtų bandyti paieškoti tokio atgalinio galimo sprendimo tarp:
a) MySQL full-text indekso MyISAM variklyje;
b) Sphynx;
c) Lucene;
d) Solr;

Aš nesu tikras, bet gali būti, kad kažkuriame iš šių įrankių įtraukęs tekstą į indeksą paskui nesunkiai galėsi gauti žodžių aibe, kuri yra tame tekste (-;

Re: "Atvirkštinė paieška

Skaidymo idėja beveik veiktų, bet gal kad turit minčių kaip rasti, kai eina keli žodžiai iš eilės? Pvz db yra "Justin Timberlake", mano stringas "Justin Timberlake feat JayZ". Kol kas geriausia minti ieškoti po vieną žodį, ir su rastais duomenimis, tikintis kad jų bus nedaug leisti regexp'ą...

Re: "Atvirkštinė paieška

Na jeigu reikia rasti fragmentą, o ne bet kurią iš žodžių kombinaciją tai yra lengviau, nes gali naudoti ir paprastas string fragmento paieškas. šioje vietoje daug sudėtingesnis yra manau tas aspektas, kad tu jau turi daug duomenų, todėl paieškos ir surišimo operacijas reikia iškelti į kažkokį procesą, kuris atskirai nuo sistemos apdorotu duomenis ir sudėliotu ryšius. Ar tai bus tavo gamybos paieška ar pritaikysi kažkurį iš jau paminėtų gatavų sprendimu manau čia ne taip svarbu (-;

Re: "Atvirkštinė paieška

manau full text indeksas būtų šiuo atveju paprasčiausias ir greičiausias sprendimas.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: "Atvirkštinė paieška

zygis wrote:

manau full text indeksas būtų šiuo atveju paprasčiausias ir greičiausias sprendimas.

Gal gali plačiau? Pasikartosiu: DB yra krūva žodžių/frazių, o vartotojas įveda visą sakinį. Užduotis - rasti tuos "reikšminius" žodžius.Kaip pavyzdys galėtų būti wikipedijos linkia iš vieno straipsnio į kitą. Tik ten kaip suprantu, kas yra nuoroda yra pažymima rankomis, o man reiktų panašaus efekto, tik kiek įmanoma labiau automatizuoto :)

Re: "Atvirkštinė paieška

skaldai žodžius po vieną, atlieki paiešką, kuo pieška daugiau randa tuo tas žodis reikšmingesnis. Vėliau tuos žodžius kažkur saugai. Kaip minde ir sakė, tai turi veikti atskirai nuo sistemos ir veikti nuolat.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

10

Re: "Atvirkštinė paieška

čia būsimasis Google konkurentas ? :)

Kiek maigyklių sudėvėjai ?

Re: "Atvirkštinė paieška

Google gal kol kas dar ne, bet kokia wikipedia gal ir neblogai butu nukonkuruot :D

Visiškai atskirti į kitą procesą nelabai tinkamas sprendimas, nes iš gyviškumas (aka live) nebelabai kas liks. Bet aišku kadangi eis per AJAX tai stengsiuosi išskaidyti kiek įmanoma. Bent vienas pliusas, kad įvedami duomenys bus gana trumpi, tad tikiuosi "indeksavimas" vyks greitai :)

p.s. Mažiausiai 60 sekundės turi praeiti tarp žinučių įrašymo. Prašome truputį palaukti ir vėliau bandyti dar kartą. :( Ką daryti, kai greit rašai? :D

Re: "Atvirkštinė paieška

Lukas wrote:

p.s. Mažiausiai 60 sekundės turi praeiti tarp žinučių įrašymo. Prašome truputį palaukti ir vėliau bandyti dar kartą. :( Ką daryti, kai greit rašai? :D

Reikia galvoti (-; čia yra tokia +- apsauga nuo flood'o (-; Normaliem vartotojams ji užkliūna ***labai*** retai, tai tikrai jos neatjunginėsiu. Sorry (-;