Zend_Search_Lucene-QueryLanguage.xml 21 KB

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