TigerZF
🌐Español

10.5. Búsqueda

La búsqueda se realiza usando el método find():

Ejemplo 10.6. Búsqueda a través del índice

$hits = $index->find($query);

foreach ($hits as $hit) {
    printf("%d %f %s\n", $hit->id, $hit->score, $hit->title);
}

Este ejemplo demuestra el uso de dos propiedades especiales de los resultados de búsqueda - id y score.

id es un identificador interno de documento usado dentro de un índice Lucene. Puede usarse para una variedad de operaciones, incluyendo eliminar un documento del índice:

Ejemplo 10.7. Eliminación de un documento indexado

$index->delete($id);

O recuperar el documento del índice:

Ejemplo 10.8. Recuperación de un documento indexado

$doc = $index->getDocument($id);

[Note] Identificadores internos de documento

¡Nota importante! Los identificadores internos de documento pueden cambiar por la optimización del índice o el proceso de auto-optimización, pero nunca cambian durante la ejecución de un único script a menos que se llame a los métodos addDocument() (que puede implicar un procedimiento de auto-optimización) u optimize().

El campo score es la puntuación del resultado. Los resultados de búsqueda se ordenan por puntuación de forma predeterminada (los mejores resultados se devuelven primero).

También es posible ordenar los conjuntos de resultados por valores de campos específicos. Consulte la documentación de Zend_Search_Lucene para más detalles sobre esta posibilidad.

El ejemplo también demuestra la capacidad de acceder a los campos almacenados (por ejemplo, $hit->title). En el primer acceso a cualquier propiedad de un resultado que no sea id o score, se cargan los campos almacenados del documento, y se devuelve el valor del campo correspondiente.

Esto causa una ambigüedad para documentos que tienen sus propios campos id o score; como resultado, no se recomienda usar estos nombres de campo dentro de los documentos almacenados. No obstante, aún pueden accederse mediante el método getDocument():

Ejemplo 10.9. Acceso a los campos originales "id" y "score" del documento

$id    = $hit->getDocument()->id;
$score = $hit->getDocument()->score;