Crear un proveedor de expresiones personalizado

Un proveedor de expresiones implementa lógica de negocio personalizada para modificar la expresión de búsqueda principal antes de que se envíe al motor de búsqueda. Cada proveedor de expresiones puede registrarse por separado en cualquier sección de consulta del perfil de búsqueda para que pueda reutilizarse para otras operaciones de búsqueda. Es decir, un perfil de búsqueda define una lista de proveedores de búsqueda que se utilizan para ensamblar la expresión principal para una solicitud de búsqueda.

Antes de empezar

  • Ponga código Java de preprocesador y postprocesador de proveedor de expresiones personalizado de búsqueda en el directorio workspace_dir\search-logic-ext.
  • Defina el perfil que utiliza su preprocesador, postprocesador o proveedor de expresiones personalizadas en el archivo de configuración workspace_dir\search-config-ext\src\runtime\config\com.ibm.commerce.search\wc-search.xml.

Procedimiento

  1. Cree una clase que se extienda desde com.ibm.commerce.search.internal.expression.provider.AbstractSearchExpressionProvidere implemente la interfaz com.ibm.commerce.search.expression.provider.SearchExpressionProvider.
  2. Implemente invoke que acepta el objeto SearchCriteria como parámetro de entrada. Este objeto SearchCriteria es una representación Java de la expresión de búsqueda, donde cada criterio de búsqueda se almacena como un objeto de parámetro de control.
    Nota: Primero debe llamar al método siguiente para inicializar su clase abstracta:
    super.invoke(SearchCriteria);
    

    La información que se almacena en estos objetos es procesada posteriormente por el SolrSearchExpressionProcessor y se convierte en una expresión Solr nativa para enviar al servidor Solr.

    Para ver una lista de los parámetros de control admitidos, consulte HCL Commerce Search Interfaz.

    La siguiente lista muestra los Métodos de ayudante:
    Recuperación
    String term = getControlParameterValue(SearchServiceConstants.CTRL_PARAM_SEARCH_TERM);
    Almacenamiento
    addControlParameterValue(
       SearchServiceConstants.CTRL_PARAM_SEARCH_INTERNAL_OPTIONAL_QUERY, searchExpression);
    

    Para obtener más información sobre los proveedores de expresiones predeterminados, consulte HCL Commerce Search archivo de configuración (wc-search.xml).

Ejemplo

En este ejemplo, personalizará el proceso de clasificación de consultas Solr. En un postprocesador personalizado, puede añadir datos para las respuestas REST de búsqueda de una tabla de base de datos. Estos datos se devuelven en consultas junto con la respuesta de consulta Solr.

Descargue el archivo de ejemplo para los archivos .XML y .SQL que se utilizan en este ejemplo.

SearchExpressionSample.

  1. Ejecute xgift.sql en la base de datos. Para Db2, utilice el mandato siguiente.
    
    CREATE TABLE
        XGIFT
        (
            CATENTRY_ID BIGINT NOT NULL,
            PART_NUMBER VARCHAR(256),
            ISGIFT SMALLINT,
            GIFTDESC VARCHAR(256),
            PRIMARY KEY (CATENTRY_ID)
        );
    INSERT INTO XGIFT VALUES(10001, 'AuroraWMDRS-1', 1, 'This is a test gift desc for AuroraWMDRS-1');
    INSERT INTO XGIFT VALUES(10002, 'AuroraWMDRS-2', 1, 'This is a test gift desc for AuroraWMDRS-2');
    Nota: Cambie los valores en negrita por sus propios cantentryID y partnumber.
    Para bases de datos Oracle, utilice el mandato siguiente.
    CREATE TABLE
        XGIFT
        (
            CATENTRY_ID NUMBER NOT NULL,
            PART_NUMBER VARCHAR(256),
            ISGIFT NUMBER(5),
            GIFTDESC VARCHAR(256),
            PRIMARY KEY (CATENTRY_ID)
        );
    INSERT INTO XGIFT VALUES(10001, 'AuroraWMDRS-1', 1, 'This is a test gift desc for AuroraWMDRS-1');
    INSERT INTO XGIFT VALUES(10002, 'AuroraWMDRS-2', 1, 'This is a test gift desc for AuroraWMDRS-2');
  2. Ponga los objetos CustomizedGiftPostprocessor.java y CustomizedExpressionProvider.java debajo de workspace_dir\search-logic-ext. CustomizedGiftPostprocessor.java extrae datos de la nueva tabla y compone una respuesta de consulta Solr para dar formato a la respuesta de REST de búsqueda. CustomizedExpressionProvider.java vuelve a escribir la consulta Solr para clasificar por precio en orden ascendente.
  3. Añada el código siguiente en wc-search.xml bajo workspace_dir\search-config-ext\src\runtime\config\com.ibm.commerce.search.
    <<<
        <_config:profile name="IBM_findProductsByCategory" indexName="CatalogEntry">   	
        	<_config:query> 
        	<_config:provider classname="com.mycompany.search.internal.expression.provider.CustomizedExpressionProvider"/> 
        	<_config:postprocessor classname="com.mycompany.search.internal.expression.postprocessor.CustomizedGiftPostprocessor" />  
            </_config:query>        
        </_config:profile>
        
        <_config:profile name="IBM_findProductByIds_Details" indexName="CatalogEntry"> 	
        	<_config:query> 
        	<_config:postprocessor classname="com.mycompany.search.internal.expression.postprocessor.CustomizedGiftPostprocessor" />  
            </_config:query>          
        </_config:profile>
    >>> 
    
  4. Cree el proyecto y publique los cambios en el servidor.
  5. Reinicie el servidor de búsqueda.
  6. Realice una llamada REST para verificar la personalización de su postprocesador.
    http://{searchhost}:{search-http-port}/search/resources/store/1/productview/byId/10001
    Asegúrese de que la respuesta incluye isGifty giftDesc en los campos de retorno y que los valores coincidan con los valores en la tabla XGIFT.


Qué hacer a continuación

En tiempo de ejecución, es posible capturar la expresión que está almacenada en este objeto SelectionCriteria, y la expresión Solr final que se envía al servidor Solr.

Para obtener instrucciones sobre cómo habilitar el rastreo, consulte Habilitar el rastreo y el registro para la HCL Commerce Search.

Habilite el rastreo, ejecute el escenario y busque Final Solr query en el archivo trace.log.