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
/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
- 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).
-
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.
-
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 deUPPER
: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
-
En el archivo wc-component.xml ampliado personalizado, busque el siguiente fragmento de código:
Sustitúyalo por el siguiente fragmento de código, estableciendo el valor en false:<_config:property name="CaseSensitive" value="true"/>
<_config:property name="CaseSensitive" value="false"/>
-
Modifique el atributo ignoreCase para que sea
false
false para la configuración solr.SynonymFilterFactory de los tipos de campo (fieldTypes)wc_text
ywc_textSpell
en schema.xml de Solr de cada núcleo:<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="false" expand="true"/>
- Reinicie el servidor de HCL Commerce.