Topic: LT teksto paieška (+kuo verti index'ai)

Sveiki,
siame forume jau skaiciau apie teksto paieska naudojantis FULLTEXT, taciau (kaip tame pvz.) duombazeje yra "žodis", o ieškoma "žodis", tai neras.

Kaip padaryti, kad ieškotų nepriklausomai ar didžiosios ar mažosios raidės? Taip pat, prie to pačio, kas geriau - ar visa DB imti is eiles ir su PHP nagrinetis ar kazkaip su SQL daryt, jei norėčiau, kad ieškant teskto "ąžuolas" surastų ir duombazej esantį "ažuolas".

Pagrindinis šios paiškos pritaikymo vieta turėtų būti http://www.likimas.lt (kad būtų galima rasti informaciją, ęsančią visuose skyriuose). žinoma yra ir kitos pritaikymo vietos, bet jei tiks čia, tiks visur.

Jei tai turi įtakos MySQL - 4.1

-------------------
Ir dar vienas klausimas:

Aš galvojų apie vieną tokį didesnį projektėlį (veikimas kažkas panašaus į blog'ą) ir neapsisprendžiu ar visą informaciją - tekstus, dizaino elementus (pvz. spalvas, paveiksliuku ID ir pan.) ir kita info laikyti duombazėje ir su kiekviena užklausa generuoti ar sukurti statinius HTML failus (o DB naudoti tik info redagavimui)?

čia priklauso nuo to, kaip tie index'ai (be kurių iki šiol išsiverčiau) veikia. Jei per juos greit suranda, bei pagal juos gaunasi greitas lenteliu jungimas, tai man tai netgi geriau, nes būtu daug paprasčiau realizuoti visą projektą.

Ačiū.

Re: LT teksto paieška (+kuo verti index'ai)

La,

Dėl FULLTEXT indekso: kaip paieškos rezultatai susiję su mažosiom/didžiosiom raidėm priklauso nuo pasirinko stulpelio lygiavimo (collation). Naudojant standarinius lygiavimus (utf8_lithuanian_*) variklis nekreips dėmesio į raidžių dydį - kitaip sakant ieškodamas "žodis" rasi ir "žodis". Tuo tarpu jeigu norėsi rasti tiksliai raidžių dydžius atitinkantį rezultatą teks naudotis utf8_bin - tik šiuo atveju prarasi galimybę turėti lietuvišką lygiavimą. Kada nors gal bus toks utf8_lithuanian_bin ;) tada nebus problemų.

Jeigu teisingai supratau tai tau ir reikia, kad paieška rastu rezultatus nekreipiant demesio į raidžių dydį - vadinasi gali naudoti utf8_lithuanian_cs/ci.

Dėl antro klausimo: viskas prilauso nuo to, kokius turėsi resursus ir ar jie bus pakankami, kad "pavežtu" viso turinio generavimą iš duombazės. Jeigu projektas yra didesnis tai aišku, kad reikia naudoti sugeneruotus (užkešuotus) HTML puslapius - padarius pakeitimą turinyje (duombazeje) pergeneruoja atitinkamus HTML puslapius ;)

Re: LT teksto paieška (+kuo verti index'ai)

Ačiū, man kaip tik to ir reikėjo.
Išvada - bene visus stulpelius su info ant FULLTEXT ir veiks :) Jei neklistu kelis kartus turėtu padidėti duombazė, bet cia neproblema, nes duombazė užima 10.000 kartų mažiau vietos, nei aš turiu - bus bent kam nors panaudot vietą :D

Re: LT teksto paieška (+kuo verti index'ai)

Nepamiršk, kad jeigu naudoji paieška per daugiau nei vieną informacinį stulpelį, tai indeksą galima dėti apjungiant kelis stulpelius.

Beto, FULLTEXT veikia tik su tam tikrais laukų tipais - tekstiniais.


Warning: count(): Parameter must be an array or an object that implements Countable in /home/pasokime/domains/mysql.lt/public_html/forumas/include/parser.php on line 820

5 (edited by DY 2006-09-23 20:35:59)

Re: LT teksto paieška (+kuo verti index'ai)

Kas dėl to, ar viską laikyti duomenų bazėje, ar ne, tai aš darau taip - duomenų bazėje laikau tik duomenis, o visa kita laikau PHP faile, bet tas PHP failas yra tik vienas (taigi, spalvos ir pan. gali būti pakeičiamos kintamaisiais ir todėl esant reikalui greitai pakeičiamos - pvz. $spalva1="CCCCCC"), o kas tiksliai rašoma priklauso nuo to, kokie kintamieji jam pateikiami (t.y. jei pvz. bus failas.php?kintamasis=1 tai tada $kintamasis bus priskirta vienetui, o jau pačiame PHP tekste bus nurodyta, ką tokiu atveju rašyti). http://www.likimas.lt kaip suprantu taip nėra (išskyrus su naujienomis), ten yra daugybė PHP failų ir todėl šią sistemą būtų pritaikyti sunku.

Mintys - blogas apie gyvenimą, politiką, ekonomiką, kultūrą, mokslą ir kitką.
Adventure Lietuva - kompiuteriniai žaidimai, kurie yra meno forma.
Pasaulio šalių himnai - įrašai, žodžiai ir jų vertimai, informacija.

Re: LT teksto paieška (+kuo verti index'ai)

Del to, ar laikyti duombazej ar ne - cia masciau apie kita projekta. Ir nusprendziau, kad laikysiu duomenis duombazej. Nes lankytoju neturetu buti daugiau nei likimas.lt (o jis veikia normaliai), juolab, kad cia uzklausos dar tikrai neoptimalios (dar tik mokinausi SQL'o). O jei jau netycia susirinksiu per daug lankytoju, tai ir padarysiu ir "sugeneruotu puslapiu" sistema...

O del http://www.likimas.lt puslapiai ir yra vienas index.php?adresas=ir_cia_visas_adresas. As tik su .htaccess pasidariau, kad graziau atrodytu. Tik man visu duomenu duombazej nes, kiekvienam skyreliui, esanciam likimas.lt/lemtis reikalingas vis kitas skaiciavimo algoritmas reikiamiems duomenims gauti. Todel siame skyriuje as padariau paprasta include(.../$reikiamos_info_nr)
O naujienos, burtai, prietarai, diskusijos laikomi DB.

Re: LT teksto paieška (+kuo verti index'ai)

Dar klausimas prie temos:

Jei duombazėj yra žodžiai:
ąžuolas
ažuolas
ažUOLAS
azuolas
AZUOLAS

Ar yra galimybė su SQL padaryti, kad vartotojui ieškant žodžio "ąžuolas" surastų visus šiuos žodžius? Ar reikia bandyti visus variantus pačiam, t.y. kartoti užklausą su ieškant "ąžuolas", "ažuolas", "ązuolas" ir "azuolas"?

Re: LT teksto paieška (+kuo verti index'ai)

Manau tokio standartinio varianto nėra. O realizuoti būtų galima taip: duombazėje saugoti papildomą lauką, kur originalus tekstas būtų modifikuotas: visos specifinės lietuviškos raidės pakeistos į lotyniškas (ą,č,ę,ė,į,š,ų,ū,ž => a,c,e,i,s,u,z), stulpelio lygiavimą (collation) parinkti iš latin_ci (case insensitive). Atliekant paiešką paieškos užklausos tekste irgi visas spec. liet. raides konvertuoti į lotyniškas ir tada atlikti paieška tame modifikuotame stulpelyje. Tada turėtum rasti visus paminėtus žodžius į paiešką įvedės bet kurį iš paminėtų žodžių.

Re: LT teksto paieška (+kuo verti index'ai)

Turbut taip ir teks daryti. Aciu.