Configuración de servicios de consulta en ZooKeeper

Puede crear perfiles para personalizaciones de servicio Ingest en ZooKeeper. Los puntos finales para configurar las personalizaciones del entorno de desarrollo y de producción están disponibles. Tenga en cuenta que estos puntos finales están disponibles únicamente desde el entorno de datos y el entorno de desarrollo. No están disponibles para que el comprador las utilice a través del servicio de consulta en el entorno de autoría o en directo de Commerce.

About this task

ZooKeeper se utiliza para almacenar las configuraciones personalizadas. En tiempo de ejecución, cada microservicio sondea a ZooKeeper en busca de configuraciones personalizadas que también pueda haber almacenado. Anulará automáticamente los comportamientos predeterminados, como las respuestas a las consultas, y cargará aplicaciones personalizadas, como los nuevos conectores NiFi. Esta tarea describe cómo configurar perfiles en ZooKeeper, así como opciones de búsqueda personalizadas específicas como unidades de medida y colores de producto. Puede definir puntos finales para la API de REST de modo que estas personalizaciones sean accesibles a través del punto de enlace.

Procedure

  1. Configure los perfiles.
    ZooKeeper almacena los perfiles con nombre en uno de sus nodos. Puede crear, actualizar, eliminar y obtener perfiles utilizando el punto final de los perfiles del servicio de consulta. El punto final del perfil es:
    https://data_environment_hostname:30921/search/resources/api/v2/documents/profiles/profileName
    No es necesario reiniciar ningún contenedor después de añadir un perfil utilizando este punto final.

    Para obtener la especificación de la API de REST completa, consulte la API REST de consulta.

    Cada documento de perfil está en formato .json y tiene la estructura siguiente.
    { "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" } } } }
    Para obtener definiciones de los campos y descripciones de los proveedores, preprocesadores y posprocesadores disponibles, consulte Propiedades de perfiles de búsqueda.
  2. Configure personalizaciones de búsqueda específicas.
    El punto final de /configuration se utiliza para añadir los detalles de configuración personalizados en el nodo de ZooKeeper. Hay un nodo raíz en ZooKeeper con el nombre /configuration y, dentro del nodo de la raíz, son nodos hijo donde puede añadir la configuración. Los nodos disponibles son:
    1. Extensions xC
    2. wc-component
    3. Colores, organizados por idioma
    4. Filtros para ayudar en el proceso de lenguaje natural
    5. Unidades de medida, y
    6. Relevancia
    1. Para registrar personalizaciones xC para el preproceso y el posprocesamiento de la solicitud de búsqueda real a este nodo hijo, pase el nodo de configuración del parámetro nodeName="xC" como una solicitud, por ejemplo:
      https://data_environment_hostname:30921/search/resources/api/v2/configuration?nodeName=xC
      Para obtener la especificación de la API de REST completa, consulte la API del servicio de consulta.
      A continuación, se muestra una estructura de ejemplo para una configuración 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" ] } ] } } ] }
      Puede utilizar Java, como en el archivo siguiente 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. También puede añadir un archivo wc-component.json para sustituir o añadir nuevas propiedades de configuración. El punto final es:
      https://data_environment_hostname:30921/search/resources/api/v2/configuration?nodeName=component
      A continuación se muestra una estructura de ejemplo para la configuración de componentes.
      { "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. En la HCL Commerce Search puede realizar búsquedas en lenguaje natural mediante colores en las consultas de productos. En ZooKeeper, los colores se registran como nodo raíz y en_US se registra como hijo de los colores. Esta jerarquía le permite mantener los colores basándose en el entorno local. Para añadir colores dentro de ZooKeeper utilizando el punto final de configuración, pase los parámetros de solicitud de nodeName y entorno local obligatorios. En el caso de los nombres de color en inglés, solo puede actualizar la lista de colores; para otros colores específicos de entorno local, también puede añadir colores. Para actualizar el valor de color, pase un archivo JSON de datos. Para eliminar el registro, utilice el método de petición de PATCH con un valor vacío para clave.
      El punto final para este servicio es:
      https://data_environment_hostname:30921/search/resources/api/v2/configuration?nodeName=colors&locale=en_US
      A continuación, se muestra un archivo de configuración color_en_US.json de ejemplo para colores.
      { "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]]", }

      En este ejemplo, "ghost white": "[[white],[248,248,255]] " significa que ghost white pertenece a la familia de los colores white. Los números representan el código de color RGB más significativo o más cercano a ghost white de la rueda de color RGB de la familia de colores white.

    4. Inside ZooKeeper es un nodo con el filtrode nombres, que se utiliza para analizar u omitir palabras redundantes del término de búsqueda durante el proceso de lenguaje natural. En la actualidad, las operaciones soportadas con el filtro son update, delete y retrieve. En este momento, no se admite la operación de add.
      El punto final para este servicio es:
      https://data_environment_hostname:30921/search/resources/api/v2/configuration?nodeName=filter;locale=en_US
      A continuación se muestra un archivo de ejemplo de filter.json, para el filtrado o la omisión de términos.
      { "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 característica de proceso de lenguaje natural le permite utilizar unidades de medida. Esta característica está disponible para el servicio de consulta, para analizar la cadena de consulta de búsqueda y NiFi para analizar los atributos de los productos. Las unidades de medida se actualizan y se eliminan utilizando el método de petición PATCH. Para eliminar una unidad de medida, pase un valor vacío como clave. En la actualidad, las operaciones soportadas con unidades de medida son update, delete y retrieve. En este momento, no se admite la operación de add.
      A continuación, se muestra el punto final de este servicio:
      https://localhost:3737/search/resources/api/v2/configuration?nodeName=uoms;locale=en_US
      Ejemplo uoms.json para unidades de medida:
      { "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" }
      Para habilitar el emparejador de dimensiones, llame al método POST de configuración en el nodo de dimensiones del siguiente punto final:
      “http://{host}:{port}/search/resources/api/v2/configuration?nodeName=dimensions&locale=en_US"
      Las configuraciones se introducen en formato JSON, como en el ejemplo siguiente:
      { "pattern": “LWH” } 
      Puede actualizar una configuración utilizando el método PATCH. Solo se puede especificar un patrón en el nodo de dimensiones de ZooKeeper y, actualmente, solo se permite la configuración regional en_US.
    6. Puede utilizar el nodo index_field_relevancy para añadir el valor de impulso para un campo de índice en el momento de la consulta. Se utiliza para impulsar el resultado basado en el campo. Puede añadir o actualizar usando el método POST; para eliminar el valor existente, utilice el método de PATCH para el punto final pasando un valor vacío como su clave.
      El punto final del servicio es:
      https://data_environment_hostname:30921/search/resources/api/v2/configuration?nodeName=index_field_relevancy
      A continuación, se indican datos de ejemplo para la relevancia del campo de índice.
      { "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" }