أدوات المستخدم

أدوات الموقع


pri:lucene


ملاحظات على lucene

تلقيم محرك البحث

بالنسبة للجزء الذي يمد lucene بالمستندات

document = new Document()
document.add(new Field(FIELD_ID, String.valueOf(1), Field.Store.YES, Field.Index.UN_TOKENIZED))
document.add(new Field(FIELD_DEPTH, String.valueOf(5), Field.Store.YES, Field.Index.UN_TOKENIZED))

http://lucene.apache.org/java/2_4_1/api/org/apache/lucene/document/Field.Index.html

يجب أن لا نستخدم Field.Index.UN_TOKENIZED و TOKENIZED الأفضل ANALYZED و NOT_ANALYZED وهو مجرد تغيير اصطلاحي

نستخدم NOT_ANALYZED مع المعرّفات أو عندما نقوم نحن بعمل التقطيع

نستخدم ANALYZED مع الحقول التي نريد أن يتم تجذيعها وتقطيعها وتوحيدها …

http://lucene.apache.org/java/2_4_1/api/org/apache/lucene/document/Field.Store.html

يجب أن نستعمل Field.Store بقيمة YES مع الحقول التي نريد أن نحفظها حتى تعاد لنا عند البحث مثل معرف الوثيقة واسم الملف وربما عنوان الوثيقة (لتوفير الاستعلام لجلب العنوان)

الصيغة أعلاه لا تحفظ Term Vector ولا تستفيد منه وهو عد الكلمات (وتتابعها وإزاحتها)

Term vectors will not be stored in the index. 

لذا من الأفضل أن يكون التطبيق

document = new Document()
document.add(new Field(FIELD_ID, String.valueOf(1), Field.Store.YES, Field.Index.NOT_ANALYZED))
document.add(new Field(FIELD_FILENAME, fn, Field.Store.YES, Field.Index.NOT_ANALYZED))
document.add(new Field(FIELD_CONTENT, "Hello World", Field.Store.NO, Field.Index.ANALYZED,Field.TermVector.WITH_POSITIONS_OFFSETS))

التفصيل مذكور في

http://lucene.apache.org/java/2_4_1/api/org/apache/lucene/document/Field.TermVector.html

بالنسبة للتقطيع والتجذيع

وظيفة المحلل هو التقطيع والتجذيع

Typical implementations first build a Tokenizer, which breaks the stream of characters from the Reader into raw Tokens. One or more TokenFilters may then be applied to the output of the Tokenizer. 

بالنسبة للجزء

indexWriter = new IndexWriter(indexDirFile, new StandardAnalyzer(), true)

فهو يستعمل التحليل القياسي الخاص باللغة الإنجليزية وكما هو واضح من الوثائق فإن كل لغة لها محلل خاص بها كالبرازيلية

إن المحلل القياسي ليس أقوى محلل للقة الإنجليزية بل هناك

Snowball حيث يقوم بما يلي بعد التقطيع القياسي:

  • StandardFilter
  • LowerCaseFilter - تحويل كل الحروف إلى صغيرة
  • StopFilter - إهمال الكلمات بعض الكلمات الإنجليزية
  • SnowballFilter - التجذيع

يجب أن نقوم ببناء محلل خاص بنا مبني من أحدها

http://svn.apache.org/repos/asf/lucene/java/trunk/src/java/org/apache/lucene/analysis/

وبالحبث في الكود وجدت محلل للغة العربية

http://svn.apache.org/repos/asf/lucene/java/trunk/contrib/analyzers/src/java/org/apache/lucene/analysis/ar/

اكتب

svn co http://svn.apache.org/repos/asf/lucene/java/trunk/contrib/analyzers/src/java/org/apache/lucene/analysis/ar/

وهو موثق هنا وهناك كود سي للتجذيع

http://members.unine.ch/jacques.savoy/clef/index.html

وهو طبعا غبي لأنه ظاهر جدا أنه قام بتقطيع صحيفة واعتبر الكلمات المحرردة جدا مهملة مثل غزة واسرائيل

بأي حال علينا وضع برنامج التحليل والتجذيع الخاص بنا هناك وليس عند تمرير المحتوي عبر document.add

محرك البحث xapian ربما يحتوي معلومات خطا في

http://trac.xapian.org/browser/trunk/xapian-core/unicode/tclUniData.cc

نقاش

أدخل تعليقك:
229​ +3 =᠎ ?
 
pri/lucene.txt · آخر تعديل: 2015/04/23 00:21 (تحرير خارجي)