Kā apvienot db4o izmantošanu datu glabāšanai un Lucene izmantošanu datu indeksēšanai ātrai meklēšanai?

Esmu jauns gan db4o, gan Lucene.

Pašlaik es izmantoju db4o, lai saglabātu savus datus Android lietotnē. Man ir nepieciešama iespēja veikt ātru meklēšanu, kā arī sniegt lietotājam ieteikumus (piem., automātiskās pabeigšanas ieteikumus).

SO plakātā minēts, ka datu indeksēšanai tiek izmantots Lucene un to glabāšanai izmantots db4o.

Vai kāds ir ieviesis šo pieeju? Ja jā, es būtu pateicīgs, ja viņiem būtu kopīga vispārējā pieeja? Kādas ir alternatīvas?


person Soumya Simanta    schedule 27.04.2011    source avots
comment
Es gribētu izmantot lucene tikai kā datu krātuvi. nav nepieciešams db4o vai kāpēc jūs tādu izmantotu? (vienkārši saglabājiet dokumentu kā json saglabātā un neindeksētā, iespējams, saspiestā laukā)   -  person Karussell    schedule 20.10.2011


Atbildes (1)


Es izmantoju Lucene, lai izvilktu atslēgvārdus no vienumiem, kas jāsaglabā datu bāzē, un saglabātu tā saucamos “atslēgvārdu paplašinājumu” objektus, kas norāda uz atbilstošajiem domēna objektiem. Tas padarīja domēna objektus atrodamus pēc atslēgvārda (atļaujot arī cilmes veidošanu) un atdalīja atslēgvārdus. Datubāze tika izveidota no lielas statiskas datu kopas (USDA pārtikas uzturvielu datubāze), tāpēc man nebija jāuztraucas par izmaiņām izpildlaika laikā. Tādējādi šis risinājums ir ierobežots pašreizējā formā ...

Pirmā risinājuma daļa bija uzrakstīt nelielu koda daļu, kas aizņem daļu teksta un izvelk gan atslēgvārdus, gan atbilstošos cilmes (izmantojot Lucene 'Snowball' celmu) kartē. Jūs to izmantojat, lai izvilktu atslēgvārdus/celmus no dažiem domēna objektiem, kurus glabājat datu bāzē. Es saglabāju sākotnējos atslēgvārdus, lai varētu izveidot sava veida statistiku par veiktajiem meklējumiem.

Otrajā daļā bija jākonstruē objekti, kurus es nosaucu par “atslēgvārdu paplašinājumiem”, kuri saglabā celmus kā masīvu un atbilstošos atslēgvārdus kā citu masīvu un kuriem ir rādītājs uz attiecīgajiem domēna objektiem, kuriem bija atslēgvārdi (es izmantoju masīvus, jo tie darbojas vieglāk ar DB4O). Es arī klasificēju savu KeywordExtension klasi, lai tā atbilstu konkrētā domēna objektu tipam, piemēram, es saglabāju domēna objektu “Nutrient” un atbilstošu objektu “NutrientKeywordExtension”.

Trešā daļa ir apkopot lietotāja ievadīto meklēšanas tekstu, vēlreiz izmantot kātu, lai izvilktu kātus, un meklēt NutrientKeywordExtension objektus ar šiem kātiem. Pēc tam varat tvert Uzturvielu objektus, uz kuriem norāda šie paplašinājumi, un beidzot parādīt tos kā meklēšanas rezultātus.

Kā jau teicu, mana datu bāze bija statiska — tā tiek izveidota, kad lietojumprogramma darbojas pirmo reizi. Dinamiskā datu bāzē jums būs jāuztraucas par uzturvielu un atbilstošo atslēgvārdu paplašinājumu sinhronizāciju. Viens no risinājumiem būtu barības vielu un uzturvielu atslēgvārdu paplašinājumu apvienošana vienā klasē, ja jūs neiebilstat, ka šī informācija ir iekļauta jūsu domēna objektos (man tas nepatīk). Pretējā gadījumā jums ir jāņem vērā atslēgvārdu paplašinājumi ikreiz, kad izveidojat/rediģējat/dzēšat domēna objektus.

Es ceru, ka šis ierobežotais piemērs palīdzēs.

person Sam Stainsby    schedule 30.04.2011
comment
@Sem - paldies par atbildi. Vai varat sniegt priekšstatu par indeksa lielumu un cik daudz laika pagāja, lai telefonā izveidotu sākotnējo indeksu. - person Soumya Simanta; 03.05.2011
comment
@Soumyama indeksus šajā gadījumā iemieso KeywordExtension objektu kopa. Datu bāzē ir daudz vairāk datu, un es neesmu noskaidrojis, kādu vietu šie konkrētie objekti aizņem. Man šķiet, ka lielāko daļu vietas aizņem 555 726 barības vielu ievades objekti, kas noved pie 45 MB datu bāzes faila. Tas viss ir pieejams Granite tīmekļa lietojumprogrammā (Granite ir mūsu pašu atvērtā koda Scala/Wicket/DB4O steks), nevis tālrunī. Lai ģenerētu visu DB4O datu bāzi no nulles, uz 6 kodolu darbvirsmas ir nepieciešama nedaudz vairāk nekā minūte. - person Sam Stainsby; 04.05.2011
comment
@Sem — tā ir noderīga informācija. 45 MB ir DB4O db faila lielums vai Lucene indeksa lielums? - person Soumya Simanta; 04.05.2011
comment
@Soumya 45 MB ir kopējais DB4O db faila lielums - person Sam Stainsby; 04.05.2011
comment
@Sem - paldies. Vai varat, lūdzu, pateikt Lucene indeksa lielumu? - person Soumya Simanta; 04.05.2011
comment
@Soumya Kā jau teicu iepriekš, indeksus šajā gadījumā iemieso KeywordExtension objektu kopa... un es neesmu noskaidrojis, kādu vietu šie konkrētie objekti aizņem. . Tā ir daļa no datu bāzes lieluma, bet bez turpmāka darba, es nezinu, kāda daļa. Es varu tikai teikt, ka katram domēna objektam ir viens paplašinājuma objekts. - person Sam Stainsby; 05.05.2011
comment
@Sam Vai šis ir atvērtā koda projekts? Vai jūs gatavojaties izlaist kādu kodu? db4o kopiena varētu gūt labumu no jūsu paveiktā (tas ir lieliski) - person German; 20.05.2011
comment
Pašlaik nav atvērtā koda — tas tiešām bija mūsu Granite sistēmas (kas ir atvērtā koda) pārbaudes gadījums. Padomās, ko ar to darīt. - person Sam Stainsby; 21.05.2011
comment
@German — tagad jūs varat skatīt pamata tīmekļa lietotāja saskarni pārtikas uzturvielu datubāzei šeit: nutrients.ofthings.net - person Sam Stainsby; 12.08.2011