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
Procédure
- Ouvrez HCL Commerce Developer et basculez vers la vue Explorateur d'entreprise.
-
Créez un dossier pour votre fichier de configuration du composant de recherche HCL Commerce personnalisé :
-
Accédez au chemin suivant :
workspace_dir\WC\xml\config\com.ibm.commerce.catalog-fep\
- 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.
-
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> -
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"/> - Enregistrez le fichier personnalisé et fermez-le.
-
Pour utiliser les nouveaux profils dans le magasin type Madisons :
-
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> --> -
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>