L'index étant désormais équipé d'embeddings ELSER, la fonction handle_search() dans app.py peut être modifiée pour rechercher ces embeddings. Pour l'instant, vous verrez comment effectuer une recherche uniquement à l'aide d'ELSER. Plus tard, les méthodes de recherche précédentes seront réintégrées pour créer une solution combinée.
Pour utiliser les inférences ELSER lors d'une recherche, le type de requête text_expansion est utilisé. Vous trouverez ci-dessous une fonction handle_search() mise à jour avec cette requête :
La requête text_expansion reçoit une clé contenant le nom du champ à rechercher. Sous cette clé, model_id configure le modèle à utiliser pour la recherche et model_text définit ce qu'il faut rechercher. Notez que dans ce cas, il n'est pas nécessaire de générer un embedding pour le texte de recherche, car Elasticsearch gère le modèle et peut s'en charger.
Dans la version ci-dessus de handle_search(), les filters n'ont pas été utilisés et les agrégations ont été omises. Ceux-ci peuvent être ajoutés de la même manière qu'ils ont été incorporés dans la solution de recherche en texte intégral. Vous trouverez ci-dessous une fonction handle_search() mise à jour qui déplace la requête text_expansion dans une section bool.must, avec des filtres inclus dans bool.filter et des agrégations ajoutées comme auparavant.
Prenez le temps d'expérimenter différentes recherches. Vous remarquerez que, comme pour les encastrements vectoriels denses, les recherches basées sur le modèle ELSER sont plus efficaces que les recherches en texte intégral lorsque les mots exacts n'apparaissent pas dans les documents indexés.
Précédemment
Modèle ELSERSuivant
Recherche hybride