Sürətli axtarış üçün verilənləri indeksləşdirmək üçün məlumatı saxlamaq üçün db4o və Lucene istifadəsini necə birləşdirə bilərəm?

Mən həm db4o, həm də Lucene üçün yeniyəm.

Hazırda mən Android proqramında məlumatımı saxlamaq üçün db4o-dan istifadə edirəm. Mənə sürətli axtarışlar aparmaq, həmçinin istifadəçiyə təkliflər vermək bacarığı lazımdır (məsələn, avtomatik tamamlama təklifləri).

Bir SO posterində məlumatı indeksləşdirmək üçün Lucene və onu saxlamaq üçün db4o-dan istifadə edildiyi qeyd olunur.

Bu yanaşmanı tətbiq edən varmı? Əgər belədirsə, ümumi yanaşmanı bölüşsələr, minnətdar olaram? Alternativlər hansılardır?


person Soumya Simanta    schedule 27.04.2011    source mənbə
comment
Mən lucene-dən yalnız məlumat yaddaşı kimi istifadə edərdim. db4o-ya ehtiyac yoxdur və ya niyə istifadə edirsiniz? (sadəcə sənədi json olaraq saxlanılan və indekslənməmiş, ehtimal ki, sıxılmış sahəyə saxlayın)   -  person Karussell    schedule 20.10.2011


Cavablar (1)


Mən Lucene-dən verilənlər bazasında saxlanacaq elementlərdən açar sözlər çıxarmaq və müvafiq domen obyektlərinə işarə edən “açar söz uzantısı” adlandırdığım obyektləri saxlamaq üçün istifadə etdim. Bu, domen obyektlərini açar sözlə tapmaq imkanı verdi (həmçinin köklənməyə imkan verir) və açar sözlərlə bağlı narahatlıqları ayırdı. Verilənlər bazası böyük statik verilənlər toplusundan (USDA qida qidası verilənlər bazası) qurulmuşdur, ona görə də işləmə zamanı dəyişikliklərdən narahat olmağa ehtiyac duymadım. Beləliklə, bu həll indiki formada məhduddur ...

Həllin birinci hissəsi bəzi mətn götürən və hər ikisini açar sözləri və müvafiq gövdələri (Lucenenin 'Qartopu' kökündən istifadə edərək) xəritəyə çıxaran kiçik bir kod parçası yazmaq idi. Siz bundan verilənlər bazasında saxladığınız bəzi domen obyektlərindən açar sözləri/gövdələri çıxarmaq üçün istifadə edirsiniz. Mən orijinal açar sözləri ətrafımda saxladım ki, edilən axtarışlar üzrə bir növ statistika yarada bildim.

İkinci hissə, gövdələri massiv kimi, müvafiq açar sözləri isə başqa massiv kimi saxlayan və açar sözlərə malik olan müvafiq domen obyektlərinə göstərici olan “açar söz uzantıları” adlandırdığım obyektləri qurmaq idi (massivlərdən istifadə etdim, çünki onlar daha asan işləyirlər). DB4O). Mən həmçinin KeywordExtension sinifimi xüsusi domen obyektlərinin növünə uyğun olaraq alt siniflərə ayırdım - buna görə də, məsələn, mən 'Nutrient' domen obyektini və müvafiq 'NutrientKeywordExtension' obyektini saxlayırdım.

Üçüncü hissə istifadəçinin daxil etdiyi axtarış mətnini toplamaq, gövdələri çıxarmaq üçün yenidən stemmerdən istifadə etmək və həmin gövdələrlə NutrientKeywordExtension obyektlərini axtarmaqdır. Daha sonra bu uzantıların işarə etdiyi Qida obyektlərini tuta və nəhayət onları axtarış nəticələri kimi təqdim edə bilərsiniz.

Dediyim kimi, verilənlər bazam statik idi - o, proqram ilk dəfə işlədiyi zaman yaradılmışdır. Dinamik verilənlər bazasında qida maddələrini və müvafiq açar söz uzantılarını sinxronlaşdırmaqdan narahat olmalısınız. Bir həll, domen obyektlərinizdə bu materialın olmasına etiraz etmirsinizsə, qida və qida açar sözünün genişləndirilməsini bir sinifdə birləşdirmək olardı (bunu bəyənmirəm). Əks halda, hər dəfə domen obyektlərinizi yaratdığınız/redaktə etdiyiniz/sildiyiniz zaman açar söz uzantılarını nəzərə almalısınız.

Ümid edirəm ki, bu məhdud nümunə kömək edir.

person Sam Stainsby    schedule 30.04.2011
comment
@Sam - cavab verdiyiniz üçün təşəkkür edirik. Mənə indeksin ölçüsü və telefonda ilkin indeksi qurmaq üçün nə qədər vaxt lazım olduğu barədə fikir verə bilərsiniz. - person Soumya Simanta; 03.05.2011
comment
@Soumyama, bu halda indekslər KeywordExtension obyektləri dəsti ilə təcəssüm olunur. Verilənlər bazasında daha çox məlumat var və mən bu xüsusi obyektlərin hansı yeri tutduğunu dəqiqləşdirməmişəm. Şübhə etdiyim yerin əksəriyyəti hər halda 555,726 qida elementinin daxil olduğu obyektləri tutur və bu, 45 MB verilənlər bazası faylına səbəb olur. Bütün bunlar telefonda deyil, Granite veb proqramındadır (Qranit bizim öz açıq mənbəli Scala/Wicket/DB4O yığınıdır). Bütün DB4O verilənlər bazasını sıfırdan yaratmaq üçün 6 nüvəli iş masasında bir dəqiqədən çox vaxt lazımdır. - person Sam Stainsby; 04.05.2011
comment
@Sam - bu faydalı məlumatdır. 45 MB DB4O db faylının ölçüsüdür, yoxsa Lucene indeksinin ölçüsüdür? - person Soumya Simanta; 04.05.2011
comment
@Soumya 45 MB ümumi DB4O db fayl ölçüsüdür - person Sam Stainsby; 04.05.2011
comment
@Sam - təşəkkür edirəm. Zəhmət olmasa mənə Lucene indeksinin ölçüsünü deyə bilərsinizmi? - person Soumya Simanta; 04.05.2011
comment
@Soumya Daha əvvəl dediyim kimi, bu halda indekslər KeywordExtension obyektləri dəsti ilə təcəssüm olunur... və mən bu xüsusi obyektlərin hansı yeri tutduğunu işləməmişəm. . Bu verilənlər bazası ölçüsünün bir hissəsidir, lakin əlavə iş olmadan, hansı fraksiya olduğunu bilmirəm. Mən deyə bilərəm ki, burada hər domen obyekti üçün bir genişləndirmə obyekti var. - person Sam Stainsby; 05.05.2011
comment
@Sam Bu açıq mənbə layihəsidir? Bəzi kodu buraxacaqsınız? db4o icması etdiklərinizdən faydalana bilər (bu, gözəldir) - person German; 20.05.2011
comment
Hazırda açıq mənbə deyil - bu, həqiqətən bizim Qranit çərçivəmiz (açıq mənbədir) üçün sınaq nümunəsi idi. Bununla nə edəcəyini düşünəcək. - person Sam Stainsby; 21.05.2011
comment
@German - indi qida qida bazası üçün əsas veb interfeysini burada görə bilərsiniz: nutrients.ofthings.net - person Sam Stainsby; 12.08.2011