2011-05-23 5 views
11

Estoy trabajando en un proyecto en el que necesito implementar SphinxSearch con Cake php. Así que simplemente estoy tratando de usar un componente y comportamiento en él. El enlace a la misma, es: -Problema al implementar la API de Sphinx junto con Cake php

http://bakery.cakephp.org/articles/eugenioclrc/2010/07/10/sphinx-component-and-behavior

solicito Sphinx API, como a continuación:

$sphinx = array('matchMode' => SPH_MATCH_ALL, 'sortMode' => array(SPH_SORT_EXTENDED => '@relevance DESC')); 

$results = $this->ModelName->find('all', array('search' => 'Search_Query', 'sphinx' => $sphinx)); 

pr($result); 

Por encima de ella está trabajando muy bien, pero cuando traté de minimizar el tiempo de respuesta de la consulta a un campo particular de la tabla (utilizando modos de coincidencia ampliados, es decir, SPH_MATCH_EXTENDED2), Sphinx simplemente no genera ningún resultado. La consulta extendida que utilicé se da a continuación: -

$sphinx = array('matchMode' => SPH_MATCH_EXTENDED2, 'sortMode' => array(SPH_SORT_EXTENDED => '@relevance DESC')); 

$results = $this->ModelName->find('all', array('search' => '@Field_name Search_Query', 'sphinx' => $sphinx)); 

pr($results); 

¿Alguien puede reconocer dónde me estoy equivocando? Por favor ayuda si me estoy equivocando en algún lado.

Gracias de antemano.

Respuesta

1

Por cierto, cuando se utiliza el modo EXTENDED2, asegúrese de que su modo de rango esté configurado en consecuencia.

Edición:

De todos modos volver al problema que, mirando a ese código de componente/comportamiento se puede ver de inmediato que no hay comprobación de errores se realiza en absoluto. Intenta cambiar el código un poco para que puedas ver los errores y/o advertencias.

Componente

if(!isset($query['search'])){ 
    $result = self::$sphinx->Query('', $indexes);  
} else { 
    $result = self::$sphinx->Query($query['search'], $indexes); 
} 

if ($result === false) { 
    // throw new SphinxException(); 
    die(self::$sphinx->GetLastError()); 
} 
$warn = self::$sphinx->GetLastWarning(); 
if ($warn) echo $warn; 

Comportamiento

$result=$this->runtime[$model->alias]['sphinx']->search($s); 
if ($result === false) { 
    die($this->runtime[$model->alias]['sphinx']->GetLastError()); 
} 
$warn = $this->runtime[$model->alias]['sphinx']->GetLastWarning(); 
if ($warn) echo $warn; 

Espero que ayude.

+1

@Tralamazza: Amigo, no pondré los campos reales allí. Es solo para hacer que los expertos entiendan lo que estoy haciendo. Es parte de mi proyecto, así que no pondré el código actual aquí. –

+1

@Tralamazza: para que lo sepa, es un poco peligroso escribir * pregunta estúpida * en SO.Muy a menudo alguien parece malinterpretar y considerar que estás llamando estúpida a la pregunta original y obtendrás algunos votos a favor y/o banderas ofensivas. –

+0

@Tralamazza esto sería mejor servirlo como comentario. – JohnP

1

Como usted ha dicho,

Sphinx simplemente no muestra ningún resultado.

Eso significa que es un error:

Por favor, compruebe si ha añadido el campo específico de la indexación mediante el uso de sql_query

también revisará si el campo que está buscando no es un atributo
Según la documentación de la esfinge:

Los atributos, a diferencia de los campos, no están indizados a texto completo. Se almacenan en el índice, pero no es posible buscarlos como texto completo, e intentar hacerlo genera un error.

Cuestiones relacionadas