Création d'un fournisseur d'expressions personnalisé

Un fournisseur d'expressions implémente une logique métier personnalisée pour modifier l'expression de recherche principale avant qu'elle ne soit envoyée au moteur de recherche. Chaque fournisseur d'expressions peut être enregistré séparément dans n'importe quelle section de requête de profil de recherche afin de pouvoir être réutilisé pour d'autres opérations de recherche. Autrement dit, un profil de recherche définit une liste de fournisseurs de recherche utilisés pour assembler l'expression principale pour une requête de recherche.

Avant de commencer

  • Placez le code Java du pré-processeur et post-processeur du fournisseur d'expressions personnalisés de recherche et le code Java dans le répertoire workspace_dir\search-logic-ext.
  • Définissez le profil utilisé par votre fournisseur d'expressions personnalisés, votre pré-processeur ou votre post-processeur dans le fichier de configuration workspace_dir\search-config-ext\src\runtime\config\com.ibm.commerce.search\wc-search.xml.

Procédure

  1. Créez une classe qui s'étend à partir de com.ibm.commerce.search.internal.expression.provider.AbstractSearchExpressionProvider et implémente l'interface com.ibm.commerce.search.expression.provider.SearchExpressionProvider.
  2. Implémentez l'appel qui prend l'objet SearchCriteria comme paramètre d'entrée. Cet objet SearchCriteria est une représentation Java de l'expression de recherche, où chaque critère de recherche est stocké en tant qu'objet de paramètre de contrôle.
    Remarque : Vous devez d'abord appeler la méthode suivante pour initialiser sa classe abstraite :
    super.invoke(SearchCriteria);
    

    Les informations stockées dans ces objets sont traitées ultérieurement par SolrSearchExpressionProcessor et converties en expression Solr native pour être envoyées au serveur Solr.

    Pour obtenir une liste des paramètres de contrôle pris en charge, voir HCL Commerce Search Interface.

    La liste suivante affiche les méthodes auxiliaires :
    Extraction
    String term = getControlParameterValue(SearchServiceConstants.CTRL_PARAM_SEARCH_TERM);
    Stockage de en cours
    addControlParameterValue(
       SearchServiceConstants.CTRL_PARAM_SEARCH_INTERNAL_OPTIONAL_QUERY, searchExpression);
    

    Pour plus d'informations sur les fournisseurs d'expression par défaut, voir HCL Commerce Search fichier de configuration (wc-search.xml).

Exemple

Dans cet exemple, vous personnalisez le processus de tri de requête Solr. Dans un post-processeur personnalisé, vous ajoutez des données pour les réponses REST de recherche à partir d'une table de base de données. Ces données sont renvoyées dans les requêtes en plus de la réponse de requête Solr.

Téléchargez le fichier exemple pour les fichiers .XML et .SQL utilisés dans cet exemple.

SearchExpressionSample.

  1. Exécutez xgift.sql au niveau de votre base de données. Pour Db2, utilisez la commande suivante :
    
    CREATE TABLE
        XGIFT
        (
            CATENTRY_ID BIGINT NOT NULL,
            PART_NUMBER VARCHAR(256),
            ISGIFT SMALLINT,
            GIFTDESC VARCHAR(256),
            PRIMARY KEY (CATENTRY_ID)
        );
    INSERT INTO XGIFT VALUES(10001, 'AuroraWMDRS-1', 1, 'This is a test gift desc for AuroraWMDRS-1');
    INSERT INTO XGIFT VALUES(10002, 'AuroraWMDRS-2', 1, 'This is a test gift desc for AuroraWMDRS-2');
    Remarque : Modifiez les valeurs en gras pour vos propres valeurs cantentryID et partnumber.
    Pour les bases de données Oracle, utilisez la commande suivante.
    CREATE TABLE
        XGIFT
        (
            CATENTRY_ID NUMBER NOT NULL,
            PART_NUMBER VARCHAR(256),
            ISGIFT NUMBER(5),
            GIFTDESC VARCHAR(256),
            PRIMARY KEY (CATENTRY_ID)
        );
    INSERT INTO XGIFT VALUES(10001, 'AuroraWMDRS-1', 1, 'This is a test gift desc for AuroraWMDRS-1');
    INSERT INTO XGIFT VALUES(10002, 'AuroraWMDRS-2', 1, 'This is a test gift desc for AuroraWMDRS-2');
  2. Placez les objets CustomizedGiftPostprocessor.java et CustomizedExpressionProvider.java sous workspace_dir\search-logic-ext. CustomizedGiftPostprocessor.java extrait des données de la nouvelle table et compose une réponse de requête Solr pour formater la réponse REST de recherche. CustomizedExpressionProvider.java réécrit la requête Solr pour trier par prix dans l'ordre croissant.
  3. Ajoutez le code suivant dans votre fichier wc-search.xml sous workspace_dir\search-config-ext\src\runtime\config\com.ibm.commerce.search.
    <<<
        <_config:profile name="IBM_findProductsByCategory" indexName="CatalogEntry">   	
        	<_config:query> 
        	<_config:provider classname="com.mycompany.search.internal.expression.provider.CustomizedExpressionProvider"/> 
        	<_config:postprocessor classname="com.mycompany.search.internal.expression.postprocessor.CustomizedGiftPostprocessor" />  
            </_config:query>        
        </_config:profile>
        
        <_config:profile name="IBM_findProductByIds_Details" indexName="CatalogEntry"> 	
        	<_config:query> 
        	<_config:postprocessor classname="com.mycompany.search.internal.expression.postprocessor.CustomizedGiftPostprocessor" />  
            </_config:query>          
        </_config:profile>
    >>> 
    
  4. Créez votre projet et publiez les modifications sur le serveur.
  5. Redémarrez le serveur Recherche.
  6. Effectuez un appel REST pour vérifier la personnalisation de votre post-processeur.
    http://{searchhost}:{search-http-port}/search/resources/store/1/productview/byId/10001
    Assurez-vous que la réponse inclut isGift et giftDesc dans les zones de retour et que les valeurs correspondent aux valeurs de la table XGIFT.


Que faire ensuite

Pendant l'exécution, il est possible de capturer l'expression stockée dans cet objet SelectionCriteria et l'expression Solr finale envoyée au serveur Solr.

Pour obtenir des instructions sur la façon d'activer le suivi, voir Activation du traçage et de la journalisation pour HCL Commerce Search.

Activez le suivi, exécutez votre scénario et recherchez Final Solr query dans le fichier trace.log.