Usar la característica de actualización atómica de Solr con la búsqueda
La actualización atómica, también conocida como actualización parcial, le permite realizar actualizaciones de índice en los campos almacenados especificados en un documento existente. Este enfoque es especialmente útil cuando un núcleo tiene muchos campos y solo se ha cambiado un pequeño número de ellos entre las creaciones de índice.
- set
- Establezca o sustituya un valor determinado, o elimine el valor si se especifica nulo como el nuevo valor.
- añadir
- Añade un valor adicional a una lista.
- eliminar
- Elimina un valor (o una lista de valores) de una lista.
- removeregex
- Elimina de una lista que coincide con la expresión regular Java especificada.
- inc
- Incrementa un valor numérico en una cantidad específica (utilice un valor negativo para disminuir),
Ejemplo
catentry_id "10044"
inv_strlocqty_1 100
inv_strlocqty_2 200
inv_strlocqty_3 300
indexedTime "2018-11-28T14:51:58.042Z"
Se produce una actualización de inventario, actualizando un inventario disponible en la tienda de 1 a 400 y el inventario disponible en la tienda de 2 a 500.catentry_id | store_id | availquantity |
---|---|---|
10044 | 1 | 400 |
10044 | 2 | 500 |
catentry_id,inv_strlocqty_1,inv_strlocqty_2
10044,400, 500
Después de cargar el índice, el documento en Solr será similar al siguiente:
catentry_id "10044"
inv_strlocqty_1 400
inv_strlocqty_2 500
inv_strlocqty_3 300
indexedTime "2018-11-28T15:51:38.033Z"
Procedimiento para utilizar la actualización atómica con un archivo CSV
- Cree el archivo de configuración de entorno workspace_dir\workspace\search-config-ext\src\index\indexloadwc-indexload-profileName-csv.xml, donde ProfileName es el parámetro URL que se utiliza cuando se llama IndexLoad en un navegador web. En los escenarios siguientes, price-delta se utiliza como profileName para el escenario csv y inventory-delta como profileName para el escenario SQL. El archivo wc-indexload-profileName-csv.xml contiene información de control de entorno y propiedades globales que son necesarias para la carga de índice. Por ejemplo, incluye la correlación de datos especificada entre el campo CSV y el campo Solr correspondiente. (Tiene la opción de dejar una columna vacía de datos si su nombre en este archivo coincide con un nombre de campo de Solr.) Este archivo también especifica el DataReader y el mediador. Para cargar desde un archivo CSV, especifique com.ibm.commerce.search.indexload.reader.SearchIndexLoadCSVReader como lector y com.ibm.commerce.search.indexload.mediator.SearchIndexLoadCSVMediator como BusinessObjectMediator. El archivo wc-indexload-profileName-csv.xml no suelen requerir personalización. Puede utilizar el archivo de ejemplo siguiente tal cual.
<_config:DataLoader className="com.ibm.commerce.search.indexload.loader.SearchIndexLoadCSVLoader" > <_config:property name="FirstLineIsHeader" value="true" /> <_config:property name="Charset" value="UTF-8" /> <_config:property name="TokenDelimiter" value="," /> <_config:DataReader className="com.ibm.commerce.search.indexload.reader.SearchIndexLoadCSVReader" /> <_config:BusinessObjectBuilder> <_config:DataMapping> </_config:DataMapping> <_config:BusinessObjectMediator className="com.ibm.commerce.foundation.internal.server.services.indexload.mediator.SolrIndexLoadBusinessObjectMediator"/> <_config:BusinessObjectMediator className="com.ibm.commerce.search.indexload.mediator.SearchIndexLoadCSVMediator" /> </_config:BusinessObjectBuilder> </_config:DataLoader>
- Cree un archivo wc-indexload-profileName.xml de configuración de perfil.
El archivo wc-indexload-profileName.xml contiene atributos de rendimiento configurables y una o varias definiciones de elementos de carga. También contiene la ubicación del archivo CSV y el nombre del núcleo de destino. Los nombres de perfil que defina en los archivos de configuración se sustituyen a continuación como un parámetro de URL cuando se llamaIndexLoad en un navegador web. Las configuraciones de elemento de carga se listan bajo la sección de orden de carga de este archivo. Cada definición de LoadItem especifica una configuración de elemento de carga determinada como coreName o location. Varios elementos de carga se ejecutan en paralelo. Dentro de cada sección de configuración de elemento de carga, debe especificarse el archivo de configuración de entorno wc-indexload-profileName-csv.xml. El archivo de configuración de perfil también contiene la configuración DataWriter; conserve el original com.ibm.commerce.search.indexload.writer.SearchIndexLoadBatchService como transcriptor. El archivo CSV solo necesita contener el valor de campo modificado. IndexLoad utilizará la API de actualización atómica de Solr para actualizar el campo almacenado especificado.
Ejemplo: wc-indexload-price-delta.xml<_config:LoadItem name="ExternalPrice-1" fileName="wc-indexload-externalprice-csv.xml"> <_config:property name="coreName" value="MC_10001_CatalogEntry_Price1_generic" /> <_config:property name="groupName" value="1" /> <_config:DataSourceLocation location="resources/search/index/indexload/contract-price-example1.csv" /> </_config:LoadItem>
- Ejecute IndexLoad en modalidad POST con profileName definido en el paso 2. Por ejemplo, si el archivo de configuración profileName se denominó como wc-indexload-price-delta.xml, ejecute indexload con la URL:
https://searchMaster:3738/search/admin/resources/indexload/profile/price-delta/start?catalogId=#MASTER_CATALOG_ID
- Después de que IndexLoad se haya ejecutado satisfactoriamente, ejecute WCB para crear el paquete y desplegar el paquete en el contenedor Docker de búsqueda. Para obtener más información, consulte Empaquetado del código personalizado para el despliegue.
Procedimiento para utilizar la actualización atómica a través de SQL
- Cree el archivo de configuración de entorno workspace_dir\workspace\search-config-ext\src\index\indexloadwc-indexload-profileName-sql.xml.
Esta versión de SQL del archivo de configuración de entorno especifica la configuración de indexación paralela. Esta configuración se utilizará para dividir de forma uniforme el conjunto de datos en varias hebras cuando se ejecute con SolrIndexLoadQueryLoader y el código SQL de configuración, que se utiliza para capturar el dato del origen de datos especificado.
Este archivo de configuración también especifica el lector de datos. Hay dos entradas de DataReader:- com.ibm.commerce.search.indexload.reader.SearchIndexLoadQueryReader
- Puede utilizar este mandato para leer registros exclusivos de la base de datos y, posteriormente, guardarlos en el índice.
- com.ibm.commerce.search.indexload.reader.SearchIndexLoadQueryMultiplexReader
- Este mandato se utiliza para transformar varias entradas de datos de la tabla de base en una sola fila de índice con varios campos de índice dinámico.
Lo siguiente es una entrada de DataReader de ejemplo, que se utiliza para obtener el inventario actualizado de una hora específica. Puesto que hay varios registros para cualquier catentryId exclusivo, el ejemplo utiliza com.ibm.commerce.search.indexload.reader.SearchIndexLoadQueryMultiplexReader para acumular varias filas.<_config:DataReader className="com.ibm.commerce.search.indexload.reader.SearchIndexLoadQueryMultiplexReader"> <_config:DynamicFields> <_config:DynamicField dynamicFieldName="inv_strlocqty_%storeId%" dynamicFieldValue="%quantity%" indexingMode="replace" /> </_config:DynamicFields> <_config:property name="KeyFieldName" value="catentry_id" /> <_config:property name="ExcludeFieldNames" value="storeId,quantity" /> <_config:property name="minDelta" value="5"/> <_config:Query> <_config:SQL> SELECT invavl.catentry_id, invavl.STORE_ID,INVAVL.AVAILQUANTITY FROM INVAVL, CATGPENREL WHERE CATGPENREL.CATALOG_ID = 10001 AND INVAVL.CATENTRY_ID = CATGPENREL.CATENTRY_ID AND INVAVL.QUANTITYMEASURE = 'C62' AND INVAVL.LASTUPDATE BETWEEN '2018-11-25 16:45:24.000' AND current timestamp ORDER BY INVAVL.CATENTRY_ID WITH UR </_config:SQL> <_config:ColumnMapping columnName="CATENTRY_ID" indexFieldName="catentry_id" /> <_config:ColumnMapping columnName="STORE_ID" indexFieldName="storeId" /> <_config:ColumnMapping columnName="AVAILQUANTITY" indexFieldName="quantity" /> </_config:Query> </_config:DataReader>
- Cree un archivo workspace_dir\workspace\search-config-ext\src\index\indexloadwc-indexload-profileName.xml de configuración de perfil.Al igual que con el método de archivo CSV, especifique el archivo de configuración SQL en la sección
load item
:<_config:LoadItem name="Inventory-Delta" fileName="wc-indexload-dom-delta-inventory-sql.xml"> <_config:property name="coreName" value="MC_10001_CatalogEntry_Inventory_generic" /> <_config:property name="groupName" value="I" /> </_config:LoadItem>
- Ejecute IndexLoad con profileName. Por ejemplo, si en el paso 2, el nombre de configuración del perfil es wc-indexload-inventory-delta.xml, ejecute:
https://searchMaster:3738/search/admin/resources/indexload/profile/inventory-delta/start?catalogId=#MASTER_CATALOG_ID
- Después de que IndexLoad se haya ejecutado satisfactoriamente, ejecute WCB para crear el paquete y desplegar el paquete en el contenedor Docker de búsqueda. Para obtener más información, consulte Empaquetado del código personalizado para el despliegue.