[ZF-10089] Zend_Log
[zend.git] / documentation / manual / nl / module_specs / Zend_Search_Lucene-Queries.xml
blob51e30a27a79b19954000472af2ee266931bae91b
1 <sect1 id="zend.search.lucene.queries">
2     <title>Query Types</title>
4     <sect2 id="zend.search.lucene.queries.term-query">
5         <title>Term Query</title>
6         <para>
7         Term queries zijn bedoeld voor het zoeken met een enkele term.
8         </para>
10         <para>
11         Query string:
12         </para>
13         <programlisting role="php"><![CDATA[
14     $hits = $index->find('word1');]]>
15         </programlisting>
17         <para>of</para>
19         <para>
20         Query opbouw door API:
21         </para>
22         <programlisting role="php"><![CDATA[<?php
24     $term  = new Zend_Search_Lucene_Index_Term('word1');
25     $query = new Zend_Search_Lucene_Search_Query_Term($term);
26     $hits  = $index->find($query);
28 ?>]]></programlisting>
29     </sect2>
31     <sect2 id="zend.search.lucene.queries.multiterm-query">
32         <title>Multi-Term Query</title>
33         <para>
34             Multi term queries zijn bedoeld voor het zoeken op een set met termen.
35         </para>
37         <para>
38             Elke term in een set kan gedefinieerd worden als noodzakelijk, verboden of geen van beiden (optioneel).
40             <itemizedlist>
41                 <listitem>
42                     <para>
43                     noodzakelijk betekent dat documenten waar de term niet in voorkomt, niet in het resultaat
44                     terugkomen;
45                     </para>
46                 </listitem>
47                 <listitem>
48                     <para>
49                     verboden betekent dat documenten waar deze term wel in voorkomt niet in het resultaat terugkomen;
50                     </para>
51                 </listitem>
52                 <listitem>
53                     <para>
54                     geen van beiden betekent dat de term niet verboden is voor documenten, maar de term ook niet
55                     noodzakelijk is. Een document moet in dit geval minimaal een term bevatten om in het resultaat
56                     terug te komen.
57                     </para>
58                 </listitem>
59             </itemizedlist>
60         </para>
62         <para>
63             Dit betekent dat wanneer een optionele term aan een query wordt toegevoerd met noodzakelijke termen,
64             de documenten in het resultaat hetzelfde blijven, maar documenten waarin de optionele term gevonden word
65             bovenaan de result set komen te staan.
66         </para>
68         <para>
69         Beide zoekmethodes kunnen worden gebruikt voor multiterm zoekopdrachten.
70         </para>
72         <para>
73             Query string:
74         </para>
75         <programlisting role="php"><![CDATA[<?php
77 $hits = $index->find('+word1 author:word2 -word3');
79 ?>]]></programlisting>
80         <para>
81         <itemizedlist>
82             <listitem>
83               <para>
84                 '+' word gebruikt voor een noodzakelijke term.
85               </para>
86             </listitem>
87             <listitem>
88               <para>
89                 '-' word gebruikt voor een verboden term.
90               </para>
91             </listitem>
92             <listitem>
93               <para>
94                 'field:' prefix word gebruikt om een document veld aan te geven bij het zoeken.
95                 Wanneer het niet wordt ingegeven, wordt 'contents' gebruikt.
96               </para>
97             </listitem>
98         </itemizedlist>
99         </para>
101         <para>of</para>
103         <para>
104         Query opbouw door API:
105         </para>
106         <programlisting role="php"><![CDATA[<?php
108     $query = new Zend_Search_Lucene_Search_Query_MultiTerm();
110     $query->addTerm(new Zend_Search_Lucene_Index_Term('word1'), true);
111     $query->addTerm(new Zend_Search_Lucene_Index_Term('word2'), null);
112     $query->addTerm(new Zend_Search_Lucene_Index_Term('word3'), false);
114     $hits  = $index->find($query);
116 ?>]]></programlisting>
118         <para>
119             <code>$signs</code> array bevat informatie over het type term:
120             <itemizedlist>
121                 <listitem>
122                   <para>
123                     true word gebruikt om een noodzakelijke term te definieren.
124                   </para>
125                 </listitem>
126                 <listitem>
127                   <para>
128                     false word gebruikt om een verboden term te definieren.
129                   </para>
130                 </listitem>
131                 <listitem>
132                   <para>
133                     null word gebruikt om geen noodzakelijk en geen verboden term te definieren.
134                   </para>
135                 </listitem>
136             </itemizedlist>
137         </para>
138     </sect2>
140     <sect2 id="zend.search.lucene.queries.phrase-query">
141         <title>Phrase Query</title>
142         <para>
143             Phrase Queries zijn bedoeld voor het zoeken op zinnen (uitdrukkingen?).
144         </para>
146         <para>
147             Phrase Queries zijn erg flexibel en staan toe om te zoeken op zowel exacte als 'slordige' zinnen.
148             Zinnen kunnen ook gaten of termen bevatten op bepaalde plaatsen. (Dit kan door de Analyser worden
149             aangemaakt voor verschillende doeleinden. Voorbeeld: Een term kan gedupliceerd worden om een bepaalde
150             term extra gewicht te geven of verschillende synoniemen kunnen op een plek worden geplaatst).
151             De volgende phrase queries kunnen alleen door de API worden aangemaakt:
152         </para>
154         <programlisting role="php"><![CDATA[<?php
155 $query1 = new Zend_Search_Lucene_Search_Query_Phrase();
157 // Voeg 'word1' op relatieve positie 0 toe.
158 $query1->addTerm(new Zend_Search_Lucene_Index_Term('word1'));
160 // Voeg 'word2' op relatieve positie 1 toe.
161 $query1->addTerm(new Zend_Search_Lucene_Index_Term('word2'));
163 // Voeg 'word3' op relatieve positie 3 toe.
164 $query1->addTerm(new Zend_Search_Lucene_Index_Term('word3'), 3);
168 $query2 = new Zend_Search_Lucene_Search_Query_Phrase(
169                 array('word1', 'word2', 'word3'), array(0,1,3));
173 // Query zonder gat.
174 $query3 = new Zend_Search_Lucene_Search_Query_Phrase(
175                 array('word1', 'word2', 'word3'));
179 $query4 = new Zend_Search_Lucene_Search_Query_Phrase(
180                 array('word1', 'word2'), array(0,1), 'annotation');
182 ?>]]></programlisting>
185         <para>
186             Phrase query kunnen worden aangemaakt met een enkele stap in de klasse constructor of stap voor stap met de
187             <code>Zend_Search_Lucene_Search_Query_Phrase::addTerm()</code> methode.
188         </para>
190         <para>
191             Zend_Search_Lucene_Search_Query_Phrase klasse constructor accepteert drie optionele argumenten:
192         </para>
193         <programlisting role="php"><![CDATA[Zend_Search_Lucene_Search_Query_Phrase([array $terms[, array $offsets[, string $field]]]);]]></programlisting>
195         <para>
196             <code>$terms</code> is een array van strings, welke een set van zin termen bevat.
197             Wanneer het niet wordt meegegeven of null is, wordt een lege query aangemaakt.
198         </para>
200         <para>
201             <code>$offsets</code> is een array van integers, welke startpunten van termen in een zin bevatten.
202             Wanneer het niet wordt meegegeven of null is, wordt uitgegaan van posities zoals <code>array(0, 1, 2, 3, ...)</code>.
203         </para>
205         <para>
206             <code>$field</code> is een string, welke aangeeft welk document veld doorzocht moet worden.
207             Wanneer het niet wordt meegegeven of null is, dan wordt het standaard veld doorzicht.
208             Deze versie van Zend_Search_Lucene behandelt het 'contents' veld als standaard, maar het plan is dit aan
209             te passen tot "ieder veld" in volgende versies.
210         </para>
212         <para>
213             Dus:
214         </para>
215         <programlisting role="php"><![CDATA[$query = new Zend_Search_Lucene_Search_Query_Phrase(array('zend', 'framework'));]]></programlisting>
216         <para>
217             zoekt naar de 'zend framework' uitdrukking.
218         </para>
220         <programlisting role="php"><![CDATA[<$query = new Zend_Search_Lucene_Search_Query_Phrase(array('zend', 'download'), array(0, 2));]]></programlisting>
221         <para>
222             zoekt naar 'zend ????? download' en dus voldoet 'zend platform download', 'zend studio download',
223             'zend core download', 'zend framework download' hieraan.
224         </para>
226         <programlisting role="php"><![CDATA[$query = new Zend_Search_Lucene_Search_Query_Phrase(array('zend', 'framework'), null, 'title');]]></programlisting>
227         <para>
228             zoekt naar 'zend framework' in het 'title' veld.
229         </para>
232         <para>
233             <code>Zend_Search_Lucene_Search_Query_Phrase::addTerm()</code> methode accepteert twee argumenten.
234             Noodzakelijk <code>Zend_Search_Lucene_Index_Term</code> object en optioneel positie:
235         </para>
236         <programlisting role="php"><![CDATA[Zend_Search_Lucene_Search_Query_Phrase::addTerm(Zend_Search_Lucene_Index_Term $term[, integer $position]);]]></programlisting>
238         <para>
239             <code>$term</code> omschrijft de volgende term binnen de uitdrukking. Het moet hetzelfde veld als eerdere
240             termen omschrijven.
241             Anders wordt er een exceptie opgeworpen.
242         </para>
244         <para>
245             <code>$position</code> geeft de positie van de term aan.
246         </para>
248         <para>
249             Dus:
250         </para>
251         <programlisting role="php"><![CDATA[$query = new Zend_Search_Lucene_Search_Query_Phrase();
252 $query->addTerm(new Zend_Search_Lucene_Index_Term('zend'));
253 $query->addTerm(new Zend_Search_Lucene_Index_Term('framework'));]]></programlisting>
254         <para>
255             zoekt naar de 'zend framework' uitdrukking.
256         </para>
258         <programlisting role="php"><![CDATA[$query = new Zend_Search_Lucene_Search_Query_Phrase();
259 $query->addTerm(new Zend_Search_Lucene_Index_Term('zend'), 0);
260 $query->addTerm(new Zend_Search_Lucene_Index_Term('framework'), 2);]]></programlisting>
261         <para>
262             zoekt naar de 'zend ????? download' uitdrukking en dus zal 'zend platform download', 'zend studio download',
263             'zend core download', 'zend framework download' hieraan voldoen.
264         </para>
266         <programlisting role="php"><![CDATA[$query = new Zend_Search_Lucene_Search_Query_Phrase();
267 $query->addTerm(new Zend_Search_Lucene_Index_Term('zend', 'title'));
268 $query->addTerm(new Zend_Search_Lucene_Index_Term('framework', 'title'));]]></programlisting>
269         <para>
270             zoekt naar 'zend framework' in het 'title' veld.
271         </para>
274         <para>
275             Slop factor zet het aantal woorden dat is toegestaan binnen een query uitdrukking. Wanneer deze nul is,
276             wordt er op een exacte uitdrukking gezocht. Voor hogere waardes werkt het als een WITHIN of NEAR operator.
277         </para>
278         <para>
279             De 'slop' is eigenlijk een editie-afstand, waar de eenheden overeenkomen met wijzigingen in de
280             positie van termen in de query uitdrukking. Voorbeeld: om de volgorde van twee woorden aan te passen is
281             twee wijzigingen (de eerste wijzigingen zet beide termen op dezelfde positie), om het herschikken
282             van uitdrukkingen toe te staan dient 'slop' minstens twee te zijn.
283         </para>
284         <para>
285             Exactere overeenkomsten krijgen een hogere score dan slordigere overeenkomsten, dus zoekresultaten worden
286             geordend op exactheid. 'Slop' staat standaard op nul, waardoor exacte overeenkomsten noodzakelijk zijn.
287         </para>
288         <para>
289             Slop factor kan na het aanmaken van een query worden aangegeven:
290         </para>
291         <programlisting role="php"><![CDATA[<?php
293 // Query zonder een gat.
294 $query = new Zend_Search_Lucene_Search_Query_Phrase(array('word1', 'word2'));
296 // Zoek naar 'word1 word2', 'word1 ... word2'
297 $query->setSlop(1);
298 $hits1 = $index->find($query);
300 // Zoek naar 'word1 word2', 'word1 ... word2',
301 // 'word1 ... ... word2', 'word2 word1'
302 $query->setSlop(2);
303 $hits2 = $index->find($query);
305 ?>]]></programlisting>
307     </sect2>
308 </sect1>