32.10. º£½ºÆ® ÇÁ·¢Æ¼½º

32.10.1. Çʵå¸í

Zend_Search_Lucene ±×·³, Çʵå¸í¿¡ °üÇÑ Á¦ÇÑÀº Ưº°È÷ ¾ø½À´Ï´Ù.

±×·¯³ª, ÇÒ ¼ö ÀÖÀ¸¸é 'id' ¹× 'score' (ÀÌ)¶ó´Â À̸§Àº »ç¿ëÀ» »ï°¡Çϵµ·Ï ÇսôÙ. À̰͵éÀ» »ç¿ëÇϸé,QueryHit ÀÇ ÇÁ·ÓÆÛƼ¸í°ú ±¸º°Çϱ⠾î·Á¿öÁý´Ï´Ù.

Zend_Search_Lucene_Search_QueryHit ÀÇ ÇÁ·ÓÆÛƼ id (¿Í)°ú score (Àº)´Â °¢°¢,Lucene ¹®¼­°¡ ³»ºÎ¿¡¼­ »ç¿ëÇÑ´Ù ID, °Ë»ö °á°úÀÇ ½ºÄÚ¾Æ (À»)¸¦ ³ªÅ¸³À´Ï´Ù.¸¸¾à ¹®¼­·Î À̰͵é°ú °°Àº À̸§ÀÇ Çʵ带 »ç¿ëÇϰí ÀÖ´Ù¸é, ±× Çʵ忡 ¾×¼¼½º ÇÏ·Á¸é getDocument() ¸Þ¼Òµå¸¦ »ç¿ëÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.


<?php
$hits 
$index->find($query);

foreach (
$hits as $hit) {
    
// 'title' Çʵ带 ÃëµæÇÕ´Ï´Ù
    
$title $hit->title;

    
// 'contents' Çʵ带 ÃëµæÇÕ´Ï´Ù
    
$contents $hit->contents;


    
// Lucene ¹®¼­ÀÇ ³»ºÎ ID (À»)¸¦ ÃëµæÇÕ´Ï´Ù
    
$id $hit->id;

    
// °Ë»ö °á°úÀÇ ½ºÄھƸ¦ ÃëµæÇÕ´Ï´Ù
    
$score $hit->score;


    
// 'id' Çʵ带 ÃëµæÇÕ´Ï´Ù
    
$docId $hit->getDocument()->id;

    
// 'score' Çʵ带 ÃëµæÇÕ´Ï´Ù
    
$docId $hit->getDocument()->score;

    
// 'title' Çʵ嵵 ÀÌ ¹æ¹ýÀ¸·Î ÃëµæÇÒ ¼ö ÀÖ½À´Ï´Ù
    
$title $hit->getDocument()->title;
}

32.10.2. À妽º ÀÛ¼ºÀÇ ÆÛÆ÷¸Õ½º

À妽º ÀÛ¼ºÀÇ ÆÛÆ÷¸Õ½º´Â, ÀÚ¿øÀÇ ¼Òºñ·®°ú ¼Ò¿ä ½Ã°£, ±×¸®°í À妽ºÀÇ Ç°Áú°úÀÇ ±ÕÇüÀ¸·Î Á¤ÇØÁý´Ï´Ù.

À妽ºÀÇ Ç°ÁúÀ̶õ, ¿äÄÁµ¥ À妽º ¼¼±×¸ÕÆ®(segment)ÀÇ ¼öÀÔ´Ï´Ù.

°¢ À妽º ¼¼±×¸ÕÆ®(segment)´Â µ¥ÀÌÅͺοʹ µ¶¸³Çϰí ÀÖ½À´Ï´Ù. Áï, À妽º¿¡ Æ÷ÇԵǴ ¼¼±×¸ÕÆ®(segment)°¡ ¸¹¾ÆÁö¸é Áú ¼ö·Ï °Ë»ö¿¡ ÇÊ¿ä·Î ÇÏ´Â ¸Þ¸ð¸®¿Í ½Ã°£Àº Áõ°¡ÇÕ´Ï´Ù.

À妽ºÀÇ ÃÖÀûÈ­¸¦ ½Ç½ÃÇϸé, º¹¼öÀÇ ¼¼±×¸ÕÆ®(segment)¸¦ Á¤¸®ÇØ »õ·Î¿î ÇϳªÀÇ ¼¼±×¸ÕÆ®(segment)¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ¿ÏÀüÇÏ°Ô ÃÖÀûÈ­µÈ À妽º´Â, ¼¼±×¸ÕÆ®(segment) Çϳª¸¸À¸·Î ±¸¼ºµË´Ï´Ù.

À妽ºÀÇ ÃÖÀûÈ­¸¦ ½Ç½ÃÇÏ·Á¸é optimize() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.


<?php
$index 
Zend_Search_Lucene::open($indexPath);

$index->optimize();

