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>
7 Term queries zijn bedoeld voor het zoeken met een enkele term.
13 <programlisting role="php"><![CDATA[
14 $hits = $index->find('word1');]]>
20 Query opbouw door API:
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>
31 <sect2 id="zend.search.lucene.queries.multiterm-query">
32 <title>Multi-Term Query</title>
34 Multi term queries zijn bedoeld voor het zoeken op een set met termen.
38 Elke term in een set kan gedefinieerd worden als noodzakelijk, verboden of geen van beiden (optioneel).
43 noodzakelijk betekent dat documenten waar de term niet in voorkomt, niet in het resultaat
49 verboden betekent dat documenten waar deze term wel in voorkomt niet in het resultaat terugkomen;
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
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.
69 Beide zoekmethodes kunnen worden gebruikt voor multiterm zoekopdrachten.
75 <programlisting role="php"><![CDATA[<?php
77 $hits = $index->find('+word1 author:word2 -word3');
79 ?>]]></programlisting>
84 '+' word gebruikt voor een noodzakelijke term.
89 '-' word gebruikt voor een verboden term.
94 'field:' prefix word gebruikt om een document veld aan te geven bij het zoeken.
95 Wanneer het niet wordt ingegeven, wordt 'contents' gebruikt.
104 Query opbouw door API:
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>
119 <code>$signs</code> array bevat informatie over het type term:
123 true word gebruikt om een noodzakelijke term te definieren.
128 false word gebruikt om een verboden term te definieren.
133 null word gebruikt om geen noodzakelijk en geen verboden term te definieren.
140 <sect2 id="zend.search.lucene.queries.phrase-query">
141 <title>Phrase Query</title>
143 Phrase Queries zijn bedoeld voor het zoeken op zinnen (uitdrukkingen?).
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:
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));
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>
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.
191 Zend_Search_Lucene_Search_Query_Phrase klasse constructor accepteert drie optionele argumenten:
193 <programlisting role="php"><![CDATA[Zend_Search_Lucene_Search_Query_Phrase([array $terms[, array $offsets[, string $field]]]);]]></programlisting>
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.
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>.
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.
215 <programlisting role="php"><![CDATA[$query = new Zend_Search_Lucene_Search_Query_Phrase(array('zend', 'framework'));]]></programlisting>
217 zoekt naar de 'zend framework' uitdrukking.
220 <programlisting role="php"><![CDATA[<$query = new Zend_Search_Lucene_Search_Query_Phrase(array('zend', 'download'), array(0, 2));]]></programlisting>
222 zoekt naar 'zend ????? download' en dus voldoet 'zend platform download', 'zend studio download',
223 'zend core download', 'zend framework download' hieraan.
226 <programlisting role="php"><![CDATA[$query = new Zend_Search_Lucene_Search_Query_Phrase(array('zend', 'framework'), null, 'title');]]></programlisting>
228 zoekt naar 'zend framework' in het 'title' veld.
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:
236 <programlisting role="php"><![CDATA[Zend_Search_Lucene_Search_Query_Phrase::addTerm(Zend_Search_Lucene_Index_Term $term[, integer $position]);]]></programlisting>
239 <code>$term</code> omschrijft de volgende term binnen de uitdrukking. Het moet hetzelfde veld als eerdere
241 Anders wordt er een exceptie opgeworpen.
245 <code>$position</code> geeft de positie van de term aan.
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>
255 zoekt naar de 'zend framework' uitdrukking.
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>
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.
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>
270 zoekt naar 'zend framework' in het 'title' veld.
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.
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.
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.
289 Slop factor kan na het aanmaken van een query worden aangegeven:
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'
298 $hits1 = $index->find($query);
300 // Zoek naar 'word1 word2', 'word1 ... word2',
301 // 'word1 ... ... word2', 'word2 word1'
303 $hits2 = $index->find($query);
305 ?>]]></programlisting>