Con el índice ahora equipado con incrustaciones ELSER, la función handle_search() en app.py puede cambiar para buscar estas incrustaciones. Por ahora, verás cómo buscar solo a través de ELSER; más adelante, los métodos de búsqueda anteriores se reincorporarán para crear una solución combinada.
Para usar inferencias ELSER durante la búsqueda, se emplea el tipo de consulta text_expansion . A continuación puedes ver una función de handle_search() actualizada con esta consulta:
La consulta text_expansion recibe una clave con el nombre del campo a buscar. Bajo esta clave, model_id configura qué modelo usar en la búsqueda y model_text define qué buscar. Fíjate en que en este caso no es necesario generar una incrustación para el texto de búsqueda, ya que Elasticsearch gestiona el modelo y puede encargar de ello.
En la versión anterior de handle_search() las filters quedaron sin usar y se omitieron las agregaciones. Estos pueden agregar de nuevo de la misma manera que se incorporaron a la solución de búsqueda de texto completo. A continuación se muestra una función de handle_search() actualizada que mueve la consulta de text_expansion dentro de una sección bool.must , con filtros incluidos en bool.filter y agregaciones agregadas como antes.
Dedica un tiempo a experimentar con diferentes búsquedas. Verás que, al igual que con las incrustaciones vectoriales densas, las búsquedas impulsadas por el modelo ELSER funcionan mejor que la búsqueda en texto completo cuando las palabras exactas no aparecen en los documentos indexados.
Previamente
Modelo ELSERPróximo
Búsqueda híbrida