Configuration des services Query dans ZooKeeper

Vous pouvez générer des profils pour les personnalisations de service Ingest dans ZooKeeper. Des nœuds finaux pour configurer les personnalisations de l'environnement de développement et de production sont disponibles. Notez que ces nœuds finaux sont disponibles uniquement dans les environnements Données et Développement. Le client ne peut pas les utiliser par l'intermédiaire du service Query, que ce soit dans l'environnement de création ou de production de Commerce.

About this task

ZooKeeper est utilisé pour stocker vos configurations personnalisées. Au moment de l'exécution, chaque microservice recherche dans ZooKeeper pour toutes les configurations personnalisées qu'il a pu également stocker. Il remplacera automatiquement les comportements par défaut, tels que les réponses de requête, et chargera des applications personnalisées telles que les nouveaux connecteurs NiFi. Cette tâche décrit comment configurer des profils dans ZooKeeper, ainsi que des options de recherche personnalisées spécifiques, telles que des unités de mesure et des couleurs de produit. Vous définissez des nœuds finaux pour l'API REST afin que ces personnalisations soient accessibles via la passerelle.

Procedure

  1. Configurez vos profils.
    ZooKeeper stocke les profils nommés dans l'un de ses nœuds. Vous pouvez créer, mettre à jour, supprimer et obtenir des profils à l'aide du nœud final du service Query. Le nœud final du profil est :
    https://data_environment_hostname:30921/search/resources/api/v2/documents/profiles/profileName
    Aucun conteneur ne doit être redémarré après l'ajout d'un profil à l'aide de ce nœud final.

    Pour la spécification d'API REST complète, voir API REST de Query.

    Chaque document de profil est au format .json et possède la structure suivante.
    { "indexName": "string", "parentProfileName": "string", "profileName": "string", "query": { "highlight": { "fields": [ "name", "fieldName" ], "simplePre": "<strong><span class=font2>", "simplePost": "</span></strong>" }, "params": [ { "paramName": "value" } ], "postprocessor": [ "postprocessorClass" ], "preprocessor": [ "preprocessorClass" ], "provider": [ "providerClass" ], "queryFields": [ "field1", "filed2" ], "responseFields": [ "field1", "filed2" ], "sortFields": { "key": "value" }, "spellcheck": { "limit": "5" }, "group" : { "enable" : "false", "sort" : "score desc", "field" : "relationship.product.group" }, "hero" : { "overrideFieldName" : "url.thumbnail", "showGroupPriceRange" : "false", "field" : { "7741124012283334335" : "Hero" } } } }
    Pour les définitions des champs et les descriptions des fournisseurs, pré- et postprocesseurs disponibles, voir Propriétés des profils de recherche.
  2. Configurez des personnalisations de recherche spécifiques.
    Le nœud final /configuration est utilisé pour ajouter les détails de configuration personnalisés dans le nœud ZooKeeper. Il y a un nœud racine dans ZooKeeper portant le nom /configuration, et, à l'intérieur du nœud racine se trouvent des nœuds enfant où vous pouvez ajouter la configuration. Les nœuds disponibles sont les suivants :
    1. Extensions xC
    2. wc-component
    3. Couleurs, organisées par langue
    4. Filtres pour faciliter le traitement du langage naturel
    5. Unités de mesure, et
    6. Pertinence
    1. Pour enregistrer les personnalisations xC pour le pré et le post-traitement de la requête de recherche réelle au niveau de ce nœud enfant, transmettez le nœud de configuration au paramètre nodeName="xC" en tant que requête, par exemple :
      https://data_environment_hostname:30921/search/resources/api/v2/configuration?nodeName=xC
      Pour la spécification d'API REST complète, voir API du service Requête.
      Voici un exemple de structure pour une configuration xC :
      { "preProcess": [ { "storeId" : "1", "endpoint": { "query": "/productview/bySearchTerm/pre", "xC": "/commerceue/extension/search/productview/preBySearchTerm", "properties": [ {} ] } } ], "postProcess": [ { "storeId" : "1", "endpoint": { "query": "/productview/bySearchTerm/post", "xC": "/commerceue/extension/search/productview/postBySearchTerm", "properties": [ { "fields": [ "name", "shortDescription", "UserData" ] } ] } } ] }
      Vous pouvez utiliser Java, comme dans le fichier suivant CustomProductViewResource.java :
      package com.hcl.commerce.search.rest; /* * Licensed Materials - Property of HCL Technologies Limited. (C) Copyright HCL Technologies Limited 1996, 2020. */ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/productview") public class CustomProductViewResource { /** * This method is use to add the search criteria. */ @SuppressWarnings({ "rawtypes", "unchecked" }) @RequestMapping(value = "/preBySearchTerm", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity preFindProductsBySearchTerm(@RequestBody Map criteria) throws Exception { ArrayList list = (ArrayList) criteria.get("content"); List filter = new ArrayList(); filter.add("manufacturer.text:\"manufacturerName\""); Map filterMap = new HashMap(); filterMap.put("_wcf.search.internal.filterquery", filter); list.add(filterMap); criteria.put("content", list); ResponseEntity result = new ResponseEntity(criteria, HttpStatus.OK); return result; } /** * This method is use to manipulate the data post from server. */ @SuppressWarnings({ "rawtypes", "unchecked" }) @RequestMapping(value = "/postBySearchTerm", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity postFindProductsBySearchTerm(@RequestBody Map response) throws Exception { ArrayList list = (ArrayList) response.get("content"); for (Object obj : list) { if (obj instanceof Map) { Map m = (Map) obj; m.put("name", "Custom :: " + m.get("name")); } } ResponseEntity result = new ResponseEntity(response, HttpStatus.OK); return result; } } 
    2. Vous pouvez également ajouter un fichier wc-component.json pour remplacer ou ajouter de nouvelles propriétés de configuration. Le nœud final est :
      https://data_environment_hostname:30921/search/resources/api/v2/configuration?nodeName=component
      Voici un exemple de structure pour la configuration des composants.
      { "valuemappingservice": { "valuemapping": [ { "internalName": "CatalogGroupUserDataFieldNameMapping", "externalName": "CatalogGroupUserDataFieldNameMapping", "valuemap": [ { "externalValue": "UserRating", "internalValue": "rating" } ] }, { "internalName": "CustomData", "externalName": "CustomData", "valuemap": [ { "externalValue": "CustomDataExternal", "internalValue": "CustomDataInternal" } ] } ] }, "extendedconfiguration": { "configgrouping": [ { "name": "LoadOnStartup", "property": { "name": "com.ibm.commerce.search.internal.runtime.bootstrap.SearchServiceWarmStarter", "value": "FALSE" } }, { "name": "MultipleContracts", "property": { "name": "operation", "value": "OR" } }, { "name": "TransactionServerSetting", "property": [ { "name": "TransactionServerSetting/SSLAcceleratorOption", "value": "Enabled" }, { "name": "TransactionServerSetting/inSSLPort", "value": "8888" }, { "name": "TransactionServerSetting/inSecure", "value": "true" } ] }, { "name": "CustomGroup1", "property": { "name": "customPropName", "value": "customPropValue" } }, { "name": "CustomGroup2", "property": [ { "name": "customPropName1", "value": "customPropValue1" }, { "name": "customPropName2", "value": "customPropValue2" } ] } ] } }
    3. Dans la HCL Commerce Search, vous pouvez effectuer des recherches en langage naturel à l'aide de couleurs dans les requêtes de produits. Dans ZooKeeper, les couleurs sont enregistrées comme un nœud racine, et en_US est enregistré comme un enfant de couleurs. Cette hiérarchie vous permet de maintenir des couleurs basées sur le paramètre régional. Pour ajouter des couleurs à l'intérieur de ZooKeeper à l'aide du nœud final de configuration, transmettez la valeur nodeName et les paramètres régionaux de requête obligatoires. Dans le cas des noms de couleurs anglais, vous pouvez uniquement mettre à jour la liste des couleurs. Pour les autres couleurs spécifiques au paramètre régional, vous pouvez également ajouter des couleurs. Pour mettre à jour la valeur de couleur, transmettez un fichier json de données.
      Le point de terminaison de ce service est :
      https://data_environment_hostname:30921/search/resources/api/v2/configuration?nodeName=colors&locale=en_US
      Voici un exemple de fichier de configuration color_en_US.json pour les couleurs.
      { "ghost white": "[[white],[248,248,255]]", "navajo white": "[[brown],[255,222,173]]", "midnight blue": "[[blue],[25,25,112]]", "darkslateblue": "[[blue],[72,61,139]]", "lightgrey": "[[black],[211,211,211]]", "dark khaki": "[[gold],[189,183,107]]", "light salmon": "[[red],[255,160,122]]", "saddlebrown": "[[brown],[139,69,19]]", "moccasin": "[[yellow],[255,228,181]]", "skyblue": "[[blue],[135,206,235]]", "deepskyblue": "[[blue],[0,191,255]]", "chartreuse": "[[green],[127,255,0]]", "mediumpurple": "[[purple],[147,112,219]]", "pale gold": "[[gold],[230,190,138]]", "peach": "[[yellow],[255,229,180]]", "olive drab": "[[green],[107,142,35]]", "palevioletred": "[[pink],[219,112,147]]", "dimgrey": "[[black],[105,105,105]]", "blanched almond": "[[brown],[255,235,205]]", "honeydew": "[[white],[240,255,240]]", "darkseagreen": "[[green],[143,188,143]]", "limegreen": "[[green],[50,205,50]]", "light slate gray": "[[black],[119,136,153]]", "green yellow": "[[green],[173,255,47]]", "peach puff": "[[yellow],[255,218,185]]", "lightsteelblue": "[[blue],[176,196,222]]", }

      Dans cet exemple, "ghost white": "[[white],[248,248,255]]" signifie que la couleur ghost white appartient à la famille de couleurs white. Les chiffres représentent le code de couleur RVB le plus significatif ou le plus proche pour la couleur ghost white de la roue chromatique RVB de la famille de couleurs white.

    4. Dans ZooKeeper se trouve un nœud avec le nom filtre, qui est utilisé pour analyser ou ignorer les mots redondants des termes de recherche pendant le traitement du langage naturel. A l'heure actuelle, les opérations prises en charge par le filtre sont update, delete et retrieve. L'opération add n'est pas prise en charge pour le moment.
      Voici le nœud final de ce service :
      https://data_environment_hostname:30921/search/resources/api/v2/configuration?nodeName=filter;locale=en_US
      Voici un exemple de fichier filter.json, pour filtrer ou ignorer les termes.
      { "quarter": "TO_NUMBER~0.25" "half": "TO_NUMBER~0.50", "one and half": "TO_NUMBER~1.5", "but": "IGNORE_TERM", "usd": "IGNORE_TERM", "sterling": "IGNORE_TERM", "up to": "FILTER_LTE~1", "less than": "FILTER_LTE~1" "expensive": "FILTER_GTE~-1", }
    5. La fonction Traitement du langage naturel vous permet d'utiliser des unités de mesure. Cette fonction est disponible à la fois pour le service de requête, afin d'analyser la chaîne de requête de recherche, et pour NiFi, afin d'analyser des attributs des produits. Les unités de mesure sont mises à jour et supprimées à l'aide de la méthode de requête PATCH. Pour supprimer une unité de mesure, transmettez une valeur vide en tant que clé. A l'heure actuelle, les opérations prises en charge avec les unités de mesure sont update, delete et retrieve. L'opération add n'est pas prise en charge pour le moment.
      Voici le nœud final de ce service :
      https://localhost:3737/search/resources/api/v2/configuration?nodeName=uoms;locale=en_US
      Exemple uoms.json pour les unités de mesure :
      { "milliseconds": "millisecond", "yard": "yard", "centimeters": "centimeter", "year": "year", "hr": "hour", "yd": "yard", "years": "year", "millimeter": "millimeter", "milliliter": "milliliter", "inches": "inch", "seconds": "second", "foots": "foot", "nanometer": "nanometer", "gallons": "gallon", "pounds": "pound", "yr": "year", "grams": "gram", "kilogram": "kilogram", "\"": "inch", "nanosecond": "nanosecond", "in": "inch", "mile": "mile", "liters": "liter", "'": "foot", "litre": "liter", "μg": "microgram", "μm": "micrometer", "microsecond": "microsecond", "μs": "microsecond", "centimetre": "centimeter", "micrometre": "micrometer", "weeks": "week", "microgram": "microgram", "millisecond": "millisecond", "milligram": "milligram", "sec": "second", "min": "minute", "kilograms": "kilogram", "microseconds": "microsecond", "kg": "kilogram", "foot": "foot", "st": "stone", "km": "kilometer", "d": "day", "gram": "gram", "milliliters": "milliliter", "cm": "centimeter", "l": "liter", "m": "meter", "s": "second", "t": "tonne", "gallon": "gallon", "lb": "pound", "kilometer": "kilometer", "days": "day", "y": "year", "stones": "stone", "yrs": "year", "inch": "inch", "micrograms": "microgram", "millimeters": "millimeter", "second": "second", "mg": "milligram", "millilitre": "milliliter", "nanometre": "nanometer", "mi": "mile", "day": "day", "ml": "milliliter", "mm": "millimeter", "mo": "month", "millilitres": "milliliter", "months": "month", "meter": "meter", "minutes": "minute", "ms": "millisecond", "liter": "liter", "hrs": "hour", "yards": "yard", "millimetre": "millimeter", "month": "month", "lbs": "pound", "centimeter": "centimeter", "nm": "nanometer", "millimetres": "millimeter", "week": "week", "ns": "nanosecond", "yds": "yard", "milligrams": "milligram", "micrometer": "micrometer", "ft": "foot", "meters": "meter", "miles": "mile", "pound": "pound", "gal": "gallon", "wk": "week", "hour": "hour", "nanoseconds": "nanosecond", "tonne": "tonne", "litres": "liter", "hours": "hour", "gm": "gram", "ltr": "liter", "oz": "ounce", "minute": "minute", "stone": "stone", "kilometers": "kilometer", "ounce": "ounce" }
      Pour activer le matchmaker de dimension, appelez la méthode POST de configuration dans le nœud dimensions du nœud final suivant :
      “http://{host}:{port}/search/resources/api/v2/configuration?nodeName=dimensions&locale=en_US"
      Les configurations sont entrées au format JSON, comme dans l'exemple suivant :
      { "pattern": “LWH” } 
      Vous pouvez mettre à jour une configuration à l'aide de la méthode PATCH. Un seul modèle peut être spécifié dans le nœud dimensions de ZooKeeper, et actuellement, seul le paramètre régional en_US est autorisé.
    6. Vous pouvez utiliser le nœud index_field_relevancy pour ajouter la valeur de stimulation d'une zone d'index au moment de la requête. Il est utilisé pour stimuler le résultat en fonction de la zone. Vous pouvez nous ajouter ou mettre à jour en utilisant la méthode POST.
      Voici le nœud final du service :
      https://data_environment_hostname:30921/search/resources/api/v2/configuration?nodeName=index_field_relevancy
      Voici des exemples de données pour la pertinence de la zone d'index.
      { "default.suggestion": "1", "category.name": "100", "description.text": "5", "name.text": "10", "manufacturer.text": "10", "default.search.text": "1", "identifier.pn.raw": "15", "keyword.text": "100" }