Энэ блогоос хайх

Thursday 19 May 2011

Хайлтын системийн үндэс - Lucene үргэлжлэл

Lucene-ы зүрхэнд Index/индекс оршино. Энэ класс нь тодорхой бүтцийн дагуу зохион байгуулагдсан файлуудыг агуулсан файл системийн директороос өгөгдлөө авна. 

Эхлээд өгөгдлөө индекслэх ба, дараа нь тэр индекс дээр хайлт хийгдээд хайлтын үр дүнг гаргаж ирдэг. Индексийг үүсгэхийн тулд IndexWriter  объектыг ашигладаг. Индекс дээр хайлтыг хийхийн тулд IndexSearcher объектыг ашигладаг.

Хайлт өөрөө IndexSearcher.search() руу дамжуулагдаж буй Query объект байх ба IndexSearcher.search() нь Document объектуудын векторыг агуулсан Hits объектыг үр дүндээ гаргаж өгнө.

Document объектууд нь индекст хадгалагддаг ба тэдгээрийг индекслэх ажил нь таны ажил байх болно. Өөрөөр хэлбэл ямар өгөгдлийг индекс рүү оруулахыг сонгож өгөх хэрэгтэй ба тэдгээрийг Documents руу хөрвүүлнэ. Documents-ыг үүсгэхийн тулд өгөгдлийн файлуудыг  (өгөгдлийн баазын оролт ч юмуу өөр бусдаас) уншаад өгөгдлүүдийг жижиг хэсгүүдэд хуваагаад, тэр жижиг хэсгүүдийг Document дээр Field объект( name/value-нэр/өгөгдлийн утга) байдлаар хадгална. Ингээд Document-ыг үүсгэх ажил дуусвал түүнийг IndexWriter-ыг ашиглаад индекс рүү бичнэ. 

Lucene нь Query объектыг үүсгэхэд тусалдаг QueryParser гэх хэрэгслийг агуулдаг.

Дээр хэлсэн зүйлүүдийг эргэн харвал Lucene нь индекслэх, хайх, үр дүнг гаргах зэрэг үйлдлүүдийг хийдэг байх нь. Харин дараах зүйлүүдийг бидэнд хийж өгдөггүй ба тэдгээр нь бидний хийх ёстой ажил байх болно.
  • процессыг удирдах (индекслэх болон хайхын тулд обьектуудыг эхлүүлэх болон тэдгээрийг хамтад нь гогцоодон авах )
  • өгөгдлийн файлуудыг сонгох
  • өгөгдлийн файлуудыг фарслах
  • хэрэглэгчээс хайх тэмдэгтийг авах
  • хэрэглэгчид үр дүнг гаргаж үзүүлэх 
За одоог хүртэл ерөнхий ойлголтыг тайлбарлалаа. Дараагийн бичлэгт хэрхэн инстоол хийх болон жишээг оруулнаа.

Хайлтын системийн үндэс - Lucene

Lucene нь Doug Cutting-ны бичсэн, гүйцэтгэл өндөртэй, бүх төрлийн чадварыг агуулсан, нээлттэй эхийн, жава хэл дээр бичигдсэн текст хайлтын энжин API юм. Lucene нь API болохоос эппликэшн биш гэдгийг анхаарах хэрэгтэй. Энэ юу гэсэн үг вэ гэхээр текстийг хайхад шаардагдах бүх хүнд ажлуудыг уг API хийж өгөх ба харин түүнийг ашиглах бага зэргийн код бичих ажил л танд үлдэж байна гэсэн үг. Энэ л танд ногдож буй ажил бөгөөд бусад энгийн хайлтын энжин эппликэшнүүдээс ялгаатай нь чиний хэрэгцээнд тохирсон хайлтын эппликншнийг бичихэд шаардагдах мянга түмэн ажилд зарцуулах цаг, хөдөлмөрийг чинь багасгаж өгнө. Тэгээд чиний хэрэгцээ шаардлагад нийцсэн хайлтын эппликэшнийг хялбархан хөгжүүлж болно. 


Lucene нь 4 жишээ классаас бүрдсэн байдаг ба эдгээрийн учрыг л олоод авчихбал Lucene-ыг ашиглахад хялбар байх болно.
  1. FileDocument
  2. IndexFiles
  3. SearchFiles
  4. DeleteFiles
Lucene-ы классууд нь хоорондоо хэрхэн холбоотой болохыг диаграммаар үзүүлэхийг оролдоё.


Index
  Document1
    FieldA(name/value)
    FieldB(name/value)
    ...


  Document2
    FieldA(name/value)
    FieldB(name/value)
    ...


 За дараагийн бичлэгт үргэлжлүүлнээ.

Sunday 15 May 2011

Баярмаа. Амьдрал

Олон өнгөт их ус мөрнүүдийг
Одоохондоо би сэтгэл гэж нэрлэдэг
Бэхэн цэнхэр далайг цагаан сувдаар чимээд
Би түүнийг аз жаргал гэдэг

Элгээрээ ус бүлээцүүлээд намайг норгоод
Эрхэлж хоносон шувуудыг хүлээлт гэдэг
Нарны шаргал судлаар ариун ус лугшиж
Намрын тэнгэрт мандахыг мөрөөдөл гэдэг

Холын огторгуйд даараад намайг санаад
Хожмоо бороо болон асгархыг хайр гэдэг
Шөнөөр загас гэрэлт хорхойн жимээр нэгжээд
Шинээр шүрэн арал олж нээхийг шүлэг гэдэг

Зөгнөлийн ордонд зугаацаж ханаад намайг дуудаад
Зүүд нойрноос татан сэрээхийг онгод гэдэг
Шар далайн ус солирын бороонд нүдүүлж
Шархндаа чичрэхийг би зовлон гэж нэрлэдэг

Буй биеэрээ өвдөж булингараар хулдаж намайг нуугаад
Буцалж өөрөө цэвэрших их усыг амьдрал гэдэг


Өөрөө юм бичихээс илүү бусдынхыг уншсаар цаггүй болчих

Блогчид үнэхээр хөдөлмөрч улс байдаг байх гэж бодогдоно.