| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308 |
- <sect1 id="zend.search.lucene.queries">
- <title>Query Types</title>
- <sect2 id="zend.search.lucene.queries.term-query">
- <title>Term Query</title>
- <para>
- Term queries zijn bedoeld voor het zoeken met een enkele term.
- </para>
- <para>
- Query string:
- </para>
- <programlisting role="php"><![CDATA[
- $hits = $index->find('word1');]]>
- </programlisting>
- <para>of</para>
- <para>
- Query opbouw door API:
- </para>
- <programlisting role="php"><![CDATA[<?php
- $term = new Zend_Search_Lucene_Index_Term('word1');
- $query = new Zend_Search_Lucene_Search_Query_Term($term);
- $hits = $index->find($query);
- ?>]]></programlisting>
- </sect2>
- <sect2 id="zend.search.lucene.queries.multiterm-query">
- <title>Multi-Term Query</title>
- <para>
- Multi term queries zijn bedoeld voor het zoeken op een set met termen.
- </para>
- <para>
- Elke term in een set kan gedefinieerd worden als noodzakelijk, verboden of geen van beiden (optioneel).
- <itemizedlist>
- <listitem>
- <para>
- noodzakelijk betekent dat documenten waar de term niet in voorkomt, niet in het resultaat
- terugkomen;
- </para>
- </listitem>
- <listitem>
- <para>
- verboden betekent dat documenten waar deze term wel in voorkomt niet in het resultaat terugkomen;
- </para>
- </listitem>
- <listitem>
- <para>
- geen van beiden betekent dat de term niet verboden is voor documenten, maar de term ook niet
- noodzakelijk is. Een document moet in dit geval minimaal een term bevatten om in het resultaat
- terug te komen.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <para>
- Dit betekent dat wanneer een optionele term aan een query wordt toegevoerd met noodzakelijke termen,
- de documenten in het resultaat hetzelfde blijven, maar documenten waarin de optionele term gevonden word
- bovenaan de result set komen te staan.
- </para>
- <para>
- Beide zoekmethodes kunnen worden gebruikt voor multiterm zoekopdrachten.
- </para>
- <para>
- Query string:
- </para>
- <programlisting role="php"><![CDATA[<?php
- $hits = $index->find('+word1 author:word2 -word3');
- ?>]]></programlisting>
- <para>
- <itemizedlist>
- <listitem>
- <para>
- '+' word gebruikt voor een noodzakelijke term.
- </para>
- </listitem>
- <listitem>
- <para>
- '-' word gebruikt voor een verboden term.
- </para>
- </listitem>
- <listitem>
- <para>
- 'field:' prefix word gebruikt om een document veld aan te geven bij het zoeken.
- Wanneer het niet wordt ingegeven, wordt 'contents' gebruikt.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <para>of</para>
- <para>
- Query opbouw door API:
- </para>
- <programlisting role="php"><![CDATA[<?php
- $query = new Zend_Search_Lucene_Search_Query_MultiTerm();
- $query->addTerm(new Zend_Search_Lucene_Index_Term('word1'), true);
- $query->addTerm(new Zend_Search_Lucene_Index_Term('word2'), null);
- $query->addTerm(new Zend_Search_Lucene_Index_Term('word3'), false);
- $hits = $index->find($query);
- ?>]]></programlisting>
- <para>
- <code>$signs</code> array bevat informatie over het type term:
- <itemizedlist>
- <listitem>
- <para>
- true word gebruikt om een noodzakelijke term te definieren.
- </para>
- </listitem>
- <listitem>
- <para>
- false word gebruikt om een verboden term te definieren.
- </para>
- </listitem>
- <listitem>
- <para>
- null word gebruikt om geen noodzakelijk en geen verboden term te definieren.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- </sect2>
- <sect2 id="zend.search.lucene.queries.phrase-query">
- <title>Phrase Query</title>
- <para>
- Phrase Queries zijn bedoeld voor het zoeken op zinnen (uitdrukkingen?).
- </para>
- <para>
- Phrase Queries zijn erg flexibel en staan toe om te zoeken op zowel exacte als 'slordige' zinnen.
- Zinnen kunnen ook gaten of termen bevatten op bepaalde plaatsen. (Dit kan door de Analyser worden
- aangemaakt voor verschillende doeleinden. Voorbeeld: Een term kan gedupliceerd worden om een bepaalde
- term extra gewicht te geven of verschillende synoniemen kunnen op een plek worden geplaatst).
- De volgende phrase queries kunnen alleen door de API worden aangemaakt:
- </para>
- <programlisting role="php"><![CDATA[<?php
- $query1 = new Zend_Search_Lucene_Search_Query_Phrase();
- // Voeg 'word1' op relatieve positie 0 toe.
- $query1->addTerm(new Zend_Search_Lucene_Index_Term('word1'));
- // Voeg 'word2' op relatieve positie 1 toe.
- $query1->addTerm(new Zend_Search_Lucene_Index_Term('word2'));
- // Voeg 'word3' op relatieve positie 3 toe.
- $query1->addTerm(new Zend_Search_Lucene_Index_Term('word3'), 3);
- ...
- $query2 = new Zend_Search_Lucene_Search_Query_Phrase(
- array('word1', 'word2', 'word3'), array(0,1,3));
- ...
- // Query zonder gat.
- $query3 = new Zend_Search_Lucene_Search_Query_Phrase(
- array('word1', 'word2', 'word3'));
- ...
- $query4 = new Zend_Search_Lucene_Search_Query_Phrase(
- array('word1', 'word2'), array(0,1), 'annotation');
- ?>]]></programlisting>
- <para>
- Phrase query kunnen worden aangemaakt met een enkele stap in de klasse constructor of stap voor stap met de
- <code>Zend_Search_Lucene_Search_Query_Phrase::addTerm()</code> methode.
- </para>
- <para>
- Zend_Search_Lucene_Search_Query_Phrase klasse constructor accepteert drie optionele argumenten:
- </para>
- <programlisting role="php"><![CDATA[Zend_Search_Lucene_Search_Query_Phrase([array $terms[, array $offsets[, string $field]]]);]]></programlisting>
- <para>
- <code>$terms</code> is een array van strings, welke een set van zin termen bevat.
- Wanneer het niet wordt meegegeven of null is, wordt een lege query aangemaakt.
- </para>
- <para>
- <code>$offsets</code> is een array van integers, welke startpunten van termen in een zin bevatten.
- Wanneer het niet wordt meegegeven of null is, wordt uitgegaan van posities zoals <code>array(0, 1, 2, 3, ...)</code>.
- </para>
- <para>
- <code>$field</code> is een string, welke aangeeft welk document veld doorzocht moet worden.
- Wanneer het niet wordt meegegeven of null is, dan wordt het standaard veld doorzicht.
- Deze versie van Zend_Search_Lucene behandelt het 'contents' veld als standaard, maar het plan is dit aan
- te passen tot "ieder veld" in volgende versies.
- </para>
- <para>
- Dus:
- </para>
- <programlisting role="php"><![CDATA[$query = new Zend_Search_Lucene_Search_Query_Phrase(array('zend', 'framework'));]]></programlisting>
- <para>
- zoekt naar de 'zend framework' uitdrukking.
- </para>
- <programlisting role="php"><![CDATA[<$query = new Zend_Search_Lucene_Search_Query_Phrase(array('zend', 'download'), array(0, 2));]]></programlisting>
- <para>
- zoekt naar 'zend ????? download' en dus voldoet 'zend platform download', 'zend studio download',
- 'zend core download', 'zend framework download' hieraan.
- </para>
- <programlisting role="php"><![CDATA[$query = new Zend_Search_Lucene_Search_Query_Phrase(array('zend', 'framework'), null, 'title');]]></programlisting>
- <para>
- zoekt naar 'zend framework' in het 'title' veld.
- </para>
- <para>
- <code>Zend_Search_Lucene_Search_Query_Phrase::addTerm()</code> methode accepteert twee argumenten.
- Noodzakelijk <code>Zend_Search_Lucene_Index_Term</code> object en optioneel positie:
- </para>
- <programlisting role="php"><![CDATA[Zend_Search_Lucene_Search_Query_Phrase::addTerm(Zend_Search_Lucene_Index_Term $term[, integer $position]);]]></programlisting>
- <para>
- <code>$term</code> omschrijft de volgende term binnen de uitdrukking. Het moet hetzelfde veld als eerdere
- termen omschrijven.
- Anders wordt er een exceptie opgeworpen.
- </para>
- <para>
- <code>$position</code> geeft de positie van de term aan.
- </para>
- <para>
- Dus:
- </para>
- <programlisting role="php"><![CDATA[$query = new Zend_Search_Lucene_Search_Query_Phrase();
- $query->addTerm(new Zend_Search_Lucene_Index_Term('zend'));
- $query->addTerm(new Zend_Search_Lucene_Index_Term('framework'));]]></programlisting>
- <para>
- zoekt naar de 'zend framework' uitdrukking.
- </para>
- <programlisting role="php"><![CDATA[$query = new Zend_Search_Lucene_Search_Query_Phrase();
- $query->addTerm(new Zend_Search_Lucene_Index_Term('zend'), 0);
- $query->addTerm(new Zend_Search_Lucene_Index_Term('framework'), 2);]]></programlisting>
- <para>
- zoekt naar de 'zend ????? download' uitdrukking en dus zal 'zend platform download', 'zend studio download',
- 'zend core download', 'zend framework download' hieraan voldoen.
- </para>
- <programlisting role="php"><![CDATA[$query = new Zend_Search_Lucene_Search_Query_Phrase();
- $query->addTerm(new Zend_Search_Lucene_Index_Term('zend', 'title'));
- $query->addTerm(new Zend_Search_Lucene_Index_Term('framework', 'title'));]]></programlisting>
- <para>
- zoekt naar 'zend framework' in het 'title' veld.
- </para>
- <para>
- Slop factor zet het aantal woorden dat is toegestaan binnen een query uitdrukking. Wanneer deze nul is,
- wordt er op een exacte uitdrukking gezocht. Voor hogere waardes werkt het als een WITHIN of NEAR operator.
- </para>
- <para>
- De 'slop' is eigenlijk een editie-afstand, waar de eenheden overeenkomen met wijzigingen in de
- positie van termen in de query uitdrukking. Voorbeeld: om de volgorde van twee woorden aan te passen is
- twee wijzigingen (de eerste wijzigingen zet beide termen op dezelfde positie), om het herschikken
- van uitdrukkingen toe te staan dient 'slop' minstens twee te zijn.
- </para>
- <para>
- Exactere overeenkomsten krijgen een hogere score dan slordigere overeenkomsten, dus zoekresultaten worden
- geordend op exactheid. 'Slop' staat standaard op nul, waardoor exacte overeenkomsten noodzakelijk zijn.
- </para>
- <para>
- Slop factor kan na het aanmaken van een query worden aangegeven:
- </para>
- <programlisting role="php"><![CDATA[<?php
- // Query zonder een gat.
- $query = new Zend_Search_Lucene_Search_Query_Phrase(array('word1', 'word2'));
- // Zoek naar 'word1 word2', 'word1 ... word2'
- $query->setSlop(1);
- $hits1 = $index->find($query);
- // Zoek naar 'word1 word2', 'word1 ... word2',
- // 'word1 ... ... word2', 'word2 word1'
- $query->setSlop(2);
- $hits2 = $index->find($query);
- ?>]]></programlisting>
- </sect2>
- </sect1>
|