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