Zend_Search_Lucene-Overview.xml 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.search.lucene.overview">
  5. <title>Überblick</title>
  6. <sect2 id="zend.search.lucene.introduction">
  7. <title>Einführung</title>
  8. <para>
  9. <classname>Zend_Search_Lucene</classname> ist eine komplett in <acronym>PHP</acronym> 5
  10. geschriebene Textsuchmaschine für viele Zwecke. Da es seinen Index im Dateisystem ablegt
  11. und keinen Datenbankserver erfordert, kann es eine Suchfunktion für nahezu jede auf
  12. <acronym>PHP</acronym> basierende Website bereitstellen.
  13. <classname>Zend_Search_Lucene</classname> unterstützt die folgenden Funktionalitäten:
  14. <itemizedlist>
  15. <listitem>
  16. <para>
  17. Klassifizierte Suche - die besten Ergebnisse werden zuerst zurückgegeben
  18. </para>
  19. </listitem>
  20. <listitem>
  21. <para>
  22. Viele mächtige Abfragearten: Phrasensuche, Platzhaltersuche, Boolsche Suche,
  23. Näherungssuche, Bereichssuche und viele andere.
  24. </para>
  25. </listitem>
  26. <listitem>
  27. <para>
  28. Suche anhand eines bestimmten Feldes (z.B. Titel, Autor, Inhalt)
  29. </para>
  30. </listitem>
  31. </itemizedlist>
  32. <classname>Zend_Search_Lucene</classname> wurde abgeleitet vom Apache Lucene Projekt.
  33. Die aktuell unterstützten Versionen des Lucene Indexformats (beginnend mit Zend
  34. Framework 1.6) sind 1.4 - 2.3. Für weitere Informationen über Lucene, besuchen Sie
  35. <ulink url="http://lucene.apache.org/java/docs/"/>.
  36. </para>
  37. <note>
  38. <title/>
  39. <para>
  40. Frühere <classname>Zend_Search_Lucene</classname> Implementationen unterstützen das
  41. Lucene Indexformat 1.4 (1.9) - 2.1.
  42. </para>
  43. <para>
  44. Beginnend mit Zend Framework 1.5 werden, nach dem
  45. <classname>Zend_Search_Lucene</classname> Update, alle Indezes die mit einem pre-2.1
  46. Indexformat erstellt wurden automatisch in das Lucene 2.1 Format upgegraded und ist
  47. daher mit vorherigen <classname>Zend_Search_Lucene</classname> Versionen nicht mehr
  48. kompatibel die in Zend Framework 1.0.x enthalten sind.
  49. </para>
  50. </note>
  51. </sect2>
  52. <sect2 id="zend.search.lucene.index-creation.documents-and-fields">
  53. <title>Dokumenten- und Feldobjekte</title>
  54. <para>
  55. Für die Indizierung verarbeitet <classname>Zend_Search_Lucene</classname> Dokumente
  56. als atomare Objekte. Ein Dokument wird in benannte Felder unterteilt und diese
  57. Felder enthalten Inhalte, die durchsucht werden können.
  58. </para>
  59. <para>
  60. Ein Dokument wird durch die <classname>Zend_Search_Lucene_Document</classname>
  61. Klasse abgebildet und die Objekte dieser Klasse enthalten Instanzen von
  62. <classname>Zend_Search_Lucene_Field</classname>, welche die Felder dieses Objektes
  63. repräsentieren.
  64. </para>
  65. <para>
  66. Es ist wichtig zu beachten, dass dem Index jegliche Informationen hinzugefügt werden
  67. können. Anwendungsspezifische Informationen oder Metadaten können in den
  68. Dokumentfeldern gespeichert und später bei der Suche aus dem Dokument zurückgeholt
  69. werden.
  70. </para>
  71. <para>
  72. Es liegt in der Verantwortung deiner Anwendung, den Indexer zu kontrollieren. Das
  73. bedeutet, dass die Daten aus jeder Quelle indiziert werden können, die von deiner
  74. Anwendung aus ansprechbar ist. Zum Beispiel könnten dies das Dateisystem, eine
  75. Datenbank, ein <acronym>HTML</acronym> Formular, usw. sein.
  76. </para>
  77. <para>
  78. Die <classname>Zend_Search_Lucene_Field</classname> Klasse stellt verschiedene
  79. statische Methoden zum Erstellen mit unterschiedlichen Charakteristika bereit:
  80. </para>
  81. <programlisting language="php"><![CDATA[
  82. $doc = new Zend_Search_Lucene_Document();
  83. // Feld wird nicht in Token aufgeteilt, aber indiziert und im Index
  84. // gespeichert. Die gespeichertern Felder können aus dem Index abgerufen werden
  85. $doc->addField(Zend_Search_Lucene_Field::Keyword('doctype',
  86. 'autogenerated'));
  87. // Feld wird weder in Token aufgeteilt noch indiziert, aber im Index gespeichert
  88. $doc->addField(Zend_Search_Lucene_Field::UnIndexed('created',
  89. time()));
  90. // Feld mit einer binären Zeichenkette, die weder in Token aufgeteilt
  91. // noch indiziert, aber im Index gespeichert wird
  92. $doc->addField(Zend_Search_Lucene_Field::Binary('icon',
  93. $iconData));
  94. // Feld wird in Token aufgeteilt und indiziert und im Index gespeichert
  95. $doc->addField(Zend_Search_Lucene_Field::Text('annotation',
  96. 'Document annotation text'));
  97. // Feld wird in Token aufgeteilt und indiziert, aber nicht im Index gespeichert
  98. $doc->addField(Zend_Search_Lucene_Field::UnStored('contents',
  99. 'My document content'));
  100. ]]></programlisting>
  101. <para>
  102. Jede dieser Methoden (ausser der
  103. <methodname>Zend_Search_Lucene_Field::Binary()</methodname> Methode) hat einen
  104. optionalen <varname>$encoding</varname> Parameter. Er definiert das Encoding für
  105. Eingabedaten.
  106. </para>
  107. <para>
  108. Die Codierung kann für unterschiedliche Dokumente verschieden sein genauso wie für
  109. unterschiedliche Felder innerhalb eines Dokuments:
  110. </para>
  111. <programlisting language="php"><![CDATA[
  112. $doc = new Zend_Search_Lucene_Document();
  113. $doc->addField(Zend_Search_Lucene_Field::Text('title',
  114. $title,
  115. 'iso-8859-1'));
  116. $doc->addField(Zend_Search_Lucene_Field::UnStored('contents',
  117. $contents,
  118. 'utf-8'));
  119. ]]></programlisting>
  120. <para>
  121. Wenn der encoding Parameter nicht angegeben wurde, wird das aktuelle Gebietsschema
  122. während der Verarbeitungzeit verwendet. Zum Beispiel:
  123. </para>
  124. <programlisting language="php"><![CDATA[
  125. setlocale(LC_ALL, 'de_DE.iso-8859-1');
  126. ...
  127. $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $contents));
  128. ]]></programlisting>
  129. <para>
  130. Felder werden immer gespeichert und vom Index in UTF-8 Codierung zurückgegeben. Jede
  131. notwendige Konvertierung zu UTF-8 geschieht automatisch.
  132. </para>
  133. <para>
  134. Text Analysatoren (<link linkend="zend.search.lucene.extending.analysis">siehe
  135. unten</link>) können auch Text in andere Codierungen konvertieren. Aktuell
  136. konvertiert der Standard Analysator Text in die 'ASCII//TRANSLIT' Codierung. Man
  137. sollte aber vorsichtig sein; diese Übersetzung hängt vom aktuellen Gebietsschema ab.
  138. </para>
  139. <para>
  140. Feld Namen werden durch die Auswahl in der <methodname>addField()</methodname>
  141. Methode definiert.
  142. </para>
  143. <para>
  144. Java Lucene verwendet das "contents" Feld für die Suche als Standardfeld.
  145. <classname>Zend_Search_Lucene</classname> durchsucht standardmäßig alle Felder,
  146. aber dieses Verhalten ist konfigurierbar. Für Details siehe das Kapitel
  147. <link linkend="zend.search.lucene.query-language.fields">"Standardsuchfeld"</link>.
  148. </para>
  149. </sect2>
  150. <sect2 id="zend.search.lucene.index-creation.understanding-field-types">
  151. <title>Verstehen der Feldtypen</title>
  152. <itemizedlist>
  153. <listitem>
  154. <para>
  155. <code>Keyword</code> (Stichwort) Felder werden gespeichert und indiziert, was
  156. bedeutet, dass sie sowohl durchsucht als auch in Suchergebnissen angezeigt
  157. werden können. Sie werden nicht in einzelne Worte (Tokens) zerteilt.
  158. Datenbankfelder für Aufzählungen lassen sich normalerweise leicht in Keyword
  159. Felder für <classname>Zend_Search_Lucene</classname> überführen.
  160. </para>
  161. </listitem>
  162. <listitem>
  163. <para>
  164. <code>UnIndexed</code> (unindizierte) Felder sind nicht durchsuchbar, werden
  165. aber bei Suchtreffern zurückgegeben. Datenbank Zeitstempel, Primärschlüssel,
  166. Pfade des Dateisystems und andere externe Identifikatoren sind gute Kandidaten
  167. für UnIndexed Felder.
  168. </para>
  169. </listitem>
  170. <listitem>
  171. <para>
  172. <code>Binary</code> (binäre) Felder werden nicht in Token aufgeteilt und
  173. indiziert, aber für die Rückgabe bei Suchtreffern gespeichert. Sie können für
  174. die Speicherung aller Daten, die als binäre Zeichenkette kodiert sind,
  175. verwendet werden, wie z.B. eine Grafiksymbol.
  176. </para>
  177. </listitem>
  178. <listitem>
  179. <para>
  180. <code>Text</code> Felder werden gespeichert, indiziert und in Token aufgeteilt.
  181. Text Felder sind geeignet für die Speicherung von Informationen wie Themen und
  182. Überschriften, die sowohl durchsuchbar sein müssen, als auch in Suchergebnissen
  183. zurückgegeben werden müssen.
  184. </para>
  185. </listitem>
  186. <listitem>
  187. <para>
  188. <code>UnStored</code> (nicht gespeicherte) Felder werden in Token aufgeteilt und
  189. indiziert, aber nicht im Index gespeichert. Umfangreiche Texte werden am besten
  190. durch diesen Feldtyp indiziert. Gespeicherte Daten benötigen einen größeren
  191. Index auf der Festplatte, wenn du also Daten nur durchsuchbar aber nicht wieder
  192. ausgegeben haben musst, verwende ein UnStored Feld. UnStored Felder sind
  193. geeignet, wenn ein <classname>Zend_Search_Lucene</classname> Index in
  194. Kombination mit einer relationalen Datenbank verwendet wird. Du kannst große
  195. Datenfelder mit UnStored Feldern für die Suche indizieren und sie aus der
  196. relationalen Datenbank durch die Verwendung eines separaten Feldes mithilfe
  197. eines Identifikators zurückholen.
  198. </para>
  199. <table id="zend.search.lucene.index-creation.understanding-field-types.table">
  200. <title>Zend_Search_Lucene_Field Typen</title>
  201. <tgroup cols="5">
  202. <thead>
  203. <row>
  204. <entry>Feldtyp</entry>
  205. <entry>Gespeichert</entry>
  206. <entry>Indiziert</entry>
  207. <entry>In Token aufgeteilt</entry>
  208. <entry>Binär</entry>
  209. </row>
  210. </thead>
  211. <tbody>
  212. <row>
  213. <entry>Keyword</entry>
  214. <entry>Ja</entry>
  215. <entry>Ja</entry>
  216. <entry>Nein</entry>
  217. <entry>Nein</entry>
  218. </row>
  219. <row>
  220. <entry>UnIndexed</entry>
  221. <entry>Ja</entry>
  222. <entry>Nein</entry>
  223. <entry>Nein</entry>
  224. <entry>Nein</entry>
  225. </row>
  226. <row>
  227. <entry>Binary</entry>
  228. <entry>Ja</entry>
  229. <entry>Nein</entry>
  230. <entry>Nein</entry>
  231. <entry>Ja</entry>
  232. </row>
  233. <row>
  234. <entry>Text</entry>
  235. <entry>Ja</entry>
  236. <entry>Ja</entry>
  237. <entry>Ja</entry>
  238. <entry>Nein</entry>
  239. </row>
  240. <row>
  241. <entry>UnStored</entry>
  242. <entry>Nein</entry>
  243. <entry>Ja</entry>
  244. <entry>Ja</entry>
  245. <entry>Nein</entry>
  246. </row>
  247. </tbody>
  248. </tgroup>
  249. </table>
  250. </listitem>
  251. </itemizedlist>
  252. </sect2>
  253. <sect2 id="zend.search.lucene.index-creation.html-documents">
  254. <title>HTML Dokumente</title>
  255. <para>
  256. <classname>Zend_Search_Lucene</classname> bietet ein <acronym>HTML</acronym> Parsing
  257. Feature. Dokumente können direkt von einer <acronym>HTML</acronym> Datei oder String
  258. erzeugt werden:
  259. </para>
  260. <programlisting language="php"><![CDATA[
  261. $doc = Zend_Search_Lucene_Document_Html::loadHTMLFile($filename);
  262. $index->addDocument($doc);
  263. ...
  264. $doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
  265. $index->addDocument($doc);
  266. ]]></programlisting>
  267. <para>
  268. Die <classname>Zend_Search_Lucene_Document_Html</classname> Klasse verwendet die
  269. <methodname>DOMDocument::loadHTML()</methodname> und die
  270. <methodname>DOMDocument::loadHTMLFile()</methodname> Methode um die
  271. <acronym>HTML</acronym> Quelle zu analysieren, deswegen benötigt Sie kein gut
  272. geformtes <acronym>HTML</acronym> noch ein <acronym>XHTML</acronym>. Auf der anderen
  273. Seite ist es abhängig von der angegebenen Codierung im "meta http-equiv" Tag Header.
  274. </para>
  275. <para>
  276. Die <classname>Zend_Search_Lucene_Document_Html</classname> Klasse erkennt Dokument
  277. Titel, Body Dokument Header Meta Tags.
  278. </para>
  279. <para>
  280. Das 'title' Feld ist aktuell der /html/head/title Wert. Er wird inneralb des Index
  281. gespeichert, Tokenized und für die Suche zur Verfügung gestellt.
  282. </para>
  283. <para>
  284. Das 'body' Feld ist aktuell der Inhalt vom Body der <acronym>HTML</acronym> Datei oder
  285. des Strings. Er enthält keine Skripte, Kommentare oder Attribute.
  286. </para>
  287. <para>
  288. Die <methodname>loadHTML()</methodname> und <methodname>loadHTMLFile()</methodname>
  289. Methoden der <classname>Zend_Search_Lucene_Document_Html</classname> Klasse haben auch
  290. ein zweites optionales Argument. Wenn es auf <constant>TRUE</constant> gesetzt wird,
  291. wird der Inhalt vom Body auch innerhalb des Index gespeichert und kann vom Index
  292. empfangen werden. Standardmäßig wird der Body nur Tokenized und Indiziert, aber nicht
  293. gespeichert.
  294. </para>
  295. <para>
  296. Der dritte Parameter der <methodname>loadHTML()</methodname> und
  297. <methodname>loadHTMLFile()</methodname> Methoden spezifiziert optional die Kodierung des
  298. Quell- <acronym>HTML</acronym> Dokuments. Er wird verwendet wenn die Kodierung nicht
  299. durch die Angabe des Content-type MetaTags HTTP-EQUIV spezifiziert ist.
  300. </para>
  301. <para>
  302. Andere Dokument Header Meta Tags produzieren zusätzliche Dokument Felder. Der Feld
  303. 'name' wird vom 'name' Attribut genommen, und das 'content' Attribut veröffentlicht das
  304. Feld 'value'. Beide werden geteilt, indiziert und gespeichert damit damit Dokumente mit
  305. Hilfe Ihrer Meta Tags durchsucht werden können (zum Beispiel durch Schlüsselwörter).
  306. </para>
  307. <para>
  308. Analysierte Dokumente können durch den Programmierer mit jedem anderen Feld ausgegeben
  309. werden:
  310. </para>
  311. <programlisting language="php"><![CDATA[
  312. $doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
  313. $doc->addField(Zend_Search_Lucene_Field::UnIndexed('created',
  314. time()));
  315. $doc->addField(Zend_Search_Lucene_Field::UnIndexed('updated',
  316. time()));
  317. $doc->addField(Zend_Search_Lucene_Field::Text('annotation',
  318. 'Document annotation text'));
  319. $index->addDocument($doc);
  320. ]]></programlisting>
  321. <para>
  322. Dokument-Links sind im erstellten Dokument nicht enthalten, können aber mit den
  323. <methodname>Zend_Search_Lucene_Document_Html::getLinks()</methodname> und
  324. <methodname>Zend_Search_Lucene_Document_Html::getHeaderLinks()</methodname> Methoden
  325. empfangen werden:
  326. </para>
  327. <programlisting language="php"><![CDATA[
  328. $doc = Zend_Search_Lucene_Document_Html::loadHTML($htmlString);
  329. $linksArray = $doc->getLinks();
  330. $headerLinksArray = $doc->getHeaderLinks();
  331. ]]></programlisting>
  332. <para>
  333. Beginnend mit Zend Framework 1.6 ist es auch möglich Links mit dem <code>rel</code>
  334. Attribut auszunehmen wenn es auf <code>'nofollow'</code> gesetzt wird. Man kann
  335. <methodname>Zend_Search_Lucene_Document_Html::setExcludeNoFollowLinks($true)</methodname>
  336. verwenden um diese Option einzuschalten.
  337. </para>
  338. <para>
  339. Die <methodname>Zend_Search_Lucene_Document_Html::getExcludeNoFollowLinks()</methodname>
  340. Methode gibt den aktuellen Status des "Exclude nofollow links" Flags zurück.
  341. </para>
  342. </sect2>
  343. <sect2 id="zend.search.lucene.index-creation.docx-documents">
  344. <title>Word 2007 Dokumente</title>
  345. <para>
  346. <classname>Zend_Search_Lucene</classname> bietet ein Word 2007 Parsing Feature.
  347. Dokumente können direkt aus einer Word 2007 Datei heraus erstellt werden:
  348. </para>
  349. <programlisting language="php"><![CDATA[
  350. $doc = Zend_Search_Lucene_Document_Docx::loadDocxFile($filename);
  351. $index->addDocument($doc);
  352. ]]></programlisting>
  353. <para>
  354. Die <classname>Zend_Search_Lucene_Document_Docx</classname> Klasse verwendet die
  355. <code>ZipArchive</code> Klasse und <code>simplexml</code> Methoden um das Quelldokument
  356. zu parsen. Wenn die <code>ZipArchive</code> Klasse (vom Modul php_zip) nicht vorhanden
  357. ist, wird <classname>Zend_Search_Lucene_Document_Docx</classname> auch nicht für die
  358. Verwendung mit dem Zend Framework zur Verfügung stehen.
  359. </para>
  360. <para>
  361. Die <classname>Zend_Search_Lucene_Document_Docx</classname> Klasse erkennt die Metadaten
  362. und den Text des Dokuments. Metadaten bestehen, abhängig vom Inhalt des Dokuments, aus
  363. Dateinamen, Titel, Untertitel, Ersteller, Schlüsselwörter, Beschreibung, zuletzt
  364. geändert von, Version, Geändert und Erstellt.
  365. </para>
  366. <para>
  367. Das Feld 'filename' ist der aktuelle Word 2007 Dateiname.
  368. </para>
  369. <para>
  370. Das Feld 'title' ist der aktuelle Titel des Dokuments.
  371. </para>
  372. <para>
  373. Das Feld 'subject' ist der aktuelle Untertitel des Dokuments.
  374. </para>
  375. <para>
  376. Das Feld 'creator' ist der Ersteller des aktuellen Dokuments.
  377. </para>
  378. <para>
  379. Das Feld 'keywords' enthält die Schlüsselwörter des aktuellen Dokuments.
  380. </para>
  381. <para>
  382. Das Feld 'description' ist die Beschreibung des aktuellen Dokuments.
  383. </para>
  384. <para>
  385. Das Feld 'lastModifiedBy' ist der Benutzername der Person die das aktuelle Dokument
  386. als letztes geändert hat.
  387. </para>
  388. <para>
  389. Das Feld 'revision' ist die Versionsnummer des aktuellen Dokuments.
  390. </para>
  391. <para>
  392. Das Feld 'modified' ist das Datum / die Uhrzeit der letzten Änderung des
  393. aktuellen Dokuments.
  394. </para>
  395. <para>
  396. Das Feld 'created' ist das Datum / die Uhrzeit der Erstellung des aktuellen
  397. Dokuments.
  398. </para>
  399. <para>
  400. Das Feld 'body' ist der aktuelle Inhalt des Word 2007 Dokuments. Es enthält nur
  401. normalen Text, Kommentare und Versionen sind nicht enthalten.
  402. </para>
  403. <para>
  404. Die Methode <methodname>loadDocxFile()</methodname> der
  405. <classname>Zend_Search_Lucene_Document_Docx</classname> Klasse hat auch ein zweites
  406. optionales Argument. Wenn es auf <constant>TRUE</constant> gesetzt wird, wird der Inhalt
  407. auch mit einem Index gespeichert und kann vom Index empfangen werden. Standardmäßig wird
  408. der Inhalt gesplittet und indiziert, aber nicht gespeichert.
  409. </para>
  410. <para>
  411. Eingelesene Dokumente können vom Programierer mit jedem anderen Feld argumentiert
  412. werden:
  413. </para>
  414. <programlisting language="php"><![CDATA[
  415. $doc = Zend_Search_Lucene_Document_Docx::loadDocxFile($filename);
  416. $doc->addField(Zend_Search_Lucene_Field::UnIndexed(
  417. 'indexTime',
  418. time())
  419. );
  420. $doc->addField(Zend_Search_Lucene_Field::Text(
  421. 'annotation',
  422. 'Anmerkungstext des Dokuments')
  423. );
  424. $index->addDocument($doc);
  425. ]]></programlisting>
  426. </sect2>
  427. <sect2 id="zend.search.lucene.index-creation.pptx-documents">
  428. <title>Powerpoint 2007 Dokumente</title>
  429. <para>
  430. <classname>Zend_Search_Lucene</classname> bietet ein Parsing Feature für Powerpoint
  431. 2007. Dokumente können direkt auf einer Powerpoint 2007 Datei heraus erstellt werden:
  432. </para>
  433. <programlisting language="php"><![CDATA[
  434. $doc = Zend_Search_Lucene_Document_Pptx::loadPptxFile($filename);
  435. $index->addDocument($doc);
  436. ]]></programlisting>
  437. <para>
  438. Die <classname>Zend_Search_Lucene_Document_Pptx</classname> Klasse verwendet die
  439. <code>ZipArchive</code> Klasse und <code>simplexml</code> Methoden um das Quelldokument
  440. zu parsen. Wenn die <code>ZipArchive</code> Klasse (vom Modul php_zip) nicht vorhanden
  441. ist, wird <classname>Zend_Search_Lucene_Document_Docx</classname> auch nicht für die
  442. Verwendung mit dem Zend Framework zur Verfügung stehen.
  443. </para>
  444. <para>
  445. Die <classname>Zend_Search_Lucene_Document_Docx</classname> Klasse erkennt die Metadaten
  446. und den Text des Dokuments. Metadaten bestehen, abhängig vom Inhalt des Dokuments, aus
  447. Dateinamen, Titel, Untertitel, Ersteller, Schlüsselwörter, Beschreibung, zuletzt
  448. geändert von, Version, Geändert und Erstellt.
  449. </para>
  450. <para>
  451. Das Feld 'filename' ist der aktuelle Powerpoint 2007 Dateiname.
  452. </para>
  453. <para>
  454. Das Feld 'title' ist der aktuelle Titel des Dokuments.
  455. </para>
  456. <para>
  457. Das Feld 'subject' ist der aktuelle Untertitel des Dokuments.
  458. </para>
  459. <para>
  460. Das Feld 'creator' ist der Ersteller des aktuellen Dokuments.
  461. </para>
  462. <para>
  463. Das Feld 'keywords' enthält die Schlüsselwörter des aktuellen Dokuments.
  464. </para>
  465. <para>
  466. Das Feld 'description' ist die Beschreibung des aktuellen Dokuments.
  467. </para>
  468. <para>
  469. Das Feld 'lastModifiedBy' ist der Benutzername der Person die das aktuelle Dokument
  470. als letztes geändert hat.
  471. </para>
  472. <para>
  473. Das Feld 'revision' ist die Versionsnummer des aktuellen Dokuments.
  474. </para>
  475. <para>
  476. Das Feld 'modified' ist das Datum / die Uhrzeit der letzten Änderung des
  477. aktuellen Dokuments.
  478. </para>
  479. <para>
  480. Das Feld 'created' ist das Datum / die Uhrzeit der Erstellung des aktuellen
  481. Dokuments.
  482. </para>
  483. <para>
  484. Das Feld 'body' ist der aktuelle Inhalt aller Slides und Slidenotizen im
  485. Powerpoint 2007 Dokument.
  486. </para>
  487. <para>
  488. Die Methode <methodname>loadPptxFile()</methodname> der
  489. <classname>Zend_Search_Lucene_Document_Pptx</classname> Klasse hat auch ein zweites
  490. optionales Argument. Wenn es auf <constant>TRUE</constant> gesetzt wird, wird der Inhalt
  491. auch mit einem Index gespeichert und kann vom Index empfangen werden. Standardmäßig wird
  492. der Inhalt gesplittet und indiziert, aber nicht gespeichert.
  493. </para>
  494. <para>
  495. Eingelesene Dokumente können vom Programierer mit jedem anderen Feld argumentiert
  496. werden:
  497. </para>
  498. <programlisting language="php"><![CDATA[
  499. $doc = Zend_Search_Lucene_Document_Pptx::loadPptxFile($filename);
  500. $doc->addField(Zend_Search_Lucene_Field::UnIndexed(
  501. 'indexTime',
  502. time()));
  503. $doc->addField(Zend_Search_Lucene_Field::Text(
  504. 'annotation',
  505. 'Anmerkungstext des Dokuments'));
  506. $index->addDocument($doc);
  507. ]]></programlisting>
  508. </sect2>
  509. <sect2 id="zend.search.lucene.index-creation.xlsx-documents">
  510. <title>Excel 2007 Dokumente</title>
  511. <para>
  512. <classname>Zend_Search_Lucene</classname> bietet ein Parsing Feature für Excel 2007.
  513. Dokumente können direkt von einer Excel 2007 Datei erstellt werden:
  514. </para>
  515. <programlisting language="php"><![CDATA[
  516. $doc = Zend_Search_Lucene_Document_Xlsx::loadXlsxFile($filename);
  517. $index->addDocument($doc);
  518. ]]></programlisting>
  519. <para>
  520. Die <classname>Zend_Search_Lucene_Document_Xlsx</classname> Klasse verwendet die
  521. <code>ZipArchive</code> Klasse und <code>simplexml</code> Methoden um das Quelldokument
  522. zu parsen. Wenn die <code>ZipArchive</code> Klasse (vom Modul php_zip) nicht vorhanden
  523. ist, wird <classname>Zend_Search_Lucene_Document_Xlsx</classname> auch nicht für die
  524. Verwendung mit dem Zend Framework zur Verfügung stehen.
  525. </para>
  526. <para>
  527. Die <classname>Zend_Search_Lucene_Document_Xlsx</classname> Klasse erkennt die Metadaten
  528. und den Text des Dokuments. Metadaten bestehen, abhängig vom Inhalt des Dokuments, aus
  529. Dateinamen, Titel, Untertitel, Ersteller, Schlüsselwörter, Beschreibung, zuletzt
  530. geändert von, Version, Geändert und Erstellt.
  531. </para>
  532. <para>
  533. Das Feld 'filename' ist der aktuelle Excel 2007 Dateiname.
  534. </para>
  535. <para>
  536. Das Feld 'title' ist der aktuelle Titel des Dokuments.
  537. </para>
  538. <para>
  539. Das Feld 'subject' ist der aktuelle Untertitel des Dokuments.
  540. </para>
  541. <para>
  542. Das Feld 'creator' ist der Ersteller des aktuellen Dokuments.
  543. </para>
  544. <para>
  545. Das Feld 'keywords' enthält die Schlüsselwörter des aktuellen Dokuments.
  546. </para>
  547. <para>
  548. Das Feld 'description' ist die Beschreibung des aktuellen Dokuments.
  549. </para>
  550. <para>
  551. Das Feld 'lastModifiedBy' ist der Benutzername der Person die das aktuelle Dokument
  552. als letztes geändert hat.
  553. </para>
  554. <para>
  555. Das Feld 'revision' ist die Versionsnummer des aktuellen Dokuments.
  556. </para>
  557. <para>
  558. Das Feld 'modified' ist das Datum / die Uhrzeit der letzten Änderung des
  559. aktuellen Dokuments.
  560. </para>
  561. <para>
  562. Das Feld 'created' ist das Datum / die Uhrzeit der Erstellung des aktuellen
  563. Dokuments.
  564. </para>
  565. <para>
  566. Das Feld 'body' ist der aktuelle Inhalt aller Arbeitsblätter im
  567. Excel 2007 Dokument.
  568. </para>
  569. <para>
  570. Die Methode <methodname>loadXlsxFile()</methodname> der
  571. <classname>Zend_Search_Lucene_Document_Xlsx</classname> Klasse hat auch ein zweites
  572. optionales Argument. Wenn es auf <constant>TRUE</constant> gesetzt wird, wird der Inhalt
  573. auch mit einem Index gespeichert und kann vom Index empfangen werden. Standardmäßig wird
  574. der Inhalt gesplittet und indiziert, aber nicht gespeichert.
  575. </para>
  576. <para>
  577. Eingelesene Dokumente können vom Programierer mit jedem anderen Feld argumentiert
  578. werden:
  579. </para>
  580. <programlisting language="php"><![CDATA[
  581. $doc = Zend_Search_Lucene_Document_Xlsx::loadXlsxFile($filename);
  582. $doc->addField(Zend_Search_Lucene_Field::UnIndexed(
  583. 'indexTime',
  584. time()));
  585. $doc->addField(Zend_Search_Lucene_Field::Text(
  586. 'annotation',
  587. 'Anmerkungstext des Dokuments'));
  588. $index->addDocument($doc);
  589. ]]></programlisting>
  590. </sect2>
  591. </sect1>