À妽ºÀÇ ÃÖÀûÈ­´Â µ¥ÀÌÅÍ ½ºÆ®¸²»ó¿¡¼­ ÇàÇØÁö¹Ç·Î, ±×¸¸Å­ ¸Þ¸ð¸®´Â ¼ÒºñÇÏÁö ¾Ê½À´Ï´Ù.´ÜÁö,CPU ÀÚ¿øÀ» ²Ï ¼ÒºñÇØ, ½Ã°£µµ °É¸³´Ï´Ù.

Lucene ÀÇ À妽º ¼¼±×¸ÕÆ®(segment)´Â, ±× ¼ºÁú»ó °»½ÅÀº ÇÒ ¼ö ¾ø½À´Ï´Ù (°»½ÅÇÏ·Á¸é , ¼¼±×¸ÕÆ®(segment) ÆÄÀÏÀ» ´Ù½Ã »õ·Ó°Ô ¸¸µé Çʿ䰡 ÀÖ½À´Ï´Ù). µû¶ó¼­, »õ·Î¿î ¹®¼­°¡ À妽º¿¡ Ãß°¡µÉ ¶§¸¶´Ù »õ·Î¿î ¼¼±×¸ÕÆ®(segment)°¡ ÀÛ¼ºµÇ°Ô µË´Ï´Ù. ±× °á°ú, À妽ºÀÇ Ç°ÁúÀº ³»·Á¼­ °©´Ï´Ù.

¼¼±×¸ÕÆ®(segment)°¡ ÀÛ¼ºµÉ ¶§¸¶´Ù À妽ºÀÇ ÀÚµ¿ ÃÖÀûÈ­¸¦ ÇØ ÀϺÎÀÇ ¼¼±×¸ÕÆ®(segment)´Â ÀÚµ¿ÀûÀ¸·Î ¸ÓÁö µË´Ï´Ù.

