HCL Commerce Search interactions
Architecture du serveur de recherche

- Le mappeur de service REST est une implémentation Jersey de JAX-RS 2.0 qui utilise des configurations pour mapper une URL REST à une ressource. Cette ressource appelle alors le temps d'exécution de la recherche intégrée.
- Le temps d'exécution de recherche est une structure de programmation enfichable qui permet d'exécuter des expressions de recherche à l'aide de propriétés définies dans un profil de recherche basé sur la configuration. Une fois qu'une expression de recherche est composée, l'exécution transmet ensuite la requête à l'exécution Solr intégrée pour traitement.
- Le service de base est le temps d'exécution HCL Commerce principal qui peut fournir des services de serveur de base, tels que le service Query JDBC pour accéder à la base de données HCL Commerce.
Exemple
<wcf:rest/>, génère l'appel sous forme de chaîne.<wcf:rest var="catalogNavigationView1" url="${searchHostNamePath}${searchContextPath}/store/${WCParam.storeId}/productview/${restType}">
L'appel REST est soumis au serveur de recherche et intercepté par le gestionnaire de requêtes spécifié dans l'appel (gestionnaire ProductView dans le scénario ci-dessus). Le gestionnaire de requêtes vérifie le fichier wc-rest-resourceconfig.xml pour confirmer que le profil transmis se trouve dans la liste des profils de recherche définis pour l'URI. Si le profil ne se trouve pas dans la liste définie pour l'URI, une erreur HTTP 400 sera générée. (&searchProfile=X, le gestionnaire de requêtes utilise le premier profil de recherche défini dans wc-rest-resourceconfig.xml. Par exemple, pour une requête productview/bySearchTerm, ce profil est IBM_findProductsBySearchTerm.<GetUri uri="store/{storeId}/productview/bySearchTerm/{searchTerm}"
description="Get products by search term based on below search profile."
searchProfile="IBM_findProductsBySearchTerm,IBM_findProductsByNameOnly,IBM_findProductsByNameAndShortDescriptionOnly,IBM_findProductsByUnstructureOnly,IBM_findProductsBySearchTerm_Summary"/>
@Path("store/{storeId}/productview")
@Description("This class provides RESTful services to get the ProductView details.")
@Encoded
public class ProductViewResource extends AbstractSearchResourceHandler {
store/{storeId}/productview/{partNumber} est mappée à la méthode suivante en gras : @GET
@Path(BY_PART_NUMBER)
@Produces({ APPLICATION_JSON })
@ApiOperation(value = "Gets products by part number.")
@ApiImplicitParams({
@ApiImplicitParam(name = PARAMETER_ASSOCIATION_TYPE, value = PARAMETER_ASSOCIATION_TYPE_DESCRIPTION, required = false, dataType = DATATYPE_STRING, paramType = PARAMETER_TYPE_QUERY),
@ApiImplicitParam(name = PARAMETER_ATTRIBUTE_KEYWORD, value = PARAMETER_ATTRIBUTE_KEYWORD_DESCRIPTION, required = false, dataType = DATATYPE_STRING, paramType = PARAMETER_TYPE_QUERY),
@ApiImplicitParam(name = PARAMETER_CATALOG_ID, value = PARAMETER_CATALOG_ID_DESCRIPTION, required = false, dataType = DATATYPE_STRING, paramType = PARAMETER_TYPE_QUERY),
@ApiImplicitParam(name = PARAMETER_CONTRACT_ID, value = PARAMETER_CONTRACT_ID_DESCRIPTION, required = false, dataType = DATATYPE_STRING, paramType = PARAMETER_TYPE_QUERY),
@ApiImplicitParam(name = PARAMETER_CURRENCY, value = PARAMETER_CURRENCY_DESCRIPTION, required = false, dataType = DATATYPE_STRING, paramType = PARAMETER_TYPE_QUERY),
@ApiImplicitParam(name = PARAMETER_LANG_ID, value = PARAMETER_LANG_ID_DESCRIPTION, required = false, dataType = DATATYPE_STRING, paramType = PARAMETER_TYPE_QUERY),
@ApiImplicitParam(name = PARAMETER_CHECK_ENTITLEMENT, value = PARAMETER_ENTITLEMENT_CHECK_DESCRIPTION, required = false, dataType = DATATYPE_BOOLEAN, paramType = PARAMETER_TYPE_QUERY),
@ApiImplicitParam(name = PARAMETER_ATTACHEMENT_FILTER, value = PARAMETER_ATTACHMENT_FILTER_DESCRIPTION, required = false, dataType = DATATYPE_STRING, paramType = PARAMETER_TYPE_QUERY),
@ApiImplicitParam(name = PARAMETER_PROFILE_NAME, value = PARAMETER_PROFILE_NAME_DESCRIPTION, required = false, dataType = DATATYPE_STRING, paramType = PARAMETER_TYPE_QUERY)})
@ApiResponses(value = {
@ApiResponse(code = 200, message = RESPONSE_200_DESCRIPTION),
@ApiResponse(code = 400, message = RESPONSE_400_DESCRIPTION),
@ApiResponse(code = 401, message = RESPONSE_401_DESCRIPTION),
@ApiResponse(code = 403, message = RESPONSE_403_DESCRIPTION),
@ApiResponse(code = 404, message = RESPONSE_404_DESCRIPTION),
@ApiResponse(code = 500, message = RESPONSE_500_DESCRIPTION) })
public Response findProductByPartNumber(
@ApiParam(value = "The product part number.", required = true) @PathParam(PART_NUMBER) String partNumber) {La ressource appelle ensuite le code d'exécution de la recherche intégrée, qui appelle le fichier wc-search.xml en utilisant les noms de profil de recherche pour rechercher le fournisseur et les pré-processeurs à appeler. Cette méthode est similaire à une chaîne de montage d'usine, où chaque composant de l'entreprise peut apporter sa propre partie de l'expression de recherche dans la requête principale. Une fois que le temps d'exécution de recherche construit la requête Solr finale, il appelle Solr et traite la sortie à l'aide de post-processeurs définis dans le profil de recherche. Ensuite, le gestionnaire REST produit la réponse.
L'expression de recherche est représentée par l'objet SearchCriteria, qui contient un ensemble de paramètres de contrôle sous forme de mappes de paramètres de nom-valeur.
SolrSearchEDi > com.ibm.commerce.foundation.internal.server.services.search.query.solr.SolrSearchEDismaxQueryPreProcessor
invoke(SelectionCriteria, Object) ENTRY Search profile: 'IBM_findProductsBySearchTerm', Control parameters:
'_wcf.search.exclude.type=[],' 'DynamicKitReturnPrice=[true],' '_wcf.search.currency=[USD],' '_wcf.search.manufacturer=[],
' '_wcf.search.runAsId=[-1002],' '_wcf.search.contract=[10001],' '_wcf.search.catalog=[10052],''_wcf.search.catalog=[10052],
''_wcf.search.catalog=[10052],' '_wcf.search.internal.response.format=[json],'Une fois qu'une expression de recherche est composée, l'exécution transmet la requête au temps d'exécution Solr intégré pour traitement.
S'il y a des paramètres que vous souhaitez transmettre à partir de la vitrine, mais que vous ne souhaitez pas les spécifier dans la méthode findProductByPartNumber par exemple, vous pouvez les ajouter au mappeur de paramètres de contrôle dans le fichier wc-component.xml. Ce fichier mappe la paire nom-valeur dans le paramètre de contrôle de l'objet SearchCriteria.
Modèle de programmation de recherche
Cette méthode est similaire à une chaîne de montage d'usine, où chaque composant de l'entreprise peut apporter sa propre partie de l'expression de recherche dans la requête principale, qui est ensuite exécutée au niveau du moteur de recherche Solr.

- Fournisseurs d'expressions de recherche
- Selon la nature de la requête, c'est-à-dire du profil de recherche, d'autres composants commerciaux peuvent être impliqués, tels que le marketing pour les règles de marchandisage basées sur la recherche ou les contrats d'autorisation. Chaque composant métier est responsable de la contribution d'une partie de l'expression de recherche, qui est combinée avec l'expression de recherche principale générée par les services REST de recherche.
- Processeur d'expressions de recherche
- Un processeur de recherche est l'unité de traitement centrale pour l'intégration au moteur de recherche. Sa responsabilité est d'exécuter l'expression Solr, basée sur les attributs du profil de recherche, et de capturer la réponse à partir du moteur de recherche.
Un pré-processeur de requêtes est utilisé pour modifier l'objet SolrQuery juste avant qu'il ne soit envoyé au serveur Solr pour traitement.
Un post-processeur de requêtes est utilisé pour modifier l'objet QueryResponse qui est renvoyé à partir du serveur Solr.