Utilisation de la fonction de mise à jour atomique Solr avec la recherche
La mise à jour atomique, également appelée mise à jour partielle, vous permet de faire des mises à jour d'index sur les zones stockées spécifiées dans un document existant. Cette approche est particulièrement utile lorsqu'un noyau a de nombreuses zones et qu'un petit nombre d'entre elles ont été modifiées entre les générations d'index.
- set
- Définissez ou remplacez une valeur particulière ou supprimez la valeur si la nouvelle valeur spécifiée est nulle.
- ajouter
- Ajoute une valeur supplémentaire à une liste.
- remove
- Supprime une valeur (ou une liste de valeurs) d'une liste.
- removeregex
- Supprime à partir d'une liste correspondant à l'expression régulière Java donnée.
- inc
- Incrémente une valeur numérique par un montant spécifique (utilisez une valeur négative pour la décrémenter).
Exemple
catentry_id "10044"
inv_strlocqty_1 100
inv_strlocqty_2 200
inv_strlocqty_3 300
indexedTime "2018-11-28T14:51:58.042Z"Une mise à jour du stock se produit, entraînant la mise à jour du stock disponible dans les magasins 1 à 400, et du stock disponible dans les magasins 2 à 500.| catentry_id | id_magasin | availquantity |
|---|---|---|
| 10044 | 1 | 400 |
| 10044 | 2 | 500 |
catentry_id,inv_strlocqty_1,inv_strlocqty_2
10044,400, 500Après le chargement d'index, le document dans Solr ressemblera à cela :
catentry_id "10044"
inv_strlocqty_1 400
inv_strlocqty_2 500
inv_strlocqty_3 300
indexedTime "2018-11-28T15:51:38.033Z"Procédure pour utiliser la mise à jour atomique avec un fichier CSV
- Créez le fichier de configuration d'environnement workspace_dir\workspace\search-config-ext\src\index\indexloadwc-indexload-profileName-csv.xml, où profileName est le paramètre URL que vous utilisez lorsque vous appelez IndexLoad dans un navigateur Web. Dans les scénarios suivants, le paramètre price-delta est utilisé comme profileName pour le scénario CSV et le paramètre inventory-delta comme profileName pour le scénario SQL. Le fichier wc-indexload-profileName-csv.xml contient des informations de contrôle d'environnement et des propriétés globales requises par le chargement d'index. Par exemple, il inclut le mappage des données spécifiées entre la zone CSV et la zone Solr correspondante. (Vous avez la possibilité de laisser une colonne exempte de données si son nom dans ce fichier correspond à un nom de zone Solr). Ce fichier spécifie également DataReader et le médiateur. Pour charger à partir d'un fichier CSV, spécifiez com.ibm.commerce.search.indexload.reader.SearchIndexLoadCSVReader en tant que lecteur et com.ibm.commerce.search.indexload.mediator.SearchIndexLoadCSVMediator en tant que BusinessObjectMediator. Le fichier wc-indexload-profileName-csv.xml ne nécessite généralement pas de personnalisation. Vous pouvez utiliser l'exemple de fichier suivant tel qu'il est.
<_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> - Créez un fichier de configuration de profile wc-indexload-profileName.xml.
Le fichier wc-indexload-profileName.xml contient des attributs de performance configurables et une ou plusieurs définitions des articles de chargement. Il contient également l'emplacement du fichier CSV et le nom du noyau cible. Les noms de profil que vous définissez dans les fichiers de configuration sont ensuite remplacés en tant que paramètre URL lorsque vous appelez IndexLoad dans un navigateur Web. Les configurations d'articles de chargement sont répertoriées dans la section portant sur l'ordre de chargement de ce fichier. Chaque définition LoadItem spécifie une configuration d'article de chargement spécifique telle que coreName ou location. Plusieurs articles de chargement sont exécutés en parallèle. Dans chaque section de configuration d'article de charge, le fichier de configuration de l'environnement wc-indexload-profileName-csv.xml doit être spécifié. Le fichier de configuration de profil contient également la configuration DataWriter. Conservez l'original com.ibm.commerce.search.indexload.writer.SearchIndexLoadBatchServiceen tant que programme d'écriture. Le fichier CSV ne doit contenir que la valeur de zone modifiée. IndexLoad utilisera l'API de mise à jour atomique Solr pour mettre à jour la zone stockée spécifiée.
Exemple : 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> - Exécutez IndexLoad en mode POST avec la valeur profileName définie à l'étape 2. Par exemple, si le fichier de configuration profileName s'appelle wc-indexload-price-delta.xml, alors exécutez IndexLoad avec l'URL :
https://searchMaster:3738/search/admin/resources/indexload/profile/price-delta/start?catalogId=#MASTER_CATALOG_ID - Une fois que IndexLoad s'est exécuté avec succès, exécutez WCB pour générer le package et déployez le package dans le conteneur Docker de recherche. Pour plus d'informations, voir Code personnalisé de combinaison pour le déploiement.
Procédure d'utilisation de la mise à jour atomique via SQL
- Créez le fichier de configuration de l'environnement workspace_dir\workspace\search-config-ext\src\index\indexloadwc-indexload-profileName-sql.xml.
Cette version SQL du fichier de configuration d'environnement spécifie la configuration d'indexation parallèle. Cette configuration sera utilisée pour diviser uniformément le jeu de données sur plusieurs unités d'exécution lorsqu'il est exécuté avec SolrIndexLoadQueryLoader et le code SQL de configuration, utilisé pour capturer les données à partir de la source de données spécifiée.
Ce fichier de configuration spécifie également le lecteur de données. Il y a deux entrées DataReader :- com.ibm.commerce.search.indexload.reader.SearchIndexLoadQueryReader
- Vous pouvez utiliser cette commande pour lire des enregistrements uniques à partir de la base de données, puis les enregistrer dans l'index.
- com.ibm.commerce.search.indexload.reader.SearchIndexLoadQueryMultiplexReader
- Cette commande est utilisée pour transformer plusieurs entrées de données issues de la table de base de données en une seule ligne d'index avec de nombreuses zones d'index dynamiques.
Voici un exemple d'entrée DataReader, qui est utilisé pour obtenir le stock mis à jour à partir d'une heure spécifique. Etant donné qu'il existe plusieurs enregistrements pour chaque catentryId unique, l'exemple utilise com.ibm.commerce.search.indexload.reader.SearchIndexLoadQueryMultiplexReader pour accumuler plusieurs lignes.<_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> - Créez un fichier de configuration de profile workspace_dir\workspace\search-config-ext\src\index\indexloadwc-indexload-profileName.xml.Comme pour l'approche de fichier CSV, spécifiez le fichier de configuration SQL dans la section
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> - Exécuter IndexLoad avec le paramètre profileName défini. Par exemple, si à l'étape 2, le nom de configuration du profil est wc-indexload-inventory-delta.xml, alors exécutez :
https://searchMaster:3738/search/admin/resources/indexload/profile/inventory-delta/start?catalogId=#MASTER_CATALOG_ID - Une fois que IndexLoad s'est exécuté avec succès, exécutez WCB pour générer le package et déployez le package dans le conteneur Docker de recherche. Pour plus d'informations, voir Code personnalisé de combinaison pour le déploiement.