ÀÚµ¿ ÃÖÀûÈ­ÀÇ ¼³Á¤Àº, ´ÙÀ½ÀÇ 3 °³ÀÇ ¿É¼ÇÀ¸·Î º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù (À妽ºÀÇ ÃÖÀûÈ­ (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ).

  • MaxBufferedDocs (Àº)´Â, ¸Þ¸ð¸®³»ÀÇ ¹öÆÛ¿¡ º¸°ü À¯ÁöµÇ´Â ¹®¼­ÀÇ ÃÖ´ë¼öÀÔ´Ï´Ù. ÀÌ ¼ö¸¦ ³ÑÀ¸¸é, »õ·Î¿î ¼¼±×¸ÕÆ®(segment)¸¦ ÀÛ¼ºÇØ ÇÏµå µð½ºÅ©¿¡ ¾¹´Ï´Ù.

  • MaxMergeDocs (Àº)´Â, ÀÚµ¿ ÃÖÀûÈ­¿¡ ÀÇÇØ¼­ »õ·Î¿î ¼¼±×¸ÕÆ®(segment)¿¡ÀÇ ¸ÓÁö¸¦ ½Ç½ÃÇÏ´Â ±âÁØÀÌ µÈ´Ù ¹®¼­¼öÀÔ´Ï´Ù.

  • MergeFactor (Àº)´Â, ÀÚµ¿ ÃÖÀûÈ­¸¦ ½Ç½ÃÇÏ´Â ºóµµ¸¦ ÁöÁ¤ÇÕ´Ï´Ù.

[ÁÖÀÇ] ÁÖÀÇ

ÀÌ·¯ÇÑ ¿É¼ÇÀº ¸ðµÎ Zend_Search_Lucene ¿ÀºêÁ§Æ®ÀÇ ÇÁ·ÓÆÛƼÀ̸ç, À妽ºÀÇ ÇÁ·ÓÆÛƼ°¡ ¾Æ´Õ´Ï´Ù. µû¶ó¼­, ÀÌ ¼³Á¤Àº ÇöÀç »ç¿ëÁßÀÇ Zend_Search_Lucene ¿ÀºêÁ§Æ® ¿¡ ´ëÇØ¼­¸¸ ÀÏÇÏ°Ô µÇ¾î, ½ºÅ©¸³Æ®¿¡ µû¶ó¼­ ¼³Á¤Àº ´Ù¸¨´Ï´Ù.

MaxBufferedDocs (Àº)´Â, ½ºÅ©¸³Æ®¸¦ 1ȸ ½ÇÇàÇÒ ¶§¸¶´Ù ÇϳªÀÇ ¹®¼­ ¹Û¿¡ Ãë±ÞÇÏÁö ¾Ê´Â °æ¿ì´Â ¾î¶² ¿µÇâµµ ¹ÌÄ¡Áö ¾Ê½À´Ï´Ù. ¹Ý´ë·Î, ¹èġó¸®ÀÇ °æ¿ì¿¡´Â ÀÌ ¼³Á¤ÀÌ ¸Å¿ì Áß¿äÇÏ°Ô µË´Ï´Ù. °ªÀ» Å©°Ô Çϸé À妽º ÀÛ¼ºÀÇ ¼Óµµ°¡ ¿À¸¨´Ï´Ù¸¸, µ¿½Ã¿¡ ´ë·®ÀÇ ¸Þ¸ð¸®¸¦ ¼ÒºñÇÏ°Ô µË´Ï´Ù.

MaxBufferedDocs ÆÄ¶ó¹ÌÅÍÀÇ °ªÀ¸·Î ÇØ¼­ ÃÖÀûÀÎ °ÍÀ» °è»êÇÏ´Â °ø½ÄÀº ¾ø½À´Ï´Ù. À̰ÍÀº ¹®¼­ÀÇ »çÀÌÁ ÇØ¼®±â, »ç¿ëÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸®·® µî¿¡ ÀÇÁ¸Çϱ⠶§¹®ÀÔ´Ï´Ù.

ÃÖÀûÀÎ ¼³Á¤Ä¡¸¦ ÃëµæÇÏ·Á¸é , Ãë±ÞÇÒ ¹®¼­ Áß(¾È)¿¡¼­ °¡Àå »çÀÌÁî°¡ Å« °ÍÀ» ÀÌ¿ëÇØ ¸î ¹øÀ̳ª Å×½ºÆ®¸¦ ÇØ º¾½Ã´Ù [17]. »ç¿ë °¡´ÉÇÑ ¸Þ¸ð¸® Áß ¹ÝÀ» ³ÑÁö ¾Ê´Â Á¤µµÀÇ ¸Þ¸ð¸® ¼Òºñ·®¿¡ ¾ïÁ¦ÇØ µÎ´Â °ÍÀ» ÃßõÇÕ´Ï´Ù.

MaxMergeDocs (Àº)´Â ¼¼±×¸ÕÆ®(segment)ÀÇ Å©±â (À̰ÍÀº ¹®¼­ÀÇ Å©±â¿¡ ÀÇÇØ¼­ Á¤ÇØÁý´Ï´Ù) (À»)¸¦ Á¦ÇÑÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, ÀÚµ¿ ÃÖÀûÈ­ÀÇ ½Ã°£À» ´ÜÃàÇÒ ¼ö ÀÖ½À´Ï´Ù. Áï,addDocument() ¸Þ¼Òµå°¡ ¾î´À ½Ã°£ ÀÌ»óÀº ½ÇÇàµÇÁö ¾Ê°Ô µË´Ï´Ù. À̰ÍÀº, ´ëÈ­ÀûÀÎ ¾îÇø®ÄÉÀ̼ÇÀ¸·Î Áß¿äÇÏ°Ô µË´Ï´Ù.

MaxMergeDocs ÀÇ ¼³Á¤Ä¡¸¦ ÀÛ°Ô Çϸé, ¹èġó¸®ÀÇ ÆÛÆ÷¸Õ½ºµµ ¿À¸¨´Ï´Ù. À妽ºÀÇ ÀÚµ¿ ÃÖÀûÈ­´Â ´ëÈ­ÀûÀΠó¸®À̸ç, Çϳª Çϳª¼ø¼­¸¦ ÂÑ¾Æ ½ÇÇàÇØ °¥ °ÍÀÔ´Ï´Ù. ÀÛÀº ¼¼±×¸ÕÆ®(segment)µéÀÌ ÇϳªÀÇ Å« ¼¼±×¸ÕÆ®(segment)¿¡ Á¤¸®ÇØ ÇÑÃþ ´õ ¶Ç ±×°ÍÀÌ ´Ù¸¥ ¼¼±×¸ÕÆ®(segment)¶ó°í °áÁ¤µÇ¾îº¸´Ù Å« ¼¼±×¸ÕÆ®(segment)°¡ µÇ¾î, ±×·¸´Ù°í ÇÏ´Â »óÅÂÀÔ´Ï´Ù.À妽ºÀÇ ÃÖÀûÈ­¸¦ ¿ÏÀüÇÏ°Ô ½Ç½ÃÇϸé, 󸮰¡ ¸Å¿ì È¿À²ÀûÀ¸·Î µË´Ï´Ù.

¼¼±×¸ÕÆ®(segment)ÀÇ »çÀÌÁ ÀÛ°Ô Çϸé À妽ºÀÇ Ç°ÁúÀÌ ³»·Á, ´ë·®ÀÇ ¼¼±×¸ÕÆ®(segment)°¡ ¿Ï¼ºµÇ¾î ¹ö¸³´Ï´Ù.°æ¿ì¿¡ µû¶ó¼­´Â,OS ÀÇ Á¦ÇÑÀ¸·Î °É·Á "¿ÀÇÂÇϰí ÀÖ´Â ÆÄÀÏÀÌ ³Ê¹« ¸¹´Ù" ±×·¸´Ù°í ÇÏ´Â ¿¡·¯°¡ ¹ß»ýÇÒÁöµµ ¸ð¸¨´Ï´Ù [18].

µû¶ó¼­, ¹é±×¶ó¿îµå¿¡¼­ÀÇ À妽ºÀÇ ÃÖÀûÈ­´Â ´ëÈ­ ¸ðµå·Î ½Ç½ÃÇØ, ¹èġ󸮿ëÀÇ MaxMergeDocs (Àº)´Â ³Ê¹« ³Ê¹« ÀÛ°Ô ÇÏÁö ¾Ê°Ô ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

MergeFactor (Àº)´Â ÀÚµ¿ ÃÖÀûÈ­ÀÇ ºóµµ¿¡ ¿µÇâÀ» ¹ÌĨ´Ï´Ù. °ªÀ» ÀÛ°Ô Çϸé, ÃÖÀûÈ­µÇ¾î ÀÖÁö ¾ÊÀº À妽ºÀÇ Ç°ÁúÀÌ ¿À¸¨´Ï´Ù. °ªÀ» Å©°Ô Çϸé À妽º ÀÛ¼ºÀÇ Ã¥µµ°¡ ¿À¸¨´Ï´Ù¸¸, ¼¼±×¸ÕÆ®(segment)ÀÇ ¼öµµ Áõ°¡ÇÕ´Ï´Ù.¸î¹øÀ̳ª ¸»ÇÕ´Ï´Ù¸¸, À̰ÍÀº "¿ÀÇÂÇϰí ÀÖ´Â ÆÄÀÏÀÌ ³Ê¹« ¸¹´Ù" ¿¡·¯ÀÇ ¿øÀÎÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù.

MergeFactor (Àº)´Â, ÀÌÇÏÀÇ Á¶°ÇÀ» ä¿ì´Â Å©±â·Î À妽º ¼¼±×¸ÕÆ®(segment)¸¦ ±×·ìÈ­ ÇÕ´Ï´Ù.

  1. MaxBufferedDocs ÀÌÇÏ

  2. MaxBufferedDocs º¸´Ù Å©Áö¸¸ MaxBufferedDocs*MergeFactor (À»)¸¦ ³ÑÁö ¾Ê´Â´Ù

  3. MaxBufferedDocs*MergeFactor º¸´Ù Å©Áö¸¸ MaxBufferedDocs*MergeFactor*MergeFactor (À»)¸¦ ³ÑÁö ¾Ê´Â´Ù

  4. ...

Zend_Search_Lucene (Àº)´Â,addDocument() (À»)¸¦ ÄÝ ÇÒ ¶§¸¶´Ù ¼¼±×¸ÕÆ®(segment)ÀÇ »óȲÀ» Á¶»çÇØ ¸î°³ÀÇ ¼¼±×¸ÕÆ®(segment)¸¦ Á¤¸®ÇØ ´ÙÀ½ÀÇ ±×·ìÀÇ »õ·Î¿î ¼¼±×¸ÕÆ®(segment)·Î À̵¿ÇÒ ¼ö ÀÖÀ»Áö¸¦ È®ÀÎÇÕ´Ï´Ù. ÇÒ ¼ö ÀÖ´Â °æ¿ì´Â ¸ÓÁö¸¦ ½Ç½ÃÇÕ´Ï´Ù.

Áï,N °³ÀÇ ±×·ìÀ¸·ÎºÎÅÍ µÇ´Â À妽º¿¡´Â MaxBufferedDocs + (N-1)*MergeFactor ÀÇ ¼¼±×¸ÕÆ®(segment)°¡ Æ÷ÇԵǾî Àû¾îµµ MaxBufferedDocs*MergeFactor(N-1) ÀÇ ¹®¼­°¡ Á¸ÀçÇÏ°Ô µË´Ï´Ù.

ÀÌ ½Ä¿¡¼­, À妽º³»ÀÇ ¼¼±×¸ÕÆ®(segment)ÀÇ °³¼ö¸¦ ¿ä±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù.

NumberOfSegments <= MaxBufferedDocs + MergeFactor*log MergeFactor (NumberOfDocuments/MaxBufferedDocs)

MaxBufferedDocs (Àº)´Â, »ç¿ëÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸®·®¿¡ ÀÇÇØ¼­ Á¤ÇØÁý´Ï´Ù. MergeFactor (À»)¸¦ ÀûÀýÈ÷ ¼³Á¤ÇÏ´Â °ÍÀ¸·Î, ¼¼±×¸ÕÆ®(segment)ÀÇ ¼ö¸¦ Á¶Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

¹èġ󸮿¡ ´ëÇØ¼­´Â,MergeFactor ÆÄ¶ó¹ÌÅ͸¦ Á¶Á¤ÇÏ´Â ÆíÀÌ MaxMergeDocs (À»)¸¦ Á¶Á¤ÇÏ´Â °Íº¸´Ùµµ È¿À²ÀûÀÔ´Ï´Ù.±×·¯³ª, ¹ÌÁ¶Á¤Àº ÇÏÁö ¸øÇÏ°í ´ë·«ÀûÀÎ °ÍÀÌ µË´Ï´Ù. °Å±â¼­, ¿ì¼± À§ÀÇ °ø½ÄÀ» ±âÃÊ·Î MergeFactor (À»)¸¦ Á¶Á¤ÇØ, ±×¸®°í MaxMergeDocs (À»)¸¦ ¹ÌÁ¶Á¤ÇØ ÆÛÆ÷¸Õ½º¸¦ ÃÖÀûÈ­ÇսôÙ.

32.10.3. À妽ºÀÇ Á¾·á½Ã ó¸®

Zend_Search_Lucene ¿ÀºêÁ§Æ®´Â, Á¾·á½Ã¿¡ ¾à°£ÀÇ ÀÛ¾÷À» ½Ç½ÃÇÕ´Ï´Ù. À̰ÍÀº, À妽º¿¡ ¹®¼­°¡ Ãß°¡µÇ¾úÁö¸¸ »õ·Î¿î ¼¼±×¸ÕÆ®(segment)¿¡ ½áÁöÁö ¾Ê´Ù°í ÇÏ´Â °æ¿ì¿¡ ÇàÇØÁý´Ï´Ù.

¶Ç, °æ¿ì¿¡ µû¶ó¼­´Â ÀÚµ¿ ÃÖÀûÈ­µµ ½Ç½ÃÇÕ´Ï´Ù.

À妽º ¿ÀºêÁ§Æ®´Â, ÀÚ±â ÀڽŠ¹× QueryHit ¿ÀºêÁ§Æ®°¡ ¸ðµÎ ½ºÄÚÇÁ¿Ü¿¡ ³ª¿Â ½ÃÁ¡¿¡¼­ ÀÚµ¿ÀûÀ¸·Î Á¾·á 󸮸¦ ½Ç½ÃÇÕ´Ï´Ù.

À妽º ¿ÀºêÁ§Æ®°¡ ±Û·Î¹ú º¯¼ö¿¡ °Ý³³µÇ°í ÀÖ´Â °æ¿ì´Â, ½ºÅ©¸³Æ®ÀÇ Á¾·á½Ã¿¡ ÆÄ±âµË´Ï´Ù [19].

PHP ÀÇ ¿¹¿Ü 󸮵µ ¿©±â¼­ Á¾·áÇÕ´Ï´Ù.

À̰ÍÀº Åë»óÀÇ À妽º Á¾·á 󸮸¦ ¹æÇØÇÒ °ÍÀº ¾ø½À´Ï´Ù¸¸, ¹«¾ùÀΰ¡ ¿¡·¯°¡ ¹ß»ýÇßÀ» ¶§¿¡ ¿Ã¹Ù¸¥ ¿¡·¯ Á¤º¸¸¦ ÃëµæÇÒ ¼ö ¾ø°Ô µÉ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.

ÀÌ ¹®Á¦¸¦ ȸÇÇÇÏ´Â ¹æ¹ýÀº µÑ ÀÖ½À´Ï´Ù.

¿ì¼±Àº, °­Á¦ÀûÀ¸·Î ½ºÄÚÇÁ¿Ü¿¡ ³»´Â ¹æ¹ýÀÔ´Ï´Ù.


<?php
$index 
Zend_Search_Lucene::open($indexPath);

...

unset(
$index);

±×¸®°í ¶Ç Çϳª´Â, ½ºÅ©¸³Æ®ÀÇ Á¾·áÀü¿¡ À§Å¹ Á¶ÀÛÀ» ½Ç½ÃÇÏ´Â °ÍÀÔ´Ï´Ù.


<?php
$index 
Zend_Search_Lucene::open($indexPath);

$index->commit();

À̰Ϳ¡ ´ëÇØ¼­´Â, ÀÌ ¹®¼­ÀÇ "ÀÀ¿ë: Á¤Àû ÇÁ·ÓÆÛƼ·Î¼­ÀÇ À妽ºÀÇ »ç¿ë" ±×·¸Áö¸¸ ¼³¸íÇϰí ÀÖ½À´Ï´Ù.

32.10.4. ÀÏÀÇÀÎ ID ¿¡ ÀÇÇÑ ¹®¼­ÀÇ Ãëµæ

¹®¼­ÀÇ ÀÏÀÇÀÎ ID, ¿¹¸¦ µé¾î URL (ÀÌ)³ª ÆÐ½º, µ¥ÀÌŸº£À̽º»óÀÇ ID µîÀ» À妽º¿¡ º¸Á¸ÇØ µÎ¸é ÁÁÀ» °ÍÀÔ´Ï´Ù.

Zend_Search_Lucene ¿¡´Â termDocs() ±×·¸´Ù°í ÇÏ´Â ¸Þ¼Òµå°¡ ÀÖ¾î, ÁöÁ¤ÇÑ ´Ü¾î¸¦ Æ÷ÇÔÇÑ ¹®¼­¸¦ ÃëµæÇÒ ¼ö ÀÖ½À´Ï´Ù.

À̰ÍÀº find() ¸Þ¼Òµåº¸´Ù È¿À²ÀûÀÔ´Ï´Ù.


<?php
// find() ¸Þ¼Òµå·Î Äõ¸® ¹®ÀÚ¿­À» ÁöÁ¤ÇÏ´Â °Í¿¡ ÀÇÇÑ ¹®¼­ÀÇ Ãëµæ
$query $idFieldName ':' $docId;
$hits  $index->find($query);
foreach (
$hits as $hit) {
    
$title    $hit->title;
    
$contents $hit->contents;
    ...
}
...

// find() ¸Þ¼Òµå·Î Äõ¸® API (À»)¸¦ »ç¿ëÇÏ´Â °Í¿¡ ÀÇÇÑ ¹®¼­ÀÇ Ãëµæ
$term = new Zend_Search_Lucene_Index_Term($docIdidFieldName);
$query = new Zend_Search_Lucene_Search_Query_Term($term);
$hits  $index->find($query);
foreach (
$hits as $hit) {
    
$title    $hit->title;
    
$contents $hit->contents;
    ...
}

...

// termDocs() ¸Þ¼Òµå¿¡ ÀÇÇÑ ¹®¼­ÀÇ Ãëµæ
$term = new Zend_Search_Lucene_Index_Term($docIdidFieldName);
$docIds  $index->termDocs($term);
foreach (
$docIds as $id) {
    
$doc $index->getDocument($id);
    
$title    $doc->title;
    
$contents $doc->contents;
    ...
}

32.10.5. ¸Þ¸ð¸®ÀÇ »ç¿ë¹ý

Zend_Search_Lucene (Àº)´Â ¸Þ¸ð¸®¸¦ ¼ÒºñÇÏ´Â ¸ðµâÀÔ´Ï´Ù.

°¢Á¾ÀÇ Á¤º¸¸¦ ij½¬Çϰųª °Ë»öÀ̳ª À妽º ÀÛ¼ºÀÇ ¼Óµµ¸¦ ¿Ã¸®°Å³ª Çϱâ À§Çؼ­, ¸Þ¸ð¸®¸¦ »ç¿ëÇϰí ÀÖ½À´Ï´Ù.

¸Þ¸ð¸®¿¡ °üÇÑ °Åµ¿Àº, ¸ðµå¿¡ µû¶ó¼­ ´Ù¸¨´Ï´Ù.

´Ü¾î »çÀüÀÇ À妽º´Â, °Ë»ö½Ã¿¡ ¸Þ¸ð¸®¿¡ ÀÐÈü´Ï´Ù. À̰ÍÀº, ½ÇÁ¦ÀÇ »çÀü¿¡ µî·ÏµÇ¾î ÀÖ´Â ´Ü¾î°¡ 128°Ç [20] ¿¡ À̸¦ ¶§ ¸¶´Ù ÀÛ¼ºµË´Ï´Ù.

µû¶ó¼­, ´Ü¾îÀÇ ¼ö°¡ Áõ°¡Çϸé Áõ°¡ÇÒ¼ö·Ï ¸Þ¸ð¸®ÀÇ ¼Òºñ·®µµ Áõ°¡ÇÕ´Ï´Ù. ÅäūȭÇÏÁö ¾ÊÀº ÇÁ·¹ÀÌÁ ÇʵåÀÇ °ªÀ¸·Î ÇØ¼­ »ç¿ëÇϰųª ÅØ½ºÆ® ÀÌ¿ÜÀÇ Á¤º¸¸¦ ´ë·®À¸·Î À妽º·Î¼­ »ç¿ëÇϰųª Çϸé, ´Ü¾îÀÇ ¼ö°¡ Áõ°¡ÇÏ°Ô µË´Ï´Ù.

ÃÖÀûÈ­µÇ¾î ÀÖÁö ¾ÊÀº À妽º´Â, º¹¼öÀÇ ¼¼±×¸ÕÆ®(segment)·Î ±¸¼ºµË´Ï´Ù. À̰͵µ, ¸Þ¸ð¸® ¼Òºñ·®ÀÇ Áõ°¡ÀÇ ¿äÀÎÀÌ µË´Ï´Ù. °¢ ¼¼±×¸ÕÆ®(segment)´Â µ¶¸³Çϰí ÀÖÀ¸¹Ç·Î, °¢°¢ µ¶ÀÚÀûÀ¸·Î ´Ü¾î »çÀü°ú »çÀü À妽º¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ÇϳªÀÇ À妽º¾È¿¡ N °³ÀÇ ¼¼±×¸ÕÆ®(segment)°¡ ÀÖ¾ú´Ù°í Çϸé, ¸Þ¸ð¸®ÀÇ ¼Òºñ·®Àº ÃÖ¾ÇÀ¸·Î N ¹è°¡ µÇ¾î ¹ö¸³´Ï´Ù. À妽ºÀÇ ÃÖÀûÈ­¸¦ ÇàÇØ, ¼¼±×¸ÕÆ®(segment)¸¦ Çϳª·Î Á¤¸®ÇսôÙ.

À妽º´Â, °Ë»ö ó¸®¿Í ¹®¼­ÀÇ ¹öÆÛ¸µ¿¡ °°Àº ¸Þ¸ð¸®¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ¸Þ¸ð¸®ÀÇ »ç¿ë·®Àº, ÆÄ¶ó¹ÌÅÍ MaxBufferedDocs ±×¸®°í ÁöÁ¤ÇÕ´Ï´Ù.

À妽ºÀÇ ÃÖÀûÈ­ (¿ÏÀü ÃÖÀûÈ­, ºÎºÐ ÃÖÀûÈ­ÀÇ ¾çÂÊ ¸ðµÎ) (Àº)´Â ½ºÆ®¸²»ó¿¡¼­ ÇàÇØÁö¹Ç·Î, º°·Î ¸Þ¸ð¸®¸¦ ¼ÒºñÇÏÁö ¾Ê½À´Ï´Ù.

32.10.6. ÀÎÄÚµù

Zend_Search_Lucene (Àº)´Â, ³»ºÎ¿¡¼­ UTF-8 ¹®ÀÚ¿­À» »ç¿ëÇϰí ÀÖ½À´Ï´Ù. µû¶ó¼­,Zend_Search_Lucene ÇÏÁö¸¸ µ¹·ÁÁÖ´Â ¹®ÀÚ¿­Àº, ¸ðµÎ UTF-8 ±×¸®°í encode µÇ°í ÀÖ½À´Ï´Ù.

´Ü¼øÇÑ ASCII µ¥ÀÌÅ͸¸À» Ãë±ÞÇÑ´Ù¸é ÀÎÄÚµùÀ» ½Å°æ¾µ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ±×·¯³ª ±× ÀÌ¿ÜÀÇ °æ¿ì´Â ¿äÁÖÀÇÀÔ´Ï´Ù.

À߸øµÈ ÀÎÄÚµùÀ» »ç¿ëÇϸé, ÀÎÄÚµùÀÇ º¯È¯½Ã¿¡ ¿¡·¯°¡ ¹ß»ýÇϰųª µ¥ÀÌÅ͸¦ ÀÒ¾î ¹ö¸®°Å³ª ÇÒ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.

Zend_Search_Lucene (Àº)´Â, ¹®¼­³ª Äõ¸®ÀÇ ÀÎÄÚµùÀ¸·Î¼­ ´Ù¾çÇÑ °Í¿¡ ´ëÀÀÇϰí ÀÖ½À´Ï´Ù.

Çʵ带 ÀÛ¼ºÇÏ´Â ¸Þ¼Òµå·Î, ÀÎÄÚµùÀ» ¿É¼ÇÀÇ ÆÄ¶ó¹ÌÅÍ¿¡ ÀÇÇØ¼­ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.


<?php
$doc 
= new Zend_Search_Lucene_Document();
$doc->addField(Zend_Search_Lucene_Field::Text('title'$title'iso-8859-1'));
$doc->addField(Zend_Search_Lucene_Field::UnStored('contents'$contents'utf-8'));

ÀÎÄÚµùÀÇ ÁöÁ¤À» È®½ÇÈ÷ ÇÑ´Ù°í ÇÏ´Â Àǹ̷Î, À̰ÍÀÌ °¡Àå ÁÁÀº ¹æ¹ýÀÔ´Ï´Ù.

ÀÌ ÀÎÄÚµù ÁöÁ¤À» »ý·« Çϸé, ÇöÀçÀÇ ·ÎÄÉÀÏÀ» ±âÃÊ·Î ÆÇ´ÜÀ» ÇàÇÕ´Ï´Ù. ·ÎÄÉÀÏÀÇ ÁöÁ¤½Ã¿¡, ¾ð¾î »Ó¸¸ÀÌ ¾Æ´Ï¶ó ij¸¯ÅÍ ¼¼Æ®µµ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.


<?php
setlocale
(LC_ALL'fr_FR');
...

setlocale(LC_ALL'de_DE.iso-8859-1');
...

setlocale(LC_ALL'ja_JP.UTF-8');
...

Äõ¸® ¹®ÀÚ¿­ÀÇ ÀÎÄÚµùµµ, °°Àº ¹æ½ÄÀ¸·Î ÁöÁ¤ÇÕ´Ï´Ù.

ÀÎÄÚµùÀ» ¾î¶°ÇÑ ¹æ¹ýÀ¸·Î ÁöÁ¤ÇÏÁö ¾Ê¾Ò´ø °æ¿ì´Â, ÇöÀçÀÇ ·ÎÄÉÀÏ¿¡ ÀǰÅÇÏ°í ÆÇ´ÜÀ» ÇàÇÕ´Ï´Ù.

°Ë»ö Àü¿¡ Äõ¸®ÀÇ ÆÛ½º¸¦ ÇàÇÏ´Â °æ¿ì, ÀÎÄÚµùÀº ¿É¼ÇÀÇ ÆÄ¶ó¹ÌÅͷμ­ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.


<?php
$query 
Zend_Search_Lucene_Search_QueryParser::parse($queryStr'iso-8859-5');
$hits $index->find($query);
...

µðÆúÆ®ÀÇ ÀÎÄÚµùÀ» ÁöÁ¤ÇÏ·Á¸é setDefaultEncoding() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.


<?php
Zend_Search_Lucene_Search_QueryParser
::setDefaultEncoding('iso-8859-1');
$hits $index->find($queryStr);
...

ÇÏ´ÃÀÇ ¹®ÀÚ¿­Àº,'ÇöÀçÀÇ ·ÎÄÉÀÏ' (À»)¸¦ ÀǹÌÇÕ´Ï´Ù.

¿Ã¹Ù¸¥ ÀÎÄÚµùÀ» ÁöÁ¤Çϸé, ÇØ¼®±â´Â ±×°ÍÀ» ¿Ã¹Ù¸£°Ô ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. ½ÇÁ¦ÀÇ °Åµ¿Àº, »ç¿ëÇÏ´Â ÇØ¼®±â¿¡ µû¶ó¼­ ´Ù¸¨´Ï´Ù.ÀÚ¼¼ÇÑ °ÍÀº ij¸¯ÅÍ ¼¼Æ® ¿¡ ´ëÇÑ ¼³¸íÀ» ÂüÁ¶ÇØ ÁֽʽÿÀ.

32.10.7. À妽ºÀÇ º¸¼ö

¿ì¼±Àº Àß¶ó ÇÏ°Ô ÇØ¾ß ÇÒ °ÍÀº,Zend_Search_Lucene (ÀÌ)³ª ±× ¿ÜÀÇ Lucene ½ÇÀåÀº °áÄÚ "µ¥ÀÌŸº£À̽º" (Àº)´Â ¾Æ´Ï¶ó°í ÇÏ´Â °ÍÀÔ´Ï´Ù.

Áï, µ¥ÀÌÅ͸¦ º¸Á¸ÇÏ´Â °ÍÀ¸·Î¼­ »ç¿ë ÇØ¼­´Â ¾ÈµË´Ï´Ù. Åë»óÀÇ µ¥ÀÌŸº£À̽º °ü¸® ½Ã½ºÅÛ°ú °°ÀÌ, ¹é¾÷/restore (ÀÌ)³ª Àú³Î ó¸®, ·Î±×ÀÇ ±â·Ï, Æ®·£Àè¼Ç(transaction)¶ó°í ÇÏ´Â ±â´ÉÀº °¡Áö°í ÀÖÁö ¾Ê½À´Ï´Ù.

±×·¯³ª,Zend_Search_Lucene (Àº)´Â À妽ºÀÇ Àϰü¼ºÀ» º¸°ü À¯ÁöÇϱâ À§ÇÑ ±â´ÉÀº °¡Áö°í ÀÖ½À´Ï´Ù.

À妽ºÀÇ ¹é¾÷/restore´Â, ¿ÀÇÁ ¶óÀÎÀ¸·Î À妽º Æú´õ¸¦ Ä«ÇÇÇÏ´Â °ÍÀ¸·Î ÇàÇÕ´Ï´Ù.

¾î¶°ÇÑ ÀÌÀ¯·Î À妽º°¡ ¸Á°¡Á® ¹ö·ÈÀ» °æ¿ì´Â, À妽º¸¦ restore ÇÒ±î À籸Ãà ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

°Å±â¼­, Å« À妽º´Â, ¾îµð¿£°¡ ¼öµ¿À¸·Î ¹é¾÷ ÇØ µÎ¾î, ¹«¾ùÀΰ¡ ÀÖ¾úÀ» ¶§¿¡ ¼öµ¿À¸·Î º¹¿øÇÒ ¼ö ÀÖµµ·Ï ÇØ µÓ½Ã´Ù. ±×·¯¸é, ÀåÇØ·ÎºÎÅÍÀÇ º¹±¸¿¡ °É¸®´Â ½Ã°£À» ´ÜÃàÇÒ ¼ö ÀÖ½À´Ï´Ù.



[17] memory_get_usage() (ÀÌ)³ª memory_get_peak_usage() ±×¸®°í, ¸Þ¸ð¸®ÀÇ »ç¿ë·®À» È®ÀÎÇÕ´Ï´Ù.

[18] Zend_Search_Lucene (Àº)´Â, ¼¼±×¸ÕÆ®(segment) ÆÄÀÏÀ» Âß ¿ÀÇÂÇÑ Ã¤·Î ÇØ µÓ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ¼­ °Ë»öÀÇ È¿À²À» ¿Ã¸®°í ÀÖ½À´Ï´Ù.

[19] À妽º³ª QueryHit ¿ÀºêÁ§Æ®°¡ º¹ÇÕ µ¥ÀÌÅÍÇüÀ¸·ÎºÎÅÍ ÂüÁ¶µÇ°í ÀÖ´Â °æ¿ì¿¡µµ À̰ÍÀº ÀϾ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ¼øÈ¯ ÂüÁ¶¸¦ Æ÷ÇÔÇÑ ¿ÀºêÁ§Æ®´Â ½ºÅ©¸³Æ®ÀÇ Á¾·á½Ã±îÁö ÆÄ±âµÇÁö ¾Ê½À´Ï´Ù.

[20] Lucene ÀÇ ÆÄÀÏ Æ÷¸Ë¿¡¼­´Â, ÀÌ °Ç¼ö¸¦ º¯°æÇÒ ¼öµµ ÀÖ½À´Ï´Ù.±×·¯³ª Zend_Search_Lucene ÀÇ API ±×·³ ±×°ÍÀ» ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù. ´Ù¸¥ Lucene ½ÇÀåÀ» »ç¿ëÇØ À妽º¸¦ ¼­Æ÷Æ®Çϸé, ÀÌ °ªÀ» º¯°æÇÏ´Â °Íµµ °¡´ÉÇÕ´Ï´Ù.