Zend_Search_Lucene-QueryLanguage.xml 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.search.lucene.query-language">
  5. <title>Abfragesprache</title>
  6. <para>
  7. Java Lucene und <classname>Zend_Search_Lucene</classname> bieten sehr mächtige
  8. Abfragesprachen.
  9. </para>
  10. <para>
  11. Diese Sprachen sind großteils die selben mit ein paar kleineren Unterschieden welche
  12. anbei erklärt werden.
  13. </para>
  14. <para>
  15. Die komplette Java Lucene Syntax Dokumentation der Abfragesprache kann
  16. <ulink url="http://lucene.apache.org/java/2_3_0/queryparsersyntax.html">hier</ulink>
  17. gefunden werden.
  18. </para>
  19. <sect2 id="zend.search.lucene.query-language.terms">
  20. <title>Ausdrücke</title>
  21. <para>
  22. Eine Abfrage wird in Ausdrücke und Operatoren zerteilt. Es gibt drei Arten von
  23. Ausdrücken: Einzelne Ausdrücke, Phrasen und Unterabfragen.
  24. </para>
  25. <para>
  26. Ein einzelner Ausdruck ist ein einzelnes Wort wie "Test" oder "Hallo".
  27. </para>
  28. <para>
  29. Eine Phrase ist eine Gruppe von Wörtern die von doppelten Hochkommata umgeben sind wie
  30. "Hallo Dolly".
  31. </para>
  32. <para>
  33. Eine Unterabfrage ist eine Abfrage die von Klammern umgeben ist wie "(Hallo Dolly)".
  34. </para>
  35. <para>
  36. Mehrere Ausdrücke können mithilfe eines boolschen Operators miteinander kombiniert
  37. werden um komplexere Abfragen zu formen (siehe anbei).
  38. </para>
  39. </sect2>
  40. <sect2 id="zend.search.lucene.query-language.fields">
  41. <title>Felder</title>
  42. <para>
  43. Lucene unterstützt Felder von Daten. Wenn eine Suche durchgeführt wird kann man entweder
  44. ein Feld spezifizieren, oder ein Standardfeld verwenden. Der Name des Feldes hängt von
  45. den indizierten Daten ab und das Standardfeld wird durch aktuelle Einstellungen
  46. definiert.
  47. </para>
  48. <para>
  49. Der erste und größte Unterschied zu Java Lucene ist der das Ausdrücke standardmäßig
  50. über <emphasis>alle Felder</emphasis> gesucht werden.
  51. </para>
  52. <para>
  53. Es gibt zwei statische Methoden in der <classname>Zend_Search_Lucene</classname> Klasse
  54. welche dem Entwickler das Konfigurieren dieser Einstellungen erlauben:
  55. </para>
  56. <programlisting language="php"><![CDATA[
  57. $defaultSearchField = Zend_Search_Lucene::getDefaultSearchField();
  58. ...
  59. Zend_Search_Lucene::setDefaultSearchField('contents');
  60. ]]></programlisting>
  61. <para>
  62. Der <constant>NULL</constant> Wert bedeutet, das die Suche über alle Felder durchgeführt
  63. wird. Das ist die Standardeinstellung.
  64. </para>
  65. <para>
  66. Es können spezielle Felder gesucht werden indem der Feldname gefolgt von einem
  67. Doppelpunkt ":" angegeben wird, gefolgt von dem Begriff nach dem gesucht wird.
  68. </para>
  69. <para>
  70. Als Beispiel nehmen wir an das ein Lucene Index zwei Felder enthält - title und text -
  71. text ist das Standardfeld. Wenn man das "Der richtige Weg" benannte Dokument finden will
  72. welches den Text "gehe nicht diesen Weg" enthält, geht das mit:
  73. </para>
  74. <programlisting language="querystring"><![CDATA[
  75. title:"Der richtige Weg" AND text:go
  76. ]]></programlisting>
  77. <para>
  78. oder
  79. </para>
  80. <programlisting language="querystring"><![CDATA[
  81. title:"Mach es richtig" AND go
  82. ]]></programlisting>
  83. <para>
  84. Weil "text" das Standardfeld ist, wird der Feld Indikator nicht benötigt.
  85. </para>
  86. <para>
  87. Beachte: Das Feld nur nur für den Ausdruck, die Phrase oder die Unterabfrage gültig die
  88. direkt danach folgt, sodas die Abfrage
  89. </para>
  90. <programlisting language="querystring"><![CDATA[
  91. title:Mach es richtig
  92. ]]></programlisting>
  93. <para>
  94. nur "Mach" im title Feld finden wird. Es findet "es" und "richtig" im Standardfeld (wenn
  95. das Standardfeld gesetzt ist) oder in allen indizierten Felder (wenn das Standardfeld
  96. auf <constant>NULL</constant> gesetzt ist).
  97. </para>
  98. </sect2>
  99. <sect2 id="zend.search.lucene.query-language.wildcard">
  100. <title>Wildcards</title>
  101. <para>
  102. Lucene unterstützt Einzelzeichen und Mehrfachzeichen Suchen mit Wildcards in einzelnen
  103. Ausdrücken (aber nicht innerhalb von Phrasenabfragen).
  104. </para>
  105. <para>
  106. Um eine Einzelzeichen Wildcardsuche durchzuführen kann das "?" Zeichen verwendet werden.
  107. </para>
  108. <para>
  109. Um eine Mehrzeichen Wildcardsuche durchzuführen kann das "*" Zeichen verwendet werden.
  110. </para>
  111. <para>
  112. Die Einzelzeichen Wildcardsuche schucht nach Strings die dem Begriff entsprechen wobei
  113. das "?" durch ein beliebiges einzelnes Zeichen ersetzt wird. Um, zum Beispiel, nach
  114. "Text" oder "Test" zu suchen kann die folgende Suche verwendet werden:
  115. </para>
  116. <programlisting language="querystring"><![CDATA[
  117. Te?t
  118. ]]></programlisting>
  119. <para>
  120. Mehrzeichen Wildcardsuche sucht nach 0 oder mehr Zeichen wenn Strings nach passenden
  121. Begriffen sucht. Um, zum Beispiel, nach Test, Tests oder Tester zu suchen, kann die
  122. folgende Suche verwendet werden:
  123. </para>
  124. <programlisting language="querystring"><![CDATA[
  125. Test*
  126. ]]></programlisting>
  127. <para>
  128. Es können "?", "*" oder beide an jeder Stelle des Ausdrucks verwendet werden:
  129. </para>
  130. <programlisting language="querystring"><![CDATA[
  131. *schrei?t*
  132. ]]></programlisting>
  133. <para>
  134. Sucht nach "schreibt", "schreibtisch", "beschreibt", "schreist" und so weiter.
  135. </para>
  136. <para>
  137. Beginnend mit ZF 1.7.7 benötigen Wildcard Präfixe einen nicht-Wildcard Präfix. Die
  138. standardmäßige Länge des Präfixes ist 3 (wie in Java Lucene). Die Ausdrücke
  139. "*", "te?t", "*wr?t*" werden also eine Exception werfen
  140. <footnote>
  141. <para>
  142. Es ist zu beachten das es nicht zu einer
  143. <classname>Zend_Search_Lucene_Search_QueryParserException</classname> kommt,
  144. sondern zu einer <classname>Zend_Search_Lucene_Exception</classname>. Sie wird
  145. während dem Umschreiben der Abfrage geworfen.
  146. </para>
  147. </footnote>.
  148. </para>
  149. <para>
  150. Das kann durch Verwendung der Methoden
  151. <methodname>Zend_Search_Lucene_Search_Query_Wildcard::getMinPrefixLength()</methodname>
  152. und
  153. <methodname>Zend_Search_Lucene_Search_Query_Wildcard::setMinPrefixLength()</methodname>
  154. geändert werden.
  155. </para>
  156. </sect2>
  157. <sect2 id="zend.search.lucene.query-language.modifiers">
  158. <title>Ausdrücke verändern</title>
  159. <para>
  160. Lucene unterstützt die Veränderung von Abfrageausdrücken und bietet damit ein beites
  161. Spektrum von Suchoptionen.
  162. </para>
  163. <para>
  164. Der "~" Modifikator kann für verwendet werden um eine annähernde Suche auf Phrasen oder
  165. Fuzzy Suchen für individuelle Ausdrücke durchzuführen.
  166. </para>
  167. </sect2>
  168. <sect2 id="zend.search.lucene.query-language.range">
  169. <title>Bereichs Suchen</title>
  170. <para>
  171. Bereichsabfragen erlauben es Entwicklern passende Dokumente zu finden deren Werte der
  172. Felder zwischen der unteren und oberen Grenze sind die durch die Bereichsabfrage
  173. spezifiziert wurden. Bereichsabfragen können inklusive oder exklusive der oberen und
  174. unteren Grenze sein. Sortierungen werden lexikalisch durchgeführt.
  175. </para>
  176. <programlisting language="querystring"><![CDATA[
  177. mod_date:[20020101 TO 20030101]
  178. ]]></programlisting>
  179. <para>
  180. Das wird Dokumente finden dessen lod_date Felder Werte zwischen 20020101 und 20030101
  181. inklusive haben. Es ist zu beachten das Bereichsabfragen nicht für Datumsfelder
  182. reserviert sind. Bereichsabfragen können auch mit nicht-datums Felder verwendet werden:
  183. </para>
  184. <programlisting language="querystring"><![CDATA[
  185. title:{Aida TO Carmen}
  186. ]]></programlisting>
  187. <para>
  188. Das wird alle Dokumente finden dessen Titel zwischen Aida und Carmen sortiert sind,
  189. aber ohne Aida und Carmen.
  190. </para>
  191. <para>
  192. Bereichsabfragen inklusive, werden durch eine eckige Klammer abgegrenzt.
  193. Bereichsabfragen exklusive werden durch geschlungene Klammern abgegrenzt.
  194. </para>
  195. <para>
  196. Wenn kein Feld spezifiziert wurde sucht <classname>Zend_Search_Lucene</classname>
  197. standardmäßig nach spezifizierten Intervallen in allen Feldern.
  198. </para>
  199. <programlisting language="querystring"><![CDATA[
  200. {Aida TO Carmen}
  201. ]]></programlisting>
  202. </sect2>
  203. <sect2 id="zend.search.lucene.query-language.fuzzy">
  204. <title>Fuzzy Suchen</title>
  205. <para>
  206. <classname>Zend_Search_Lucene</classname> unterstützt, genauso wie Java Lucene, die
  207. Fuzzy Suche basierend auf der Levenshtein Distanz oder dem Edit Algorithmus. Um eine
  208. Fuzzy Suche durchzuführen muß das Tilde Symbol "~", am Ende eines einzelnen Wortbegriffs
  209. verwendet werden. Um zum Beispiel nach einem Begriff zu suchen der in der Aussprache
  210. ähnlich zu "Raum" ist kann die folgende Fuzzy Suche verwendet werden:
  211. </para>
  212. <programlisting language="querystring"><![CDATA[
  213. roam~
  214. ]]></programlisting>
  215. <para>
  216. Diese Suche wird Begriffe wie "Baum" und "Saum" finden. Zusätzliche (optionale)
  217. Parameter können die benötigte Ähnlichkeit spezifizieren. Der Wert muß zwischen 0 und 1
  218. sein. Mit einem Wert näher bei 1 werden nur Begriffe mit einer höheren Warscheinlichkeit
  219. gefunden. Zum Beispiel:
  220. </para>
  221. <programlisting language="querystring"><![CDATA[
  222. roam~0.8
  223. ]]></programlisting>
  224. <para>
  225. Der verwendete Standardwert wenn der Parameter nicht angegeben wurde ist 0.5.
  226. </para>
  227. </sect2>
  228. <sect2 id="zend.search.lucene.query-language.matched-terms-limitations">
  229. <title>Einschränkung passender Ausdrücke</title>
  230. <para>
  231. Wildcard, Bereichs- und Fuzzy Suchabfragen können bei zu vielen Ausdrücken passen.
  232. Das kann die Geschwindigkeit der Suche sehr stark verlangsamen.
  233. </para>
  234. <para>
  235. Deshalb setzt <classname>Zend_Search_Lucene</classname> ein Limit der passenden
  236. Ausdrücke pro Abfrage (Unterabfrage). Dieses Limit kann durch Verwendung der Methoden
  237. <methodname>Zend_Search_Lucene::getTermsPerQueryLimit()</methodname> und
  238. <methodname>Zend_Search_Lucene::setTermsPerQueryLimit($limit)</methodname> empfangen und
  239. gesetzt werden.
  240. </para>
  241. <para>
  242. Das standardmäßige Limit für passende Ausdrücke ist 1024.
  243. </para>
  244. </sect2>
  245. <sect2 id="zend.search.lucene.query-language.proximity-search">
  246. <title>Angenäherte Suchen</title>
  247. <para>
  248. Lucene unterstützt das Finden von Wörtern aus einer Phrase die einen spezifizierten
  249. Abstand an Wörtern in einem String weg sind. Um eine angenäherte Suche durchzuführen muß
  250. das Tilde, "~", Symbol am Ende der Phrase verwendet werden. Um zum Beispiel nach "Zend"
  251. und "Framework" innerhalb von 10 Wörtern zueinander in einem Dokument zu suchen kann die
  252. folgende Suche verwendet werden:
  253. </para>
  254. <programlisting language="querystring"><![CDATA[
  255. "Zend Framework"~10
  256. ]]></programlisting>
  257. </sect2>
  258. <sect2 id="zend.search.lucene.query-language.boosting">
  259. <title>Einen Ausdruck schneller machen</title>
  260. <para>
  261. Java Lucene und <classname>Zend_Search_Lucene</classname> bieten einen Level der
  262. Relevanz von passenden Dokumenten basierend auf den gefundenen Ausdrücken. Um die
  263. Relevanz eines Ausdrucks zu erhöhen kann das Karet, "^", Symbol mit einem Boost Faktor
  264. (einer Zahl) am Ende des Ausdrucks nach dem gesucht wird, verwendet werden. Je höher
  265. Boost Faktor ist, desdo relevanter wird der Ausdruck werden.
  266. </para>
  267. <para>
  268. Das boosten erlaubt die Kontrolle der Relevanz eines Dokuments durch das boosten
  269. individueller Ausdrücke. Wenn man zum Beispiel nach
  270. </para>
  271. <programlisting language="querystring"><![CDATA[
  272. PHP framework
  273. ]]></programlisting>
  274. <para>
  275. sucht und will das der Ausdruck "PHP" mehr Relevanz hat, kann er durch Verwendung des ^
  276. Symbols zusammen mit einem Boost Faktor beim Ausdruck geboostet werden. Man würde zum
  277. Beispiel folgendes angeben:
  278. </para>
  279. <programlisting language="querystring"><![CDATA[
  280. PHP^4 framework
  281. ]]></programlisting>
  282. <para>
  283. Das macht Dokumente in denen der Ausdruck <acronym>PHP</acronym> vorkommt relevanter.
  284. Man kann genauso Phrasenausdrücke boosten und Unterabfragen wie im Beispiel gezeigt:
  285. </para>
  286. <programlisting language="querystring"><![CDATA[
  287. "PHP framework"^4 "Zend Framework"
  288. ]]></programlisting>
  289. <para>
  290. Standardwert ist der Boost Faktor 1. Auch wenn der Boost Faktor positiv sein muß, kann
  291. er kleiner als 1 sein (z.B. 0.2).
  292. </para>
  293. </sect2>
  294. <sect2 id="zend.search.lucene.query-language.boolean">
  295. <title>Boolsche Operatoren</title>
  296. <para>
  297. Boolsche Operatoren erlauben es Ausdrücke durch logische Operatoren zu kombinieren.
  298. Lucene unterstützt AND, "+", OR, NOT und "-" als boolsche Operatoren. In Java Lucene
  299. müssen alle boolschen Operatoren GROßGESCHRIEBEN werden. In
  300. <classname>Zend_Search_Lucene</classname> nicht.
  301. </para>
  302. <para>
  303. AND, OR, und NOT Operatoren und "+", "-" definieren zwei unterschiedliche Stile um
  304. boolsche Abfragen zu erstellen. Im Gegensatz zu Java Lucene erlaubt es
  305. <classname>Zend_Search_Lucene</classname> nicht diese zwei Stile zu mischen.
  306. </para>
  307. <para>
  308. Wenn der AND/OR/NOT Stil verwendet wird dann muß der AND oder OR Operator zwischen allen
  309. Abfrageausdrücken vorhanden sein. Jedem Ausdruck kann auch ein NOT Operator
  310. vorangestellt werden. Der AND Operator hat eine höhere Präzedenz als der OR Operator.
  311. Das unterscheidet sich vom Verhalten von Java Lucene.
  312. </para>
  313. <sect3 id="zend.search.lucene.query-language.boolean.and">
  314. <title>AND</title>
  315. <para>
  316. Der AND Operator bedeutet das alle Ausdrücke der "AND Gruppe" in einigen Teilen der
  317. gesuchten Feld(er) passen müssen.
  318. </para>
  319. <para>
  320. Um nach Dokumenten zu Suchen die "PHP Framework" und "Zend Framework" enthalten kann
  321. die folgende Abfrage verwendet werden:
  322. </para>
  323. <programlisting language="querystring"><![CDATA[
  324. "PHP Framework" AND "Zend Framework"
  325. ]]></programlisting>
  326. </sect3>
  327. <sect3 id="zend.search.lucene.query-language.boolean.or">
  328. <title>OR</title>
  329. <para>
  330. Der OR Operator teilt die Abfrage in verschiedene optionale Begriffe.
  331. </para>
  332. <para>
  333. Um nach Dokumenten zu Suchen die "PHP Framework" oder "Zend Framework" enthalten
  334. kann die folgende Abfrage verwendet werden:
  335. </para>
  336. <programlisting language="querystring"><![CDATA[
  337. "PHP Framework" OR "Zend Framework"
  338. ]]></programlisting>
  339. </sect3>
  340. <sect3 id="zend.search.lucene.query-language.boolean.not">
  341. <title>NOT</title>
  342. <para>
  343. Der NOT Operator scheidet Dokumente aus die den Ausdruck nach NOT enthalten. Aber
  344. eine "AND Gruppe" die nur Ausdrücke mit NOT Operatoren enthält, gibt ein leeres
  345. Ergebnis zurück statt einem kompletten Set von indizierten Dokumenten.
  346. </para>
  347. <para>
  348. Um nach Dokumenten zu Suchen die "PHP Framework" enthalten aber "Zend Framework"
  349. nicht kann die folgende Abfrage verwendet werden:
  350. </para>
  351. <programlisting language="querystring"><![CDATA[
  352. "PHP Framework" AND NOT "Zend Framework"
  353. ]]></programlisting>
  354. </sect3>
  355. <sect3 id="zend.search.lucene.query-language.boolean.other-form">
  356. <title>&amp;&amp;, ||, und ! Operatoren</title>
  357. <para>
  358. &amp;&amp;, ||, und ! können statt den AND, OR und NOT Notation verwendet werden.
  359. </para>
  360. </sect3>
  361. <sect3 id="zend.search.lucene.query-language.boolean.plus">
  362. <title>+</title>
  363. <para>
  364. Der "+" oder benötigende Operator erfordert das der Ausdruck nach dem "+" Symbol im
  365. passenden Dokument vorhanden ist.
  366. </para>
  367. <para>
  368. Um nach Dokumenten zu Suchen die "Zend" enthalten müssen und "Framework" enthalten
  369. können, kann die folgende Abfrage verwendet werden:
  370. </para>
  371. <programlisting language="querystring"><![CDATA[
  372. +Zend Framework
  373. ]]></programlisting>
  374. </sect3>
  375. <sect3 id="zend.search.lucene.query-language.boolean.minus">
  376. <title>-</title>
  377. <para>
  378. Der "-" oder ausschließende Operator schließt Dokumente aus die dem Ausdruck nach
  379. dem "-" Symbol entsprechen.
  380. </para>
  381. <para>
  382. Um nach Dokumenten zu Suchen die "PHP Framework" enthalten aber "Zend Framework"
  383. nicht, kann die folgende Abfrage verwendet werden:
  384. </para>
  385. <programlisting language="querystring"><![CDATA[
  386. "PHP Framework" -"Zend Framework"
  387. ]]></programlisting>
  388. </sect3>
  389. <sect3 id="zend.search.lucene.query-language.boolean.no-operator">
  390. <title>kein Operator</title>
  391. <para>
  392. Wenn kein Operator verwendet wird, dann wird das Suchverhalten durch den
  393. "standardmäßigen boolschen Operator" bestimmt.
  394. </para>
  395. <para>
  396. Dieser ist standardmäßig auf 'OR' gesetzt.
  397. </para>
  398. <para>
  399. Das impliziert das jeder Ausdruck standardmäßig optional ist. Er kann oder kann
  400. nicht innerhalb des Dokuments enthalten sein, aber Dokumenten mit diesem Ausdruck
  401. haben einen Höheren Stellenwert.
  402. </para>
  403. <para>
  404. Um nach Dokumenten zu Suchen die "PHP Framework" benötigen und "Zend Framework"
  405. enthalten können kann die folgende Abfrage verwendet werden:
  406. </para>
  407. <programlisting language="querystring"><![CDATA[
  408. +"PHP Framework" "Zend Framework"
  409. ]]></programlisting>
  410. <para>
  411. Der standardmäßige boolsche Operator kann mit den
  412. <classname>Zend_Search_Lucene_Search_QueryParser::setDefaultOperator($operator)</classname>
  413. und
  414. <classname>Zend_Search_Lucene_Search_QueryParser::getDefaultOperator()</classname>
  415. Methoden gesetzt oder geholt werden.
  416. </para>
  417. <para>
  418. Diese Methoden arbeiten mit den
  419. <classname>Zend_Search_Lucene_Search_QueryParser::B_AND</classname> und
  420. <classname>Zend_Search_Lucene_Search_QueryParser::B_OR</classname> Konstanten.
  421. </para>
  422. </sect3>
  423. </sect2>
  424. <sect2 id="zend.search.lucene.query-language.grouping">
  425. <title>Gruppieren</title>
  426. <para>
  427. Java Lucene und <classname>Zend_Search_Lucene</classname> unterstützen die Verwendung
  428. von Klammern um Fälle zu gruppieren und Unterabfragen zu erstellen. Das kann nützlich
  429. sein wenn man die boolsche Operatoren für eine Abfrage kontrollieren will, oder
  430. unterschiedliche Abfragestile mischen will:
  431. </para>
  432. <programlisting language="querystring"><![CDATA[
  433. +(Framework OR Bibliothek) +php
  434. ]]></programlisting>
  435. <para>
  436. <classname>Zend_Search_Lucene</classname> unterstützt Unterabfragen von beliebigen
  437. Ebenen.
  438. </para>
  439. </sect2>
  440. <sect2 id="zend.search.lucene.query-language.field-grouping">
  441. <title>Felder gruppieren</title>
  442. <para>
  443. Lucene unterstützt auch die Verwendung von Klammern um mehrere Fälle in ein einzelnes
  444. Feld zu gruppieren.
  445. </para>
  446. <para>
  447. Um nach einem Titel zu suchen die sowohl das Wort "Rückkehr" und die Phrase "rosaroter
  448. Panther" kann die folgende Abfrage verwendet werden:
  449. </para>
  450. <programlisting language="querystring"><![CDATA[
  451. title:(+Rückkehr +"rosaroter Panther")
  452. ]]></programlisting>
  453. </sect2>
  454. <sect2 id="zend.search.lucene.query-language.escaping">
  455. <title>Escapen von speziellen Zeichen</title>
  456. <para>
  457. Lucene unterstützt das Escapen von speziellen Zeichen die in der Abfragesyntax verwendet
  458. werden. Die aktuelle Liste der speziellen Zeichen ist:
  459. </para>
  460. <para>
  461. + - &amp;&amp; || ! ( ) { } [ ] ^ " ~ * ? : \
  462. </para>
  463. <para>
  464. + und - in einem einzelnen Ausdruck werden automatisch als normale Zeichen behandelt.
  465. </para>
  466. <para>
  467. Für andere Instanzen von solchen Zeichen kann das \ vor jedem speziellen Zeichen
  468. verwendet werden der escaped werden soll. Um zum Beispiel nach (1+1):2 zu suchen kann
  469. die folgende Abfrage verwendet werden:
  470. </para>
  471. <programlisting language="querystring"><![CDATA[
  472. \(1\+1\)\:2
  473. ]]></programlisting>
  474. </sect2>
  475. </sect1>