Utilisation du service GetSearchTermAssociation pour ignorer l'élargissement aux synonymes Solr dans la recherche HCL Commerce

Au lieu d'utiliser l'implémentation d'extension par défaut de Solr pour l'évaluation des termes synonymes et de remplacement, vous pouvez recourir au service GetSearchTermAssociation dans HCL Commerce. Par exemple, voici les étapes pour modifier la recherche de base dans le magasin type Madisons afin de recourir au service GetSearchTermAssociation, dans la recherche HCL Commerce, pour élargir la recherche aux synonymes, plutôt que d'utiliser l'implémentation d'élargissement aux synonymes Solr, SynonymFilterFactory.

Avant de commencer

Créez une classe de fournisseur d'expression de recherche Java qui élargit la recherche d'un terme à ses synonymes. L'exemple de code téléchargeable suivant (SolrSearchTermAssociationExpressionProvider.java) peut être utilisé comme référence :

Procédure

  1. Ouvrez HCL Commerce Developer et basculez vers la vue Explorateur d'entreprise.
  2. Créez un dossier pour votre fichier de configuration du composant de recherche HCL Commerce personnalisé :
    1. Accédez au chemin suivant :

      workspace_dir\WC\xml\config\

    2. Sous le dossier config, ajoutez un nouveau dossier com.ibm.commece.catalog-ext de sorte que son chemin d'accès soit similaire à ceci :

      workspace_dir\WC\xml\config\com.ibm.commece.catalog-ext\

      Si ce dossier existe déjà et qu'il contient une version personnalisée du fichier wc-search.xml, ouvrez ce fichier et passez à l'étape 6.

  3. Accédez au chemin suivant :

    workspace_dir\WC\xml\config\com.ibm.commerce.catalog-fep\

  4. Copiez le fichier wc-search.xml dans le nouveau dossier com.ibm.commece.catalog-ext que vous avez créé lors de la première étape.
  5. Ouvrez le fichier wc-search.xml copié dans un éditeur et supprimez tout, à l'exception des lignes suivantes, pour obtenir la version personnalisée du fichier wc-search.xml :
    
    <?xml version="1.0" encoding="UTF-8"?>
    
    <_config:search-config
    xmlns:_config="http://www.ibm.com/xmlns/prod/commerce/foundation/config"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com/xmlns/prod/commerce/foundation/config ../xsd/wc-search.xsd ">
    
    
    </_config:search-config> 
    
  6. Ajoutez les nouveaux profils suivants dans le fichier wc-search.xml personnalisé, dans l'élément <_config:search-config> :
    
    <_config:profile extends="IBM_findCatalogEntryByNameAndShortDescription" name="X_findCatalogEntryByNameAndShortDescription"  >
           <_config:query inherits="false">
                <_config:param name="maxRows" value="500"/>
                <_config:param name="maxTimeAllowed" value="3000"/>
                <_config:param name="debug" value="false"/>
                <_config:param name="preview" value="2"/>
                
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchProfileNameValidator"/>
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchIndexNameValidator"/>
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchIndexSynchronizer"/>
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchBasedMerchandisingExpressionProvider"/>
                
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchTermAssociationExpressionProvider"/>
                
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchByKeywordExpressionProvider"/>
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchByCategoryExpressionProvider"/>
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchByManufacturerExpressionProvider"/>
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchByPriceExpressionProvider"/>
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchByFacetExpressionProvider"/>
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchByStorePathExpressionProvider"/>
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchByCustomExpressionProvider"/>
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchFacetConditionExpressionProvider"/>
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchTypeExpressionProvider"/>
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchMetaTokenExpressionProvider"/>
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchProductEntitlementExpressionProvider"/>
                <_config:provider classname="com.ibm.commerce.catalog.facade.server.services.search.expression.solr.SolrSearchExpressionValidator"/>
                
                <_config:field name="name"/>
                <_config:field name="defaultSearch"/>
                <_config:field name="shortDescription"/>
                <_config:field name="unstructure"/>
            </_config:query>
      </_config:profile>
      
      <_config:profile extends="X_findCatalogEntryByNameAndShortDescription" name="X_findCatalogEntryByNameAndShortDescriptionInDetail"/>
    
  7. Enregistrez le fichier personnalisé et fermez-le.
  8. Pour utiliser les nouveaux profils dans le magasin type Madisons :
    1. Ouvrez le fichier suivant dans un éditeur :
      • WC_eardir\Stores.war\WebContent\Madisons\Snippets\Search\SearchSetup.jspf
    2. Remplacez le fragment de code suivant :
      
      <c:set var="searchProfile" value="IBM_findCatalogEntryByNameAndShortDescription" scope="request"/> 
      
      Avec ce fragment de code :
      
      <c:set var="searchProfile" value="X_findCatalogEntryByNameAndShortDescription" scope="request"/> 
      
    3. Remplacez le fragment de code suivant :
       
      <c:when test="${pageView == 'detailed' and searchProfile == 'IBM_findCatalogEntryByNameAndShortDescription'}">
      <c:set var="navigationView" value="getCatalogNavigationView" scope="request"/>
      <c:set var="searchProfile" value="IBM_findCatalogEntryByNameAndShortDescriptionInDetail" scope="request"/>
      </c:when> 
      
      Avec ce fragment de code :
      
      <c:when test="${pageView == 'detailed' and searchProfile == 'X_findCatalogEntryByNameAndShortDescription'}">
      <c:set var="navigationView" value="getCatalogNavigationView" scope="request"/>
      <c:set var="searchProfile" value="X_findCatalogEntryByNameAndShortDescriptionInDetail" scope="request"/>
      </c:when> 
      
    4. Enregistrez et fermez le fichier.
  9. L'exemple de fournisseur d'expression élargit uniquement la recherche aux synonymes. S'il est modifié pour gérer également des remplacements, le fichier Solr synonyms.txt n'est plus nécessaire. Dans ce cas, vous pouvez modifier la configuration du Management Center pour ne plus appeler le service PostSave PublishSearchTermAssociations. Pour ce faire, mettez en commentaire la section suivante dans WC_eardir\LOBTools.war\WebContent\config\commerce\catalog\objectDefinitions\SearchTermAssociationsPrimaryObjectDefinition.def comme indiqué ci-dessous :
    
    <!--
    <PostSaveService url="/cmc/PublishSearchTermAssociations">
    <ServiceParam name="storeId"/>
    </PostSaveService>
    --> 
    
  10. Mettez en commentaire le filtre SynonymFilterFactory pour toutes les zones de HCL Commerce définies dans schema.xml de chaque coeur. Par exemple, dans solrhome\MC_10101\en_US\CatalogEntry\conf\schema.xml, en gras:
    
    <fieldType name="wc_text" class="solr.TextField" positionIncrementGap="100">
          <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt" />
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
          </analyzer>
          <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <!-- <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> -->
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt" />
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
          </analyzer>
        </fieldType>
       
        <!-- Spell checking text field -->
        <fieldType name="wc_textSpell" class="solr.TextField" positionIncrementGap="100">
      		<analyzer type="index">
        		<tokenizer class="solr.StandardTokenizerFactory"/>
        		<filter class="solr.LowerCaseFilterFactory"/>
        		<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
        		<filter class="solr.StandardFilterFactory"/>
        		<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      		</analyzer>
      		<analyzer type="query">
        		<tokenizer class="solr.StandardTokenizerFactory"/>
        		<filter class="solr.LowerCaseFilterFactory"/>
        		<!-- <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> -->
        		<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
        		<filter class="solr.StandardFilterFactory"/>
        		<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      		</analyzer>
    </fieldType>