Zend_Search_Lucene-Overview.xml 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 20872 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.search.lucene.overview">
  5. <title>Resumo</title>
  6. <sect2 id="zend.search.lucene.introduction">
  7. <title>Introdução</title>
  8. <para>
  9. <classname>Zend_Search_Lucene</classname> é um mecanismo para pesquisa de texto, de
  10. propósito geral, escrito totalmente em <acronym>PHP</acronym> 5. Por armazenar os
  11. índices no sistema de arquivos e não fazer uso de servidor de banco de dados, ele pode
  12. efetuar pesquisas em qualquer website rodando <acronym>PHP</acronym>. O
  13. <classname>Zend_Search_Lucene</classname> possui os seguintes recursos:
  14. <itemizedlist>
  15. <listitem>
  16. <para>
  17. Pesquisa agrupada por pontuação (ranked) - os resultados mais prováveis são
  18. retornados primeiro
  19. </para>
  20. </listitem>
  21. <listitem>
  22. <para>
  23. Consultas poderosas de diversos tipos: frase, curingas, booleanas,
  24. aproximação, faixas e muitas outras.
  25. </para>
  26. </listitem>
  27. <listitem>
  28. <para>Busca por campo específico (ex: título, autor, descrição)</para>
  29. </listitem>
  30. </itemizedlist>
  31. <classname>Zend_Search_Lucene</classname> derivou do projeto Apache Lucene. Atualmente
  32. (iniciando do ZF 1.6), as versões suportadas formato de índice Lucene são 1.4 - 2.3.
  33. Para mais informações, visite <ulink url="http://lucene.apache.org/java/docs/"/>.
  34. </para>
  35. <note>
  36. <title/>
  37. <para>
  38. Implementações anteriores de <classname>Zend_Search_Lucene</classname> suportam os
  39. formatos de índice Lucene 1.4 (1.9) - 2.1.
  40. </para>
  41. <para>
  42. A partir do Zend Framework 1.5, qualquer índice criado usando formato de índice
  43. menor que 2.1 é atualizado automaticamente para o formato Lucene 2.1 após a
  44. atualização <classname>Zend_Search_Lucene</classname> e não será compatível com as
  45. implementações do <classname>Zend_Search_Lucene</classname> incluídas no Zend
  46. Framework 1.0.x.
  47. </para>
  48. </note>
  49. </sect2>
  50. <sect2 id="zend.search.lucene.index-creation.documents-and-fields">
  51. <title>Objetos Documento e Campo</title>
  52. <para>
  53. <classname>Zend_Search_Lucene</classname> trabalha sobre os documentos
  54. subdividindo-os em pequenos objetos (atômicos) de indexação. Um documento é
  55. dividido em campos identificados cujo conteúdo é pesquisado.
  56. </para>
  57. <para>
  58. Um documento é representado pela classe
  59. <classname>Zend_Search_Lucene_Document</classname>, e os objetos dessa classe
  60. contêm instâncias de <classname>Zend_Search_Lucene_Field</classname> que
  61. representam os campos no documento.
  62. </para>
  63. <para>
  64. O que é importante ressaltar é que qualquer informação pode ser adicionada a um
  65. índice. Informações específicas de aplicações ou metadados podem ser armazenados em
  66. campos de um documento, e posteriormente recuperados juntamente com o documento
  67. durante uma pesquisa.
  68. </para>
  69. <para>
  70. Controlar o indexador é responsabilidade de sua aplicação. Este recurso garante que
  71. os dados possam ser indexados a partir de qualquer fonte que seja acessível à sua
  72. aplicação. Por exemplo, um sistema de arquivos, um banco de dados, um formulário
  73. HTML, etc.
  74. </para>
  75. <para>
  76. A classe <classname>Zend_Search_Lucene_Field</classname> provê alguns métodos
  77. estáticos para criação de campos com diferentes características:
  78. </para>
  79. <programlisting language="php"><![CDATA[
  80. $doc = new Zend_Search_Lucene_Document();
  81. // O campo não é marcado, mas é indexado e armazenado dentro do índice.
  82. // Campos armazenados podem ser recuperados a partir do índice.
  83. $doc->addField(Zend_Search_Lucene_Field::Keyword('doctype',
  84. 'autogenerated'));
  85. // O campo não é marcado nem indexado, mas é armazenado no índice.
  86. $doc->addField(Zend_Search_Lucene_Field::UnIndexed('created',
  87. time()));
  88. // O campo avaliado como string binária não é marcado nem indexado,
  89. // mas é armazenado no índice.
  90. $doc->addField(Zend_Search_Lucene_Field::Binary('icon',
  91. $iconData));
  92. // O campo é marcado e indexado, e é armazenado no índice.
  93. $doc->addField(Zend_Search_Lucene_Field::Text('annotation',
  94. 'Document annotation text'));
  95. // O campo é marcado e indexado, mas não é armazenado no índice.
  96. $doc->addField(Zend_Search_Lucene_Field::UnStored('contents',
  97. 'My document content'));
  98. ]]></programlisting>
  99. <para>
  100. Cada um desses métodos (excluindo o método
  101. <methodname>Zend_Search_Lucene_Field::Binary()</methodname>) têm um parâmetro
  102. <varname>$encoding</varname> opcional para especificar a entrada dos dados de
  103. codificação.
  104. </para>
  105. <para>
  106. A codificação pode divergir entre documentos diferentes, bem como para campos
  107. diferentes dentro de um mesmo documento:
  108. <programlisting language="php"><![CDATA[
  109. $doc = new Zend_Search_Lucene_Document();
  110. $doc->addField(Zend_Search_Lucene_Field::Text('title',
  111. $title,
  112. 'iso-8859-1'));
  113. $doc->addField(Zend_Search_Lucene_Field::UnStored('contents',
  114. $contents,
  115. 'utf-8'));
  116. ]]></programlisting>
  117. </para>
  118. <para>
  119. Se o parâmetro de codificação é omitido, então a localidade atual é usada em tempo
  120. de processamento. Por exemplo:
  121. <programlisting language="php"><![CDATA[
  122. setlocale(LC_ALL, 'de_DE.iso-8859-1');
  123. ...
  124. $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $contents));
  125. ]]></programlisting>
  126. </para>
  127. <para>
  128. Os campos são sempre armazenados e devolvidos ao índice na codificação UTF-8.
  129. Qualquer conversão necessária para UTF-8 acontece automaticamente.
  130. </para>
  131. <para>
  132. Analisadores de texto (<link linkend="zend.search.lucene.extending.analysis">veja
  133. abaixo</link>) também podem converter texto para algumas outras codificações. Na
  134. verdade, o analisador de padrão converte o texto para a codificação
  135. 'ASCII//TRANSLIT'. Porém, tenha cuidado, esta tradução pode depender da localidade
  136. atual.
  137. </para>
  138. <para>
  139. Nomes de campos são definidos a seu critério no método
  140. <methodname>addField()</methodname>.
  141. </para>
  142. <para>
  143. Java Lucene usa o campo 'contents' como um campo padrão de busca.
  144. <classname>Zend_Search_Lucene</classname> busca por padrão através de todos os
  145. domínios, mas este comportamento é configurável. Consulte o capítulo
  146. <link linkend="zend.search.lucene.query-language.fields">"Campo de pesquisa
  147. padrão"</link> para mais detalhes.
  148. </para>
  149. </sect2>
  150. <sect2 id="zend.search.lucene.index-creation.understanding-field-types">
  151. <title>Entendendo os Tipos de Campos</title>
  152. <itemizedlist>
  153. <listitem>
  154. <para>
  155. Campos do tipo <code>Keyword</code> são armazenados e indexados, o que
  156. significa que eles podem ser pesquisados, bem como apresentados nos resultados
  157. de busca. Eles não podem ser divididos em palavras separadas por marcação.
  158. Campos de dados numerados geralmente os traduzem bem no
  159. <classname>Zend_Search_Lucene</classname>.
  160. </para>
  161. </listitem>
  162. <listitem>
  163. <para>
  164. Campos do tipo <code>UnIndexed</code> não são pesquisáveis, mas são retornados
  165. junto com os resultados das pesquisas. Timestamps de banco de dados, chaves
  166. primárias, caminhos do sistema de arquivos, e outros identificadores externos
  167. são bons candidatos para estes campos.
  168. </para>
  169. </listitem>
  170. <listitem>
  171. <para>
  172. Campos do tipo <code>Binary</code> não são avaliados nem indexados, mas são
  173. armazenados para serem retornados em resultados de pesquisas. Eles podem ser
  174. usados para armazenar qualquer tipo de dado que possa ser codificados em uma
  175. string binária, por exemplo, um ícone.
  176. </para>
  177. </listitem>
  178. <listitem>
  179. <para>
  180. Campos do tipo <code>Text</code> são armazenados, indexados e avaliados. Campos
  181. texto são apropriados para conter informações que devam ser pesquisadas, bem
  182. como retornadas por uma pesquisa, tais como descrições e títulos.
  183. </para>
  184. </listitem>
  185. <listitem>
  186. <para>
  187. Campos do tipo <code>UnStored</code> são avaliados e indexados, mas não são
  188. armazenados no índice. Grandes quantidades de texto são melhor indexadas
  189. utilizando este tipo de campo. Dados armazenados criam um extenso índice no
  190. disco, então se você necessitar pesquisar sem exibir estes dados, utilize um
  191. campo UnStored. Campos UnStored são úteis quando utilizamos um índice
  192. <classname>Zend_Search_Lucene</classname> em combinação com um banco de dados
  193. relacional. Você pode indexar campos contendo dados volumosos usando campos
  194. UnStored para pesquisa, e recuperá-los a partir de um banco de dados relacional
  195. usando campos separados como identificadores.
  196. </para>
  197. <table id="zend.search.lucene.index-creation.understanding-field-types.table">
  198. <title>Tipos de Zend_Search_Lucene_Field</title>
  199. <tgroup cols="5">
  200. <thead>
  201. <row>
  202. <entry>Tipo de Campo</entry>
  203. <entry>Armazenado</entry>
  204. <entry>Indexado</entry>
  205. <entry>Marcado</entry>
  206. <entry>Binário</entry>
  207. </row>
  208. </thead>
  209. <tbody>
  210. <row>
  211. <entry>Keyword</entry>
  212. <entry>Sim</entry>
  213. <entry>Sim</entry>
  214. <entry>Não</entry>
  215. <entry>Não</entry>
  216. </row>
  217. <row>
  218. <entry>UnIndexed</entry>
  219. <entry>Sim</entry>
  220. <entry>Não</entry>
  221. <entry>Não</entry>
  222. <entry>Não</entry>
  223. </row>
  224. <row>
  225. <entry>Binary</entry>
  226. <entry>Sim</entry>
  227. <entry>Não</entry>
  228. <entry>Não</entry>
  229. <entry>Sim</entry>
  230. </row>
  231. <row>
  232. <entry>Text</entry>
  233. <entry>Sim</entry>
  234. <entry>Sim</entry>
  235. <entry>Sim</entry>
  236. <entry>Não</entry>
  237. </row>
  238. <row>
  239. <entry>UnStored</entry>
  240. <entry>Não</entry>
  241. <entry>Sim</entry>
  242. <entry>Sim</entry>
  243. <entry>Não</entry>
  244. </row>
  245. </tbody>
  246. </tgroup>
  247. </table>
  248. </listitem>
  249. </itemizedlist>
  250. </sect2>
  251. <sect2 id="zend.search.lucene.index-creation.html-documents">
  252. <title>Documentos HTML</title>
  253. <para>
  254. <classname>Zend_Search_Lucene</classname> oferece um recurso para análise de HTML.
  255. Os documentos podem ser criados diretamente a partir de um arquivo ou string HTML:
  256. <programlisting language="php"><![CDATA[
  257. $doc = Zend_Search_Lucene_Document_Html::loadHTMLFile($filename);
  258. $index->addDocument($doc);
  259. ...
  260. $doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
  261. $index->addDocument($doc);
  262. ]]></programlisting>
  263. </para>
  264. <para>
  265. A classe <classname>Zend_Search_Lucene_Document_Html</classname> utiliza os métodos
  266. <methodname>DOMDocument::loadHTML()</methodname> e
  267. <methodname>DOMDocument::loadHTMLFile()</methodname> para analisar o código HTML, por
  268. isso não precisa de HTML bem formatado ou de <acronym>XHTML</acronym>. Por outro lado,
  269. é dependente da codificação especificada pela tag de cabeçalho "meta http-equiv".
  270. </para>
  271. <para>
  272. A classe <classname>Zend_Search_Lucene_Document_Html</classname> reconhece o título do
  273. documento, o corpo e as meta tags do cabeçalho.
  274. </para>
  275. <para>
  276. O campo 'title' é na verdade o valor /html/head/title. É armazenado no índice, marcado
  277. e disponibilizado para pesquisa.
  278. </para>
  279. <para>
  280. O campo 'body' é o próprio conteúdo corpo do arquivo ou string HTML. Não inclui os
  281. scripts, comentários ou atributos.
  282. </para>
  283. <para>
  284. Os métodos <methodname>loadHTML()</methodname> e
  285. <methodname>loadHTMLFile()</methodname> da classe
  286. <classname>Zend_Search_Lucene_Document_Html</classname> também possuem um segundo
  287. argumento opcional. Se for definido como <constant>TRUE</constant>, o conteúdo do corpo
  288. é também armazenado no índice e pode ser recuperado a partir do índice. Por padrão, o
  289. corpo é marcado e indexado, mas não armazenado.
  290. </para>
  291. <para>
  292. O terceiro parâmetro dos métodos <methodname>loadHTML()</methodname> e
  293. <methodname>loadHTMLFile()</methodname> especifica opcionalmente a codificação do
  294. código no documento HTML. É utilizado quando a codificação não é especificada usando a
  295. meta tag Content-type HTTP-EQUIV.
  296. </para>
  297. <para>
  298. Outras meta tags do cabeçalho no documento produzem campos de documentos adicionais. O
  299. campo 'name' é tirado do atributo 'name', e o atributo o 'content' preenche o campo
  300. 'value'. Ambos são marcados, indexados e armazenados, então os documentos podem ser
  301. procurados pelas suas meta tags (por exemplo, por palavras-chave).
  302. </para>
  303. <para>
  304. Qualquer outro campo pode ser acrescentado pelo programador em documentos analisados:
  305. <programlisting language="php"><![CDATA[
  306. $doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
  307. $doc->addField(Zend_Search_Lucene_Field::UnIndexed('created',
  308. time()));
  309. $doc->addField(Zend_Search_Lucene_Field::UnIndexed('updated',
  310. time()));
  311. $doc->addField(Zend_Search_Lucene_Field::Text('annotation',
  312. 'Document annotation text'));
  313. $index->addDocument($doc);
  314. ]]></programlisting>
  315. </para>
  316. <para>
  317. Links nos documentos não estão incluídos no documento gerado,
  318. mas podem ser recuperados através dos métodos
  319. <methodname>Zend_Search_Lucene_Document_Html::getLinks()</methodname> e
  320. <methodname>Zend_Search_Lucene_Document_Html::getHeaderLinks()</methodname>:
  321. <programlisting language="php"><![CDATA[
  322. $doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
  323. $linksArray = $doc->getLinks();
  324. $headerLinksArray = $doc->getHeaderLinks();
  325. ]]></programlisting>
  326. </para>
  327. <para>
  328. A partir do Zend Framework 1.6 é possível excluir os links com o atributo
  329. <code>rel</code> definido como <code>'nofollow'</code>. Utilize
  330. <methodname>Zend_Search_Lucene_Document_Html::setExcludeNoFollowLinks($true)</methodname>
  331. para ativar esta opção.
  332. </para>
  333. <para>
  334. O método
  335. <methodname>Zend_Search_Lucene_Document_Html::getExcludeNoFollowLinks()</methodname>
  336. retorna o estado atual do marco "Exclude nofollow links".
  337. </para>
  338. </sect2>
  339. <sect2 id="zend.search.lucene.index-creation.docx-documents">
  340. <title>Documentos do Word 2007</title>
  341. <para>
  342. <classname>Zend_Search_Lucene</classname> oferece um recurso de análise para Word 2007.
  343. Os documentos podem ser criados diretamente de um arquivo do Word 2007:
  344. <programlisting language="php"><![CDATA[
  345. $doc = Zend_Search_Lucene_Document_Docx::loadDocxFile($filename);
  346. $index->addDocument($doc);
  347. ]]></programlisting>
  348. </para>
  349. <para>
  350. A classe <classname>Zend_Search_Lucene_Document_Docx</classname> utiliza a classe
  351. <code>ZipArchive</code> e os métodos <code>simplexml</code> para analisar o documento
  352. de origem. Se a classe <code>ZipArchive</code> (do módulo php_zip) não estiver
  353. disponível, o <classname>Zend_Search_Lucene_Document_Docx</classname> também não estará
  354. disponível para ser usado com o Zend Framework.
  355. </para>
  356. <para>
  357. A classe <classname>Zend_Search_Lucene_Document_Docx</classname> reconhece os metadados
  358. e o texto do documento. Metadados consiste, dependendo do conteúdo do documento, de
  359. nome do arquivo (filename), título (title), assunto (subject), autor (creator),
  360. palavras-chave (keywords), descrição (description), última modificação por
  361. (lastModifiedBy), revisão (revision), data da modificação (modified) e data da criação
  362. (created).
  363. </para>
  364. <para>
  365. O campo 'filename' é o nome do arquivo do Word 2007.
  366. </para>
  367. <para>
  368. O campo 'title' é o título do documento.
  369. </para>
  370. <para>
  371. O campo 'subject' é o assunto do documento.
  372. </para>
  373. <para>
  374. O campo 'creator' é o autor do documento.
  375. </para>
  376. <para>
  377. O campo 'keywords' contém as palavras-chaves do documento.
  378. </para>
  379. <para>
  380. O campo 'description' é a descrição do documento.
  381. </para>
  382. <para>
  383. O campo 'lastModifiedBy' é o nome de quem fez a última modificação no documento.
  384. </para>
  385. <para>
  386. O campo 'revision' é o número da revisão do documento.
  387. </para>
  388. <para>
  389. O campo 'modified' contém a data e hora da última modificação do documento.
  390. </para>
  391. <para>
  392. O campo 'created' contém a data e hora da criação do documento.
  393. </para>
  394. <para>
  395. O campo 'body' é o próprio conteúdo do documento do Word 2007. Ele inclui apenas texto
  396. normal, comentários e revisões não estão incluídos.
  397. </para>
  398. <para>
  399. O método <methodname>loadDocxFile()</methodname> da classe
  400. <classname>Zend_Search_Lucene_Document_Docx</classname> também possui um segundo
  401. argumento opcional. Se for definido como <constant>TRUE</constant>, o conteúdo do corpo
  402. é também armazenado no índice e pode ser recuperado a partir do índice. Por padrão, o
  403. corpo é marcado e indexado, mas não armazenado.
  404. </para>
  405. <para>
  406. Qualquer outro campo pode ser acrescentado pelo programador em documentos analisados:
  407. <programlisting language="php"><![CDATA[
  408. $doc = Zend_Search_Lucene_Document_Docx::loadDocxFile($filename);
  409. $doc->addField(Zend_Search_Lucene_Field::UnIndexed(
  410. 'indexTime',
  411. time())
  412. );
  413. $doc->addField(Zend_Search_Lucene_Field::Text(
  414. 'annotation',
  415. 'Document annotation text')
  416. );
  417. $index->addDocument($doc);
  418. ]]></programlisting>
  419. </para>
  420. </sect2>
  421. <sect2 id="zend.search.lucene.index-creation.pptx-documents">
  422. <title>Documentos do Powerpoint 2007</title>
  423. <para>
  424. <classname>Zend_Search_Lucene</classname> oferece um recurso de análise para Powerpoint
  425. 2007. Os documentos podem ser criados diretamente de um arquivo do Powerpoint 2007:
  426. <programlisting language="php"><![CDATA[
  427. $doc = Zend_Search_Lucene_Document_Pptx::loadPptxFile($filename);
  428. $index->addDocument($doc);
  429. ]]></programlisting>
  430. </para>
  431. <para>
  432. A classe <classname>Zend_Search_Lucene_Document_Pptx</classname> utiliza a classe
  433. <code>ZipArchive</code> e os métodos <code>simplexml</code> para analisar o documento
  434. de origem. Se a classe <code>ZipArchive</code> (do módulo php_zip) não estiver
  435. disponível, o <classname>Zend_Search_Lucene_Document_Pptx</classname> também não estará
  436. disponível para ser usado com o Zend Framework.
  437. </para>
  438. <para>
  439. A classe <classname>Zend_Search_Lucene_Document_Pptx</classname> reconhece os metadados
  440. e o texto do documento. Metadados consiste, dependendo do conteúdo do documento, de
  441. nome do arquivo (filename), título (title), assunto (subject), autor (creator),
  442. palavras-chave (keywords), descrição (description), última modificação por
  443. (lastModifiedBy), revisão (revision), data da modificação (modified) e data da criação
  444. (created).
  445. </para>
  446. <para>
  447. O campo 'filename' é o nome do arquivo do Powerpoint 2007.
  448. </para>
  449. <para>
  450. O campo 'title' é o título do documento.
  451. </para>
  452. <para>
  453. O campo 'subject' é o assunto do documento.
  454. </para>
  455. <para>
  456. O campo 'creator' é o autor do documento.
  457. </para>
  458. <para>
  459. O campo 'keywords' contém as palavras-chaves do documento.
  460. </para>
  461. <para>
  462. O campo 'description' é a descrição do documento.
  463. </para>
  464. <para>
  465. O campo 'lastModifiedBy' é o nome de quem fez a última modificação no documento.
  466. </para>
  467. <para>
  468. O campo 'revision' é o número da revisão do documento.
  469. </para>
  470. <para>
  471. O campo 'modified' contém a data e hora da última modificação do documento.
  472. </para>
  473. <para>
  474. O campo 'created' contém a data e hora da criação do documento.
  475. </para>
  476. <para>
  477. O campo 'body' é o conteúdo de todos os slides e notas de slide no documento do
  478. Powerpoint 2007.
  479. </para>
  480. <para>
  481. O método <methodname>loadPptxFile()</methodname> da classe
  482. <classname>Zend_Search_Lucene_Document_Pptx</classname> também possui um segundo
  483. argumento opcional. Se for definido como <constant>TRUE</constant>, o conteúdo do corpo
  484. é também armazenado no índice e pode ser recuperado a partir do índice. Por padrão, o
  485. corpo é marcado e indexado, mas não armazenado.
  486. </para>
  487. <para>
  488. Qualquer outro campo pode ser acrescentado pelo programador em documentos analisados:
  489. <programlisting language="php"><![CDATA[
  490. $doc = Zend_Search_Lucene_Document_Pptx::loadPptxFile($filename);
  491. $doc->addField(Zend_Search_Lucene_Field::UnIndexed(
  492. 'indexTime',
  493. time()));
  494. $doc->addField(Zend_Search_Lucene_Field::Text(
  495. 'annotation',
  496. 'Document annotation text'));
  497. $index->addDocument($doc);
  498. ]]></programlisting>
  499. </para>
  500. </sect2>
  501. <sect2 id="zend.search.lucene.index-creation.xlsx-documents">
  502. <title>Documentos do Excel 2007</title>
  503. <para>
  504. <classname>Zend_Search_Lucene</classname> oferece um recurso de análise para Excel 2007.
  505. Os documentos podem ser criados diretamente de um arquivo do Excel 2007:
  506. <programlisting language="php"><![CDATA[
  507. $doc = Zend_Search_Lucene_Document_Xlsx::loadXlsxFile($filename);
  508. $index->addDocument($doc);
  509. ]]></programlisting>
  510. </para>
  511. <para>
  512. A classe <classname>Zend_Search_Lucene_Document_Xlsx</classname> utiliza a classe
  513. <code>ZipArchive</code> e os métodos <code>simplexml</code> para analisar o documento
  514. de origem. Se a classe <code>ZipArchive</code> (do módulo php_zip) não estiver
  515. disponível, o <classname>Zend_Search_Lucene_Document_Xlsx</classname> também não estará
  516. disponível para ser usado com o Zend Framework.
  517. </para>
  518. <para>
  519. A classe <classname>Zend_Search_Lucene_Document_Xlsx</classname> reconhece os metadados
  520. e o texto do documento. Metadados consiste, dependendo do conteúdo do documento, de
  521. nome do arquivo (filename), título (title), assunto (subject), autor (creator),
  522. palavras-chave (keywords), descrição (description), última modificação por
  523. (lastModifiedBy), revisão (revision), data da modificação (modified) e data da criação
  524. (created).
  525. </para>
  526. <para>
  527. O campo 'filename' é o nome do arquivo do Excel 2007.
  528. </para>
  529. <para>
  530. O campo 'title' é o título do documento.
  531. </para>
  532. <para>
  533. O campo 'subject' é o assunto do documento.
  534. </para>
  535. <para>
  536. O campo 'creator' é o autor do documento.
  537. </para>
  538. <para>
  539. O campo 'keywords' contém as palavras-chaves do documento.
  540. </para>
  541. <para>
  542. O campo 'description' é a descrição do documento.
  543. </para>
  544. <para>
  545. O campo 'lastModifiedBy' é o nome de quem fez a última modificação no documento.
  546. </para>
  547. <para>
  548. O campo 'revision' é o número da revisão do documento.
  549. </para>
  550. <para>
  551. O campo 'modified' contém a data e hora da última modificação do documento.
  552. </para>
  553. <para>
  554. O campo 'created' contém a data e hora da criação do documento.
  555. </para>
  556. <para>
  557. O campo 'body' é o conteúdo de todas as células em todas as planilhas do documento do
  558. Excel 2007.
  559. </para>
  560. <para>
  561. O método <methodname>loadXlsxFile()</methodname> da classe
  562. <classname>Zend_Search_Lucene_Document_Xlsx</classname> também possui um segundo
  563. argumento opcional. Se for definido como <constant>TRUE</constant>, o conteúdo do corpo
  564. é também armazenado no índice e pode ser recuperado a partir do índice. Por padrão, o
  565. corpo é marcado e indexado, mas não armazenado.
  566. </para>
  567. <para>
  568. Qualquer outro campo pode ser acrescentado pelo programador em documentos analisados:
  569. <programlisting language="php"><![CDATA[
  570. $doc = Zend_Search_Lucene_Document_Xlsx::loadXlsxFile($filename);
  571. $doc->addField(Zend_Search_Lucene_Field::UnIndexed(
  572. 'indexTime',
  573. time()));
  574. $doc->addField(Zend_Search_Lucene_Field::Text(
  575. 'annotation',
  576. 'Document annotation text'));
  577. $index->addDocument($doc);
  578. ]]></programlisting>
  579. </para>
  580. </sect2>
  581. </sect1>