Si ta kombinoj përdorimin e db4o për të ruajtur të dhënat dhe Lucene për të indeksuar të dhënat për kërkim të shpejtë?

Unë jam i ri në db4o dhe Lucene.

Aktualisht po përdor db4o për të ruajtur të dhënat e mia në një aplikacion Android. Më duhet aftësia për të kryer kërkime të shpejta, si dhe për të ofruar sugjerime për përdoruesit (p.sh., sugjerime të plota automatike).

Një poster SO përmendi përdorimin e Lucene për të indeksuar të dhënat dhe db4o për t'i ruajtur ato.

A e ka zbatuar dikush këtë qasje? Nëse po, do ta vlerësoja nëse ata ndajnë qasjen e përgjithshme? Cilat janë alternativat?


person Soumya Simanta    schedule 27.04.2011    source burimi
comment
Unë do të shkoja të përdorja lucene vetëm si ruajtje të dhënash. nuk ka nevojë për db4o ose pse do ta përdorni një të tillë? (thjesht ruajeni dokumentin si json në një fushë ndoshta të ngjeshur të ruajtur dhe të pa indeksuar)   -  person Karussell    schedule 20.10.2011


Përgjigjet (1)


Kam përdorur Lucene për të nxjerrë fjalë kyçe nga artikujt që do të ruhen në bazën e të dhënave dhe për të ruajtur objektet që unë i quaj 'extension fjalen' që tregojnë objektet përkatëse të domenit. Kjo bëri që objektet e domenit të mund të gjenden sipas fjalës kyçe (duke lejuar gjithashtu rrjedhën) dhe ndau shqetësimet e fjalëve kyçe. Baza e të dhënave u ndërtua nga një grup i madh i të dhënave statike (baza e të dhënave ushqimore e ushqimit USDA), kështu që nuk kisha nevojë të shqetësohesha për ndryshimet gjatë kohës së ekzekutimit. Kështu kjo zgjidhje është e kufizuar në formën e saj aktuale ...

Pjesa e parë e zgjidhjes ishte të shkruante një pjesë të vogël kodi që merr pak tekst dhe nxjerr të dyja fjalët kyçe dhe rrënjët përkatëse (duke përdorur rrjedhën e 'Topit të borës' të Lucene) në një hartë. Ju e përdorni këtë për të nxjerrë fjalët kyçe/rrjedhjet nga disa objekte të domenit që po ruani në bazën e të dhënave. I mbajta fjalët kyçe origjinale në mënyrë që të krijoja një lloj statistikash për kërkimet e bëra.

Pjesa e dytë ishte ndërtimi i objekteve që i quajta 'zgjatje të fjalëve kyçe' që ruajnë rrjedhat si një grup dhe fjalët kyçe përkatëse si një grup tjetër dhe të kenë një tregues për objektet përkatëse të domenit që kishin fjalë kyçe (kam përdorur vargje sepse ato punojnë më lehtë me DB4O). Unë gjithashtu nënklasova klasën time KeywordExtension për të korresponduar me llojin e objekteve të veçanta të domenit - kështu që për shembull po ruaja një objekt domeni 'Nutrient' dhe një objekt përkatës 'NutrientKeywordExtension'.

Pjesa e tretë është mbledhja e tekstit të kërkimit të futur nga përdoruesi, përsëri përdorimi i shtyllës për nxjerrjen e rrjedhjeve dhe kërkimi i objekteve NutrientKeywordExtension me ato rrjedhje. Më pas mund të kapni objektet Nutrient tek të cilat tregojnë ato shtesa dhe në fund t'i paraqisni ato si rezultate kërkimi.

Siç thashë, baza ime e të dhënave ishte statike - është krijuar herën e parë që aplikacioni ekzekutohet. Në një bazë të dhënash dinamike, do t'ju duhet të shqetësoheni për mbajtjen në sinkron të lëndëve ushqyese dhe shtesave përkatëse të fjalëve kyçe. Një zgjidhje do të ishte bashkimi i shtrirjes së fjalës kyçe të lëndëve ushqyese dhe lëndëve ushqyese në një klasë nëse nuk e keni problem ta keni atë send brenda objekteve të domenit tuaj (nuk më pëlqen kjo). Përndryshe, ju duhet të merrni parasysh shtesat e fjalëve kyçe sa herë që krijoni/redaktoni/fshini objektet e domenit tuaj.

Shpresoj që ky shembull i kufizuar të ndihmojë.

person Sam Stainsby    schedule 30.04.2011
comment
@Sam - faleminderit për përgjigjen. Mund të më jepni një ide për madhësinë e indeksit dhe sa kohë u desh për të ndërtuar indeksin fillestar në telefon. - person Soumya Simanta; 03.05.2011
comment
@Soumyama indekset në këtë rast mishërohen nga grupi i objekteve KeywordExtension. Ka shumë më tepër të dhëna në bazën e të dhënave, dhe unë nuk kam gjetur se çfarë hapësire zënë këto objekte të veçanta. Pjesa më e madhe e hapësirës që unë dyshoj është zënë nga 555,726 objektet e hyrjes së lëndëve ushqyese në çdo rast, duke çuar në një skedar të bazës së të dhënave 45 MB. Kjo është e gjitha në një aplikacion ueb Graniti (Graniti është staku ynë me burim të hapur Scala/Wicket/DB4O), jo në një telefon. Duhet pak më shumë se një minutë në një desktop me 6 bërthama për të gjeneruar të gjithë bazën e të dhënave DB4O nga e para. - person Sam Stainsby; 04.05.2011
comment
@Sam - ky është informacion i dobishëm. 45 MB është madhësia e skedarit DB4O db apo madhësia e indeksit Lucene? - person Soumya Simanta; 04.05.2011
comment
@Soumya 45 MB është madhësia totale e skedarit DB4O db - person Sam Stainsby; 04.05.2011
comment
@Sam - faleminderit. Ju lutem mund të më tregoni madhësinë e indeksit Lucene? - person Soumya Simanta; 04.05.2011
comment
@Soumya Siç thashë më parë, indekset në këtë rast mishërohen nga grupi i objekteve KeywordExtension ... dhe unë nuk kam gjetur se çfarë hapësire zënë këto objekte të veçanta. . Është një pjesë e madhësisë së bazës së të dhënave, por pa punë të mëtejshme, nuk e di se çfarë fraksioni. Gjithçka që mund të them është se këtu ka një objekt shtesë për çdo objekt domeni. - person Sam Stainsby; 05.05.2011
comment
@Sam A është ky një projekt me burim të hapur? Do të lëshoni ndonjë kod? Komuniteti db4o mund të përfitojë nga ajo që bëtë (është fantastike) - person German; 20.05.2011
comment
Aktualisht jo me burim të hapur - ishte vërtet një rast provë për kornizën tonë Granite (i cili është me burim të hapur). Do të mendojë se çfarë të bëjë me të. - person Sam Stainsby; 21.05.2011
comment
@German - tani mund të shihni një ndërfaqe bazë të internetit për bazën e të dhënave ushqyese ushqimore këtu: nutrients.ofthings.net - person Sam Stainsby; 12.08.2011