Rendre l'expansion des associations de termes de recherche sensibles aux cas

Par défaut, l'expansion Association de termes de recherche n'est pas sensible à la casse. Vous pouvez rendre l'expansion sensible à la casse en ajoutant une colonne à la table SRCHTERM et en modifiant un attribut dans le fichier schema.xml Solr de chaque noyau.

Pourquoi et quand exécuter cette tâche

La requête DSL /SearchTermAssociation[AssociationType= and (SearchTerms=)]+IBM_Admin_Summary, définie dans wc-query-SearchTermAssociation-get.tpl, est utilisée lorsque les services marketing obtiennent les synonymes d'un terme de recherche. Elle est également utilisée lorsque la commande SearchDisplay détermine si une page d'accueil correspond à un terme de recherche. Cette requête par défaut n'est pas sensible à la casse. Il est recommandé d'ajouter une colonne UPPERCASE générée à la table SRCHTERM pour correspondre à la colonne TERM. Cela améliore les performances de la requête d'association de termes de recherche dans WebSphere Commerce.

Procédure

  1. Assurez-vous que vous disposez d'un fichier de configuration de composant de catalogue personnalisé (wc-component.xml). Pour créer ce fichier, suivez les étapes du sujet Modification des propriétés dans le fichier de configuration du HCL Commerce (wc-component.xml).
  2. Assurez-vous que vous disposez d'un répertoire d'extension de recherche personnalisé (com.ibm.commerce.search-ext).

    Ensuite, copiez le fichier wc-query-SearchTermAssociation-get.tpl depuis le répertoire com.ibm.commerce.search vers le répertoire com.ibm.commerce.search-ext.

  3. Dans le fichier com.ibm.commerce.search-ext/wc-query-SearchTermAssociation-get.tpl, localisez le fragment :
    
    BEGIN_XPATH_TO_SQL_STATEMENT
            name=/SearchTermAssociation[AssociationType= and (SearchTerms=)]+IBM_Admin_Summary
            base_table=SRCHTERMASSOC
            className=com.ibm.commerce.search.facade.server.services.dataaccess.db.jdbc.SearchTermAssociationSQLComposer
            dbtype=db2
            sql=
                 SELECT
                    SRCHTERMASSOC.$COLS:SRCHTERMASSOC$,
                SRCHTERM.$COLS:SRCHTERM$
                 FROM
                    SRCHTERMASSOC LEFT OUTER JOIN SRCHTERM ON SRCHTERM.SRCHTERMASSOC_ID = SRCHTERMASSOC.SRCHTERMASSOC_ID
                 WHERE
                    SRCHTERMASSOC.STOREENT_ID in ($STOREPATH:catalog$)AND
                    SRCHTERMASSOC.LANGUAGE_ID in ($CONTROL:LANGUAGES$) AND
                    SRCHTERMASSOC.ASSOCIATIONTYPE = ?AssociationType? AND
                    EXISTS (SELECT
                                            1
                                    FROM
                                            SRCHTERM SRCHTERM2
                                    WHERE
                                            SRCHTERM2.SRCHTERMASSOC_ID = SRCHTERMASSOC.SRCHTERMASSOC_ID AND
                                            UPPER(SRCHTERM2.TERM) = UPPER(CAST(?SearchTerms? AS VARCHAR(254))) AND
                                            SRCHTERM2.TYPE = 1
                               )
            dbtype=any
            sql=
                 SELECT
                    SRCHTERMASSOC.$COLS:SRCHTERMASSOC$,
                SRCHTERM.$COLS:SRCHTERM$
                 FROM
                    SRCHTERMASSOC LEFT OUTER JOIN SRCHTERM ON SRCHTERM.SRCHTERMASSOC_ID = SRCHTERMASSOC.SRCHTERMASSOC_ID
                 WHERE
                    SRCHTERMASSOC.STOREENT_ID in ($STOREPATH:catalog$)AND
                    SRCHTERMASSOC.LANGUAGE_ID in ($CONTROL:LANGUAGES$) AND
                    SRCHTERMASSOC.ASSOCIATIONTYPE = ?AssociationType? AND
                    EXISTS (SELECT
                                            1
                                    FROM
                                            SRCHTERM SRCHTERM2
                                    WHERE
                                            SRCHTERM2.SRCHTERMASSOC_ID = SRCHTERMASSOC.SRCHTERMASSOC_ID AND
                                            UPPER(SRCHTERM2.TERM) = UPPER(?SearchTerms?) AND
                                            SRCHTERM2.TYPE = 1
                               )
    END_XPATH_TO_SQL_STATEMENT
    
    Remplacez-le par le fragment suivant, qui supprime l'utilisation de UPPER :
    
    BEGIN_XPATH_TO_SQL_STATEMENT
            name=/SearchTermAssociation[(AssociationType=) and (SearchTerms=)]+IBM_Admin_Summary
            base_table=SRCHTERMASSOC
            className=com.ibm.commerce.search.facade.server.services.dataaccess.db.jdbc.SearchTermAssociationSQLComposer
            dbtype=db2
            sql=
                 SELECT
                    SRCHTERMASSOC.$COLS:SRCHTERMASSOC$,
                SRCHTERM.$COLS:SRCHTERM$
                 FROM
                    SRCHTERMASSOC LEFT OUTER JOIN SRCHTERM ON SRCHTERM.SRCHTERMASSOC_ID = SRCHTERMASSOC.SRCHTERMASSOC_ID
                 WHERE
                    SRCHTERMASSOC.STOREENT_ID in ($STOREPATH:catalog$)AND
                    SRCHTERMASSOC.LANGUAGE_ID in ($CONTROL:LANGUAGES$) AND
                    SRCHTERMASSOC.ASSOCIATIONTYPE in (?AssociationType?) AND
                    EXISTS (SELECT
                                            1
                                    FROM
                                            SRCHTERM SRCHTERM2
                                    WHERE
                                            SRCHTERM2.SRCHTERMASSOC_ID = SRCHTERMASSOC.SRCHTERMASSOC_ID AND
                                            SRCHTERM2.TERM = CAST(?SearchTerms? AS VARCHAR(254)) AND
                                            SRCHTERM2.TYPE = 1
                               )
            dbtype=any
            sql=
                 SELECT
                    SRCHTERMASSOC.$COLS:SRCHTERMASSOC$,
                SRCHTERM.$COLS:SRCHTERM$
                 FROM
                    SRCHTERMASSOC LEFT OUTER JOIN SRCHTERM ON SRCHTERM.SRCHTERMASSOC_ID = SRCHTERMASSOC.SRCHTERMASSOC_ID
                 WHERE
                    SRCHTERMASSOC.STOREENT_ID in ($STOREPATH:catalog$)AND
                    SRCHTERMASSOC.LANGUAGE_ID in ($CONTROL:LANGUAGES$) AND
                    SRCHTERMASSOC.ASSOCIATIONTYPE in (?AssociationType?) AND
                    EXISTS (SELECT
                                            1
                                    FROM
                                            SRCHTERM SRCHTERM2
                                    WHERE
                                            SRCHTERM2.SRCHTERMASSOC_ID = SRCHTERMASSOC.SRCHTERMASSOC_ID AND
                                            SRCHTERM2.TERM = (?SearchTerms?) AND
                                            SRCHTERM2.TYPE = 1
                               )
    END_XPATH_TO_SQL_STATEMENT
    
  4. Dans votre fichier wc-component.xml étendu personnalisé, trouvez le fragment suivant :
    
    <_config:property name="CaseSensitive" value="true"/>
    
    Remplacez-le par le fragment suivant, en définissant la valeur sur false :
    
    <_config:property name="CaseSensitive" value="false"/>
    
  5. Mettez l'attribut ignoreCase à false dans la configuration solr.SynonymFilterFactory des fieldTypes wc_text et wc_textSpell, dans le fichier Solr schema.xml de chaque noyau :
    
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="false" expand="true"/> 
    
  6. Redémarrez le serveur HCL Commerce.