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