Kuinka yhdistän db4o:n käytön tietojen tallentamiseen ja Lucenen käytön tietojen indeksointiin nopeaa hakua varten?

Olen uusi sekä db4o:ssa että Lucenessa.

Tällä hetkellä käytän db4o:ta tietojeni säilyttämiseen Android-sovelluksessa. Tarvitsen kyvyn tehdä nopeita hakuja sekä antaa ehdotuksia käyttäjälle (esim. automaattisen täydennyksen ehdotuksia).

SO-juliste, jossa mainittiin Lucenen käyttäminen tietojen indeksoimiseen ja db4o:n käyttäminen niiden tallentamiseen.

Onko kukaan ottanut käyttöön tätä lähestymistapaa? Jos kyllä, olisin kiitollinen, jos he jakavat yleisen lähestymistavan? Mitkä ovat vaihtoehdot?


person Soumya Simanta    schedule 27.04.2011    source lähde
comment
Haluaisin käyttää Lucenea vain tietovarastona. ei tarvita db4o:ta tai miksi käyttäisit sellaista? (tallenna dokumentti vain json-muodossa tallennettuun ja indeksoimattomaan luultavasti pakattuun kenttään)   -  person Karussell    schedule 20.10.2011


Vastaukset (1)


Käytin Lucenen avainsanoja poimimaan avainsanoja tietokantaan tallennettavista kohteista ja tallentamaan niin kutsutut "avainsanalaajennus"-objektit, jotka osoittavat vastaaviin verkkotunnuksen objekteihin. Tämä teki verkkotunnuksen kohteista löydettävissä avainsanoilla (myös varsinainen) ja erotti avainsanojen huolenaiheet. Tietokanta rakennettiin suuresta staattisesta tietojoukosta (USDA:n ravintoainetietokanta), joten minun ei tarvinnut huolehtia ajon aikana tapahtuvista muutoksista. Siten tämä ratkaisu on rajoitettu nykyisessä muodossaan ...

Ratkaisun ensimmäinen osa oli kirjoittaa pieni koodipala, joka ottaa tekstiä ja poimia sekä avainsanat että vastaavat varret (käyttäen Lucenen "Lumipallo" -runkoa) kartaksi. Käytät tätä avainsanoja/runkoja joistakin tietokantaan tallentamistasi toimialueobjekteista. Säilytin alkuperäiset avainsanat, jotta voisin luoda jonkinlaisia ​​tilastoja tehdyistä hauista.

Toinen osa oli rakentaa objekteja, joita kutsuin "avainsanalaajennuksiksi", jotka tallentavat varret taulukona ja vastaavat avainsanat toisena taulukona ja joilla on osoitin vastaaviin verkkotunnuksen objekteihin, joissa oli avainsanat (käytin taulukoita, koska ne toimivat helpommin DB4O). Olen myös luokittanut KeywordExtension-luokkani vastaamaan tiettyä verkkotunnuksen objektien tyyppiä - joten esimerkiksi tallensin 'Nutrient'-domainobjektin ja vastaavan 'NutrientKeywordExtension'-objektin.

Kolmas osa on kerätä käyttäjän syöttämä hakuteksti, käyttää varret uudelleen poimimaan varret ja etsiä NutrientKeywordExtension-objekteja näillä varsilla. Voit sitten tarttua ravintoaineobjekteihin, joihin nämä laajennukset osoittavat, ja lopuksi esittää ne hakutuloksina.

Kuten sanoin, tietokantani oli staattinen - se luodaan, kun sovellus suoritetaan ensimmäisen kerran. Dynaamisessa tietokannassa sinun on huolehdittava ravinteiden ja vastaavien avainsanalaajennusten synkronoinnista. Yksi ratkaisu olisi yhdistää ravintoaine- ja ravintoaineavainsanalaajennus yhdeksi luokaksi, jos et haittaa, että tavarat ovat verkkotunnuksesi objektien sisällä (en pidä tästä). Muussa tapauksessa sinun on otettava huomioon avainsanalaajennukset aina, kun luot/muokkaat/poistat verkkotunnuksesi objekteja.

Toivottavasti tämä rajoitettu esimerkki auttaa.

person Sam Stainsby    schedule 30.04.2011
comment
@Sam - kiitos vastauksestasi. Voitko antaa minulle käsityksen indeksin koosta ja kuinka paljon aikaa kesti ensimmäisen indeksin rakentamiseen puhelimessa. - person Soumya Simanta; 03.05.2011
comment
@Soumyama indeksit tässä tapauksessa sisältyvät KeywordExtension-objektien joukkoon. Tietokannassa on paljon enemmän tietoa, enkä ole selvittänyt, mitä tilaa nämä tietyt objektit vievät. Epäilen, että suurin osa tilasta on joka tapauksessa 555 726 ravintoaineiden syöttöobjektien varassa, mikä johtaa 45 Mt:n tietokantatiedostoon. Tämä kaikki on Granite-verkkosovelluksessa (Granite on oma avoimen lähdekoodin Scala/Wicket/DB4O-pino), ei puhelimessa. Koko DB4O-tietokannan luominen tyhjästä kestää hieman yli minuutin 6-ytimisellä työpöydällä. - person Sam Stainsby; 04.05.2011
comment
@Sam - tämä on hyödyllistä tietoa. 45 Mt on DB4O db -tiedoston koko vai Lucenen indeksin koko? - person Soumya Simanta; 04.05.2011
comment
@Soumya 45 Mt on DB4O db -tiedoston kokonaiskoko - person Sam Stainsby; 04.05.2011
comment
@Sam - kiitos. Voitko kertoa minulle Lucene-indeksin koon? - person Soumya Simanta; 04.05.2011
comment
@Soumya Kuten aiemmin sanoin, indeksit tässä tapauksessa ilmentävät joukko KeywordExtension-objekteja ... enkä ole selvittänyt, mitä tilaa nämä tietyt objektit vievät. . Se on murto-osa tietokannan koosta, mutta ilman lisätyötä en tiedä mikä osa. Voin vain sanoa, että tässä on yksi laajennusobjekti verkkotunnusobjektia kohden. - person Sam Stainsby; 05.05.2011
comment
@Sam Onko tämä avoimen lähdekoodin projekti? Aiotko julkaista jotain koodia? db4o-yhteisö voisi hyötyä tekemästäsi (se on mahtavaa) - person German; 20.05.2011
comment
Ei tällä hetkellä avoimen lähdekoodin - se oli todella testitapaus Granite-kehyksellemme (joka on avoimen lähdekoodin). Mietitään mitä sille tehdään. - person Sam Stainsby; 21.05.2011
comment
@German – näet nyt perusverkkokäyttöliittymän ravintoainetietokantaa varten täältä: nutrients.ofthings.net - person Sam Stainsby; 12.08.2011