Zend_Search_Lucene-Queries.xml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. <sect1 id="zend.search.lucene.queries">
  2. <title>Tipos de Consulta</title>
  3. <sect2 id="zend.search.lucene.queries.term-query">
  4. <title>Consulta a termo simples</title>
  5. <para>São indicadas para pesquisa de termos isolados.</para>
  6. <para>Ambos os métodos de pesquisa podem ser usados para consultas de
  7. termo simples.</para>
  8. <para>String de busca: <programlisting role="php">
  9. $hits = $index-&gt;find('word1');
  10. </programlisting></para>
  11. <para>ou</para>
  12. <para>Construção da pesquisa via API: <programlisting role="php">&lt;?php
  13. $term = new Zend_Search_Lucene_Index_Term('word1');
  14. $query = new Zend_Search_Lucene_Search_Query_Term($term);
  15. $hits = $index-&gt;find($query);
  16. ?&gt;</programlisting></para>
  17. </sect2>
  18. <sect2 id="zend.search.lucene.queries.multiterm-query">
  19. <title>Consulta a múltiplos termos</title>
  20. <para>São indicadas para pesquisas em um conjunto de termos.</para>
  21. <para>Para cada termo pesquisado, podemos especificar o comportamento da
  22. busca. <itemizedlist>
  23. <listitem>
  24. <para>Termos necessários - Exibe apenas os documentos que contém o
  25. termo;</para>
  26. </listitem>
  27. <listitem>
  28. <para>Termos proibidos - Exibe os documentos que não contém o
  29. termo;</para>
  30. </listitem>
  31. <listitem>
  32. <para>Termos "neither" - Exibe os documentos contenham os termos
  33. necessários mas não contenham os proibidos. De qualquer forma, o
  34. documento pesquisado deve conter pelo menos um termo que coincida
  35. com a string de busca.</para>
  36. </listitem>
  37. </itemizedlist></para>
  38. <para>Isso implica que, se termos opcionais forem acrescentados à consulta
  39. com termos obrigatórios, eles irão produzir um mesmo conjuntoi de
  40. resultados, mas a segunda consulta irá acrescentar uma pontuação de acerto
  41. ("hits") para cada termo opcional, movendo-os para o topo do
  42. resultado.</para>
  43. <para>Ambos os métodos de busca podem ser usados para consultas a termos
  44. múltiplos.</para>
  45. <para>String de busca: <programlisting role="php">&lt;?php
  46. $hits = $index-&gt;find('+word1 author:word2 -word3');
  47. ?&gt;</programlisting> <itemizedlist>
  48. <listitem>
  49. <para>
  50. '+' especifica um termo obrigatório.
  51. </para>
  52. </listitem>
  53. <listitem>
  54. <para>
  55. '-' especifica um termo rejeitado.
  56. </para>
  57. </listitem>
  58. <listitem>
  59. <para>
  60. 'campo:' especifica um campo específico para busca. Se for omitido a pesquisa utilizará o campo de conteúdo.
  61. </para>
  62. </listitem>
  63. </itemizedlist></para>
  64. <para>or</para>
  65. <para>Construção da pesquisa via API: <programlisting role="php">&lt;?php
  66. $query = new Zend_Search_Lucene_Search_Query_MultiTerm();
  67. $query-&gt;addTerm(new Zend_Search_Lucene_Index_Term('word1'), true);
  68. $query-&gt;addTerm(new Zend_Search_Lucene_Index_Term('word2'), null);
  69. $query-&gt;addTerm(new Zend_Search_Lucene_Index_Term('word3'), false);
  70. $hits = $index-&gt;find($query);
  71. ?&gt;</programlisting></para>
  72. <para>O array <code>$signs</code> pode conter informações sobre o tipo de
  73. termo pesquisado: <itemizedlist>
  74. <listitem>
  75. <para>
  76. true define um termo como necessário.
  77. </para>
  78. </listitem>
  79. <listitem>
  80. <para>
  81. false define um termo como proibido.
  82. </para>
  83. </listitem>
  84. <listitem>
  85. <para>
  86. null define to define neither required, nor prohibited term.
  87. </para>
  88. </listitem>
  89. </itemizedlist></para>
  90. </sect2>
  91. <sect2 id="zend.search.lucene.queries.phrase-query">
  92. <title>Consulta por Frase</title>
  93. <para>São indicadas para pequisas em frases.</para>
  94. <para>Phrase Queries are very flexible and allow to search exact phrases
  95. as well as sloppy phrases. Exact phrases can also contain gaps or terms in
  96. the same places. (It can be generated by Analyser for different purposes.
  97. Ex. term can be duplicated to increase term weight or several synonyms can
  98. be placed into one position). According to this phrase queries can be
  99. constructed only by API now:</para>
  100. <para>Consultas por frase são muito flexíveis e permitem tanto a busca
  101. pela frase exata quanto a por fragmentos da frase. </para>
  102. <programlisting role="php">&lt;?php
  103. $query1 = new Zend_Search_Lucene_Search_Query_Phrase();
  104. // Add 'word1' at 0 relative position.
  105. $query1-&gt;addTerm(new Zend_Search_Lucene_Index_Term('word1'));
  106. // Add 'word2' at 1 relative position.
  107. $query1-&gt;addTerm(new Zend_Search_Lucene_Index_Term('word2'));
  108. // Add 'word3' at 3 relative position.
  109. $query1-&gt;addTerm(new Zend_Search_Lucene_Index_Term('word3'), 3);
  110. ...
  111. $query2 = new Zend_Search_Lucene_Search_Query_Phrase(
  112. array('word1', 'word2', 'word3'), array(0,1,3));
  113. ...
  114. // Query without a gap.
  115. $query3 = new Zend_Search_Lucene_Search_Query_Phrase(
  116. array('word1', 'word2', 'word3'));
  117. ...
  118. $query4 = new Zend_Search_Lucene_Search_Query_Phrase(
  119. array('word1', 'word2'), array(0,1), 'annotation');
  120. ?&gt;</programlisting>
  121. <para>A pesquisa por frase pode ser construida de uma única vez com um
  122. construtor de classe ou passo a passo com o método
  123. <code>Zend_Search_Lucene_Search_Query_Phrase::addTerm()</code>.</para>
  124. <para>Zend_Search_Lucene_Search_Query_Phrase::addTerm()</para>
  125. <para>O construtor da classe Zend_Search_Lucene_Search_Query_Phrase aceita
  126. três argumentos opcionais: <programlisting role="php">Zend_Search_Lucene_Search_Query_Phrase([array $terms[, array $offsets[, string $field]]]);</programlisting></para>
  127. <para><code>$terms</code> é um array de strings, contendo um conjunto de
  128. termos de frase. Se omitido ou igualado a um valor nulo, resulta na
  129. construção de um objeto consulta vazio.</para>
  130. <para><code>$offsets</code> é um array de inteiros, contendo deslocamentos
  131. de termos em uma frase. Se omitido ou igualado a um valor nulo fará com
  132. que as posições dos termos no array fiquem na forma <code>array(0, 1, 2,
  133. 3, ...)</code>.</para>
  134. <para><code>$field</code> é uma string, que indica o campo do documento
  135. que será pesquisado. Se for omitido ou igualado a um valor nulo,
  136. restringirá a pesquisa ao campo "default". Esta versão do
  137. Zend_Search_Lucene trata os campos 'contents' como defaults, mas
  138. planejamos alterar este comportamento em versões futuras para considerar
  139. qualquer campo.</para>
  140. <para>Dess modo: <programlisting role="php">$query = new Zend_Search_Lucene_Search_Query_Phrase(array('zend', 'framework'));</programlisting>
  141. irá pesquisar pela frase "zend framework". <programlisting role="php">&lt;$query = new Zend_Search_Lucene_Search_Query_Phrase(array('zend', 'download'), array(0, 2));</programlisting>
  142. irá pesquisar pela frase 'zend ????? download' e retornar 'zend platform
  143. download', 'zend studio download', 'zend core download', 'zend framework
  144. download' e por aí vai. <programlisting role="php">$query = new Zend_Search_Lucene_Search_Query_Phrase(array('zend', 'framework'), null, 'title');</programlisting>
  145. irá pesquisar pela frase 'zend framework' em um campo 'title'.</para>
  146. <para><code>Zend_Search_Lucene_Search_Query_Phrase::addTerm()</code>
  147. possui dois argumentos. O objeto
  148. <code>Zend_Search_Lucene_Index_Term</code> é requerido mas a posição é
  149. opcional: <programlisting role="php">Zend_Search_Lucene_Search_Query_Phrase::addTerm(Zend_Search_Lucene_Index_Term $term[, integer $position]);</programlisting></para>
  150. <para><code>$term</code> descreve o próximo termo na frase. Ele deve
  151. indicar o mesmo campo que os termos anteriores, senão, uma irá disparar
  152. uma exceção.</para>
  153. <para><code>$position</code> indica a posição do termo.</para>
  154. <para>Desse modo: <programlisting role="php">$query = new Zend_Search_Lucene_Search_Query_Phrase();
  155. $query-&gt;addTerm(new Zend_Search_Lucene_Index_Term('zend'));
  156. $query-&gt;addTerm(new Zend_Search_Lucene_Index_Term('framework'));</programlisting>
  157. irá pesquisar pela frase 'zend framework'. <programlisting role="php">$query = new Zend_Search_Lucene_Search_Query_Phrase();
  158. $query-&gt;addTerm(new Zend_Search_Lucene_Index_Term('zend'), 0);
  159. $query-&gt;addTerm(new Zend_Search_Lucene_Index_Term('framework'), 2);</programlisting>
  160. irá pesquisar pela frase 'zend ????? download' e retornar 'zend platform
  161. download', 'zend studio download', 'zend core download', 'zend framework
  162. download' e por aí vai. <programlisting role="php">$query = new Zend_Search_Lucene_Search_Query_Phrase();
  163. $query-&gt;addTerm(new Zend_Search_Lucene_Index_Term('zend', 'title'));
  164. $query-&gt;addTerm(new Zend_Search_Lucene_Index_Term('framework', 'title'));</programlisting>
  165. irá pesquisar pela frase 'zend framework' em um campo 'title'.</para>
  166. <para>O fator de aproximação ("Sloop factor") determina o número de
  167. palavras permitidas entre as palavras da frase pesquisada. Se for zero,
  168. então a busca será pela frase exata. Para valores maiores ele funciona bem
  169. com os operadores WITHIN ou NEAR. </para>
  170. <para>Ele é de fato uma medida de distância, onde as unidades correspondem
  171. aos deslocamentos dos termos na frase consultada. Por exemplo, para
  172. alterar a ordem de duas palavras são necessários dois movimentos (o
  173. primeiro move uma palavra para a frente da outra), então para permitir a
  174. reordenação de uma frase, o fator deve ser de pelo menos duas
  175. unidades.</para>
  176. <para>More exact matches are scored higher than sloppier matches, thus
  177. search results are sorted by exactness. The slop is zero by default,
  178. requiring exact matches.</para>
  179. <para>Comparações mais exatas exatas possuem pontuações mais altas que o
  180. fator de aproximação, dessa forma os resultados são ordenados por
  181. exatidão. O fator de aproximação será zero por padrão, determinando
  182. comparações exatas.</para>
  183. <para>O fator de aproximação pode ser estabelecido após a criação da
  184. consulta:</para>
  185. <programlisting role="php">&lt;?php
  186. // Query without a gap.
  187. $query = new Zend_Search_Lucene_Search_Query_Phrase(array('word1', 'word2'));
  188. // Search for 'word1 word2', 'word1 ... word2'
  189. $query-&gt;setSlop(1);
  190. $hits1 = $index-&gt;find($query);
  191. // Search for 'word1 word2', 'word1 ... word2',
  192. // 'word1 ... ... word2', 'word2 word1'
  193. $query-&gt;setSlop(2);
  194. $hits2 = $index-&gt;find($query);
  195. ?&gt;</programlisting>
  196. </sect2>
  197. </sect1>
  198. <!--
  199. vim:se ts=4 sw=4 et:
  200. -->