Extension du service Query
Le service Query génère les expressions de recherche, puis transmet l'expression à Elasticsearch. Vous pouvez personnaliser ce service pour créer vos propres fournisseurs d'expressions, préprocesseurs, postprocesseurss et gestionnaires personnalisés en fonction de vos besoins métier. Il n'y a pas de connectivité JDBC entre le service Query et la base de données Commerce. Cette architecture garantit que l'application peut être sans état et mise à l'échelle indépendamment. Les données métier peuvent toujours être fournies au service Query via l'indexation ou via d'autres microservices.
Before you begin
Plusieurs nouvelles classes d'aide ont été ajoutées au fichier query-api.jar. Ces ajouts facilitent l'utilisation des fonctions communes définies dans les classes par défaut et sont répertoriés dans Classes de requête dans le fichier query-api.jar pour plus de commodité.
About this task
Procedure
- Le query-api.jar est fourni en tant que groupement Git, HCL_Commerce_Search_Bundle_9.1.x.x.zip. Pour obtenir la dernière version de query-api.jar, consultez la liste des derniers packages de téléchargement disponibles pour vous assurer que vous obtenez la version la plus récente.
- Ouvrez un navigateur Web et connectez-vous au site HCL Software License & Delivery pour télécharger et extraire la dernière version du groupement HCL Commerce Search afin d'obtenir le fichier HCL_Commerce_Search_Bundle_9.1.x.x.zip.
-
Créez un projet Gradle. Extrayez la version du fichier query-api-9.1.x.x.jar du groupement de recherche dans un répertoire /lib à la racine du projet, même si le numéro de version est inférieur à votre version actuelle de HCL Commerce Search.
Note: Si l'API QUERY n'a pas changé, ce fichier n'est pas régénéré. Par conséquent, la dernière version disponible peut être antérieure à votre dernière installation, par exemple, la 9.1.11 lorsque vous êtes sous la 9.1.12. Ceci est normal.Créez le répertoire /lib s'il n'existe pas.
-
Ajoutez les dépendances suivantes au fichier build.gradle :
Remplacezimplementation 'org.elasticsearch:elasticsearch:7.9.3' implementation 'org.springframework.boot:spring-boot-starter-web:2.2.4.RELEASE' implementation 'org.springframework:spring-web:5.2.5.RELEASE' implementation 'org.springframework.boot:spring-boot-starter-validation:2.2.5.RELEASE' implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.12.0' implementation 'org.elasticsearch:elasticsearch:7.12.0' implementation ('org.elasticsearch.client:elasticsearch-rest-client:7.12.0') { exclude module: 'snakeyaml:1.23' } implementation files('lib/query-api-9.1.x.x.jar')9.1.x.xpar la version correcte du fichier JAR téléchargé. -
Pour créer les gestionnaires personnalisés :
-
Pour ajouter des fournisseurs d'expressions personnalisés :
Les fournisseurs d'expressions sont les classes Java qui prennent SearchCriteria comme paramètre. SearchCriteria est un objet Java qui encapsule les attributs de critères envoyés par la vitrine et certains attributs internes requis pour générer
SearchSourceBuilderd'Elasticsearch. SearchCriteria est la version Java de l'expression de recherche. Les fournisseurs lisent et traitent les attributs de critères à partir de celui-ci et ajoutent certains attributs internes qui sont ensuite utilisés par les préprocesseurs. -
Pour ajouter un préprocesseur personnalisé :
Les préprocesseurs d'expression sont les classes Java qui prennent SearchCriteria et queryRequestObjects comme paramètres.
queryRequestObjectsest un type d'objet java varargs (Arguments variables) qui contient des profils de recherche et une instanceSearchSourceBuildervide. L'instanceSearchSourceBuilderest l'objet binaire natif à utiliser par rapport au moteur de recherche (Elasticsearch). La principale responsabilité du préprocesseur est de préparer l'objetSearchSourceBuilderqui peut être utilisé pour interroger l'index Elasticsearch. -
Pour ajouter un postprocesseurs personnalisé :
Les postprocesseurss d'expression sont les classes Java qui prennent SearchCriteria et queryResponseObjects comme paramètres.
queryResponseObjectsest un type d'objet java varargs (Arguments variables) qui contient un objet de type de donnéesSearchResponse.SearchResponseest un objet de réponse natif qui représente la réponse de recherche d'Elasticsearch. La responsabilité principale du postprocesseurs est de traiter les résultats renvoyés par Elasticsearch et de les transformer au format requis par la vitrine. -
Créez le projet à la racine du projet à l'aide de la commande gradlew build. Les fichiers JAR créés se trouvent dans le répertoire /build/libs, sous la racine du projet. Copiez les nouveaux fichiers JAR dans le répertoire d'extension désigné (/opt/WebSphere/Liberty/usr/servers/default/apps/search-query.ear/search-query.war/WEB-INF/lib) sur votre machine hôte. Ce répertoire est monté en tant que volume sur votre conteneur Docker de service Query.
Note:
- Reportez-vous à la commande suivante comme exemple permettant de fournir l'extension jar en tant que montage de volume sur le conteneur Docker du service de requête :
docker run -it -p 3737:3737 --name query-service -v /home/qsuser/ext/extension.jar:/opt/WebSphere/Liberty/usr/servers/default/apps/search-query.ear/search-query.war/WEB-INF/lib/extension.jar - Bien que l'étape susmentionnée suggère d'utiliser des montages externes pour stocker vos personnalisations, il s'agit uniquement d'une procédure recommandée dans une environnement de développement agile où des modifications fréquentes du code sont apportées et sont testées de nombreuses fois. Toutefois, lorsqu'il arrive dans des environnements de déploiement plus élevés tels que l'assurance qualité et les environnements de production, il est recommandé d'avoir ces personnalisations intégrées dans l'image de l'application par le biais d'un pipeline CI/CD par souci de cohérence et de facilité de déploiement.
- Reportez-vous à la commande suivante comme exemple permettant de fournir l'extension jar en tant que montage de volume sur le conteneur Docker du service de requête :
- Redémarrez le conteneur query-service pour que le changement soit appliqué.