Hacer que la expansión de asociaciones de términos de búsqueda sea sensible a mayúsculas y minúsculas

La expansión de asociaciones de términos de búsqueda no es sensible a mayúsculas y minúsculas de forma predeterminada. Puede hacer que la expansión sea sensible a las mayúsculas y minúsculas añadiendo una columna a la tabla SRCHTERM y modificando un atributo en el archivo schema.xml de Solr de cada núcleo.

Por qué y cuándo se efectúa esta tarea

La consulta DSL /SearchTermAssociation[AssociationType= and (SearchTerms=)]+IBM_Admin_Summary, definida en wc-query-SearchTermAssociation-get.tpl, se utiliza cuando los servicios de marketing obtienen los sinónimos para un término de búsqueda. También se utiliza cuando el mandato SearchDisplay determina si una página de destino corresponde a un término de búsqueda. Esta consulta no es sensible a las mayúsculas y minúsculas de forma predeterminada. Se recomienda añadir una columna UPPERCASE generada a la tabla SRCHTERM para que se corresponda con la columna TERM. De este modo se mejora el rendimiento de la consulta de asociación de término de búsqueda en WebSphere Commerce.

Procedimiento

  1. Asegúrese de que tiene un archivo de configuración de componente de catálogo personalizado (wc-component.xml). Para crear este archivo, siga los pasos indicados en el tema Cambio de propiedades en el archivo de configuración de HCL Commerce (wc-component.xml).
  2. Asegúrese de que tiene un directorio de extensión de búsqueda personalizada (com.ibm.commerce.search-ext).

    Ahora copie el archivo wc-query-SearchTermAssociation-get.tpl del directorio com.ibm.commerce.search al com.ibm.commerce.search-ext.

  3. En el archivo com.ibm.commerce.search-ext/wc-query-SearchTermAssociation-get.tpl, busque el siguiente fragmento de código:
    
    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
    
    Sustitúyalo por el siguiente fragmento de código, que elimina el uso 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. En el archivo wc-component.xml ampliado personalizado, busque el siguiente fragmento de código:
    
    <_config:property name="CaseSensitive" value="true"/>
    
    Sustitúyalo por el siguiente fragmento de código, estableciendo el valor en false:
    
    <_config:property name="CaseSensitive" value="false"/>
    
  5. Modifique el atributo ignoreCase para que sea falsefalse para la configuración solr.SynonymFilterFactory de los tipos de campo (fieldTypes) wc_text y wc_textSpell en schema.xml de Solr de cada núcleo:
    
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="false" expand="true"/> 
    
  6. Reinicie el servidor de HCL Commerce.