HCL Commerce Version 9.1.2.0 or later

Recopilación de datos MustGather relacionados con la búsqueda basada en Elasticsearch para el procesamiento de lenguaje natural (NLP)

Prepare la siguiente información MustGather antes de llamar al soporte de HCL para ayudarle con el proceso de resolución de problemas.

Before you begin

Este MustGather utiliza el rastreo a nivel de solicitud para aplicar únicamente el rastreo a la solicitud de REST de consulta que se utiliza para el escenario, en lugar de aplicar el rastreo a nivel de servicio, que aplicaría este a todas las solicitudes de REST de consulta que se procesen en la aplicación. Para habilitar el rastreo a nivel de solicitud, siga los pasos de Registrar y solucionar problemas de los servicios de recopilación y consulta.

About this task

Este MustGather se puede utilizar para investigar la causa de los problemas de NLP basados ​​en Elasticsearch. Si está intentando responder una de las siguientes preguntas, este es el MustGather que querrá utilizar:

  1. ¿Por qué mis colores, dimensiones o filtros de precios no se reconocen en la búsqueda de términos de búsqueda?
  2. ¿Por qué solo veo coincidencias en un solo término del conjunto completo de términos en mi frase de búsqueda?
  3. ¿Por qué este término de búsqueda se clasifica de forma incorrecta (por ejemplo, como atributo, medida, categoría, etc.) cuando tengo otra intención para este término de búsqueda?
  4. ¿Cómo transforma el NLP mi frase de búsqueda y qué aspecto tiene después de que se haya completado todo el análisis de NLP?

Procedure

  1. Confirme la solicitud de REST de consulta que se aplica al escenario que está investigando. Si no está seguro de qué es esto y está utilizando un escaparate basado en React, puede usar la pestaña Red de las herramientas de desarrollador de su navegador al desplazarse por el escaparate para reproducir el problema y ver la llamada o llamadas de REST de consultas que se realizan.
  2. Ejecute la solicitud de REST de consulta con una cabecera adicional "X-Log-Level=TRACE". No añada esto a su solicitud de REST mediante un parámetro de URL.
  3. Recopile todos los archivos de rastreo generados en el servicio de consulta:
    /app/ESQueryService/logs/​ 
  4. Recopile las respuestas JSON para las siguientes solicitudes de REST:
    GET https://{{data_environment_hostname}}:30921/search/resources/api/v2/configuration?nodeName=colors&locale={{locale}} GET https://{{data_environment_hostname}}:30921/search/resources/api/v2/configuration?nodeName=component&envType={{locale}} GET https://{{data_environment_hostname}}:30921/search/resources/api/v2/configuration?nodeName=filter&locale={{locale}} GET https://{{data_environment_hostname}}:30921/search/resources/api/v2/configuration?nodeName=uoms&locale={{locale}} GET https://{{data_environment_hostname}}:30921/search/resources/api/v2/documents/profiles/?profileType=NLP 
  5. Recopile los archivos NER del servicio de consulta:
    /opt/WebSphere/Liberty/usr/servers/default/custom-ner-*.txt

What to do next

Revisión de la solicitud inicial
El comienzo del escenario será el procesamiento de la solicitud de REST entrante al servicio de consulta. El manejador de recursos utilizado se basará en la API invocada. Por ejemplo, al realizar una búsqueda en el escaparate de "couch", se utilizará el manejador V2ProductResource debido al uso de una llamada de API /api/v2/products. Por ejemplo:
2023-06-13T20:17:29.024Z [Default Executor-thread-52975] [7244267430895139116] TRACE c.h.c.search.rest.V2ProductResource.findProducts:157 - URL: https://search:30901/search/resources/api/v2/products?storeId=11&searchTerm=couch&limit=12&offset=0&contractId=-11005&currency=USD&langId=-1&profileName=HCL_V2_findProductsBySearchTermWithPrice 
Definición de perfil de búsqueda
El perfil de búsqueda contiene la información contextual principal que utiliza para crear la consulta de búsqueda y luego procesar los resultados de la búsqueda. Es importante verificar que el perfil de búsqueda coincida con el comportamiento esperado para esta búsqueda. Para validar la definición del perfil de búsqueda que se utiliza, puede buscar el resultado del rastreo en SearchConfigurationRegistry.getSearchProfile(). Por ejemplo, aquí se muestra está la definición del perfil de búsqueda para HCL_V2_findProductsBySearchTermWithPrice:
2023-06-13T20:17:29.249Z [Default Executor-thread-52975] [7244267430895139116] TRACE c.h.c.s.i.c.SearchConfigurationRegistry.getSearchProfile:368 - ENTRY profileName:HCL_V2_findProductsBySearchTermWithPrice resourceName:productview resourceURI:/api/v2/products?searchTerm 2023-06-13T20:17:29.249Z [Default Executor-thread-52975] [7244267430895139116] TRACE c.h.c.s.i.c.SearchConfigurationRegistry.getSearchProfile:382 - EXIT searchProfile: SearchProfile [parentProfileName=, profileName=HCL_V2_findProductsBySearchTermWithPrice, indexName=product, query=Query [params=[{DynamicKitReturnPrice=true}], queryFields=[default.search.text, default.search.normalized, default.search.text_*, default.sku.normalized, natural.keywords.normalized], sortFields={1=manufacturer.raw asc, 2=name.normalized asc, 3=offer.* asc, 4=offer.* desc}, responseFields=[id.catentry, id.store, buyable, identifier.sku.raw, name.raw, name.override.raw, description.raw, description.override.raw, url.thumbnail, url.override.thumbnail, keyword.text, keyword.override.text, manufacturer.raw, id.member, seller.raw, type, prices.*, path.*, relationship.item.id, relationship.product.id, identifier.mpn.raw, attribute.*, kit.preconfigured, kit.model, kit.URL, kit.default_configuration, kit.parent.model, kit.configurable, kit.parent.configurable, start, end, *_display, url.seo, url.override.seo], highlight=null, spellcheck={limit=5}]] 

Si esto no coincide con la definición de perfil esperada, puede validar su configuración desde el punto final de la API de consulta del perfil de búsqueda. Por ejemplo, utilice el siguiente punto final para buscar la configuración HCL_V2_findProductsBySearchTermWithPrice en el entorno de autenticación:

GET https://data_environment_hostname:30921/search/resources/api/v2/documents/profiles/HCL_V2_findProductsBySearchTermWithPrice 
Procesamiento del lenguaje natural (NLP)
La búsqueda de Commerce utiliza NLP para realizar análisis del término o términos de búsqueda que se utilizan para identificar la intención detrás de los términos utilizados y modificar la búsqueda como corresponda. Si ve resultados inesperados, puede deberse a que este análisis de NLP se ha realizado de una manera imprevista, o está teniendo en cuenta puntos de datos adicionales que quizás no esté considerando para esta búsqueda.

En primer lugar, para identificar los proveedores de NLP que se utilizarán para la búsqueda, puede buscar el resultado de rastreo de SearchNLPSupportProvider.invoke(). Por ejemplo, este es el resultado del rastreo cuando se utiliza el perfil de NLP predeterminado:

2023-06-13T20:17:29.752Z [Default Executor-thread-52975] [7244267430895139116] TRACE c.h.c.s.i.e.p.SearchNLPSupportProvider.invoke:107 - Search NLP providers: com.hcl.commerce.search.internal.expression.provider.SearchNLPPartNumberProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPWhiteSpaceProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPCurrencySymbolProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPSpellCorrectionProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPExcludedTermProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPNumberFormatterProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPSTAExpansionProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPDependenciesParsingProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPMultiwordTermProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPLowerCaseProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPDMMProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPSpecialCharacterProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchMultiwordFilterProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPStopwordProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPWordToNumberProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPPriceFilterProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPPOSAndNERProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPColorMMProviderHelper 

Si hay un proveedor de NLP en particular que no desea utilizar, o desea incluir sus propios proveedores de NLP, consulte Perfiles de procesador de lenguaje natural (NLP) para obtener más información.

A continuación, querrá revisar cada uno de los proveedores de NLP para comprobar si ha tenido el efecto deseado en la búsqueda. Por ejemplo, si tenemos un sinónimo (Asociación de términos de búsqueda o STA) entre couch y sofa, podemos confirmar que SearchNLPSTAExpansionProviderHelper ha elegido este sinónimo al revisar el resultado del rastreo de este proveedor de NLP:

2023-06-13T20:17:30.158Z [Default Executor-thread-52975] [7244267430895139116] TRACE c.h.c.s.i.e.p.SearchNLPSTAExpansionProviderHelper.performSTAExpansion:164 - ENTRY 2023-06-13T20:17:30.159Z [Default Executor-thread-52975] [7244267430895139116] TRACE c.h.c.s.i.e.p.SearchNLPSTAExpansionProviderHelper.performSTAExpansion:165 - search term before STA expansion : couch ... 2023-06-13T20:17:30.529Z [Default Executor-thread-52975] [7244267430895139116] TRACE c.h.c.s.i.e.p.SearchNLPSTAExpansionProviderHelper.getNodeData:592 - nodeData : {sofa,couch=s} 2023-06-13T20:17:30.529Z [Default Executor-thread-52975] [7244267430895139116] TRACE c.h.c.s.i.e.p.SearchNLPSTAExpansionProviderHelper.getNodeData:594 - EXIT ... 2023-06-13T20:17:31.794Z [Default Executor-thread-52975] [7244267430895139116] TRACE c.h.c.s.i.e.p.SearchNLPSTAExpansionProviderHelper.performSTAExpansion:468 - EXIT 2023-06-13T20:17:31.794Z [Default Executor-thread-52975] [7244267430895139116] TRACE c.h.c.s.i.e.p.SearchNLPSTAExpansionProviderHelper.performSTAExpansion:470 - search term after STA expansion : sofa couch 
Consulta de Elasticsearch
Dado que nuestras consultas de ElasticSearch se pueden almacenar en memoria caché, podemos usar el resultado de rastreo de SearchResponseCache.myInvoke() para ver la consulta de Elasticsearch que se utiliza para nuestra búsqueda. Por ejemplo, aquí está la consulta de Elasticsearch que se genera para la búsqueda anterior de "couch":
2023-06-13T20:17:32.468Z [Default Executor-thread-52975] [7244267430895139116] TRACE c.h.c.s.i.e.p.SearchResponseCache.myInvoke:562 - Cache name: com.hcl.commerce.search.internal.expression.processor.SearchExpressionProcessor Index name: auth.12001.product Source builder: {"from":0,"size":12,"query":{"function_score":{"query":{"bool":{"filter":[{"query_string":{"query":"workspace_name : \"Base\"","fields":[],"type":"best_fields","default_operator":"or", "max_determinized_states":10000,"enable_position_increments":true,"fuzziness":"AUTO","fuzzy_prefix_length":0,"fuzzy_max_expansions":50,"phrase_slop":0,"escape":false,"auto_generate_synonyms_phrase_query":true, "fuzzy_transpositions":true,"boost":1.0}},{"query_string":{"query":"-((type:product AND relationship.has_sku:true) OR (type:variant AND state:false)) AND (relationship.product.group:*)","fields":[],"type":"best_fields", "default_operator":"or","max_determinized_states":10000,"enable_position_increments":true,"fuzziness":"AUTO","fuzzy_prefix_length":0,"fuzzy_max_expansions":50,"phrase_slop":0,"escape":false, "auto_generate_synonyms_phrase_query":true,"fuzzy_transpositions":true,"boost":1.0}},{"query_string":{"query":"id.catalog:\"11501\"","fields":[],"type":"best_fields","default_operator":"or", "max_determinized_states":10000,"enable_position_increments":true,"fuzziness":"AUTO","fuzzy_prefix_length":0,"fuzzy_max_expansions":50,"phrase_slop":0,"escape":false,"auto_generate_synonyms_phrase_query":true, "fuzzy_transpositions":true,"boost":1.0}},{"query_string":{"query":"id.store:(\"11\" \"12001\")","fields":[],"type":"best_fields","default_operator":"or","max_determinized_states":10000,"enable_position_increments":true, "fuzziness":"AUTO","fuzzy_prefix_length":0,"fuzzy_max_expansions":50,"phrase_slop":0,"escape":false,"auto_generate_synonyms_phrase_query":true,"fuzzy_transpositions":true,"boost":1.0}}, {"query_string":{"query":"id.language:\"-1\"","fields":[],"type":"best_fields","default_operator":"or","max_determinized_states":10000,"enable_position_increments":true,"fuzziness":"AUTO","fuzzy_prefix_length":0, "fuzzy_max_expansions":50,"phrase_slop":0,"escape":false,"auto_generate_synonyms_phrase_query":true,"fuzzy_transpositions":true,"boost":1.0}},{"query_string":{"query":"displayable:true","fields":[],"type":"best_fields", "default_operator":"or","max_determinized_states":10000,"enable_position_increments":true,"fuzziness":"AUTO","fuzzy_prefix_length":0,"fuzzy_max_expansions":50,"phrase_slop":0,"escape":false, "auto_generate_synonyms_phrase_query":true,"fuzzy_transpositions":true,"boost":1.0}},{"query_string":{"query":"(*:* AND -_exists_:facets.7000000000000001010.value.raw)","fields":[],"type":"best_fields","default_operator":"or", "max_determinized_states":10000,"enable_position_increments":true,"fuzziness":"AUTO","fuzzy_prefix_length":0,"fuzzy_max_expansions":50,"phrase_slop":0,"escape":false,"auto_generate_synonyms_phrase_query":true,"fuzzy_transpositions":true, "boost":1.0}}],"should":[{"query_string":{"query":"(\"sofa\" OR \"couch\")","fields":["default.search.normalized^1.0","default.search.text^1.0","default.search.text_en_US^1.0","default.sku.normalized^1.0","natural.keywords.normalized^100.0", "natural.nouns.normalized^100.0"],"type":"most_fields","default_operator":"and","max_determinized_states":10000,"enable_position_increments":true,"fuzziness":"AUTO","fuzzy_prefix_length":0,"fuzzy_max_expansions":50, "phrase_slop":0,"lenient":true,"escape":false,"auto_generate_synonyms_phrase_query":true,"fuzzy_transpositions":true,"boost":1.0}},{"query_string":{"query":"(\"sofa\" OR \"couch\")","fields":["default.search.normalized^1.0", "default.search.text^1.0","default.search.text_en_US^1.0","default.sku.normalized^1.0","natural.keywords.normalized^100.0","natural.nouns.raw^100.0"],"type":"most_fields","default_operator":"and","max_determinized_states":10000, "enable_position_increments":true,"fuzziness":"AUTO","fuzzy_prefix_length":0,"fuzzy_max_expansions":50,"phrase_slop":0,"lenient":true,"escape":false,"auto_generate_synonyms_phrase_query":true,"fuzzy_transpositions":true,"boost":1.0}}], "adjust_pure_negative":true,"minimum_should_match":"1","boost":1.0}},"functions":[{"filter":{"match_all":{"boost":1.0}},"script_score":{"script":{"id":"boost-script-param-1","params":{"boostFactor":10.0,"param1":"couch"}}}}], "score_mode":"sum","boost_mode":"sum","max_boost":3.4028235E38,"boost":1.0}},"explain":true,"_source":false,"stored_fields":["id.catentry","id.store","buyable","identifier.sku.raw","manufacturer.raw","id.member","seller.raw","type", "prices.-11005.usd","path.11001","path.11501","path.11502","relationship.item.id","relationship.product.id","identifier.mpn.raw","attribute.*","kit.preconfigured","kit.model","kit.URL","kit.default_configuration","kit.parent.model", "kit.configurable","kit.parent.configurable","start","end","*_display","prices.list.usd","prices.offer.usd","name.11.raw","description.11.raw","url.11.thumbnail","keyword.11.text","url.11.seo","url.12001.thumbnail","url.12001.seo", "name.12001.raw","description.12001.raw","keyword.12001.text"],"track_total_hits":2147483647,"aggregations":{"itemCount":{"cardinality":{"field":"relationship.product.group"}}}, "suggest":{"correction":{"text":"couch","term":{"field":"default.correction.text","size":5,"suggest_mode":"MISSING","accuracy":0.3,"sort":"SCORE","string_distance":"INTERNAL","max_edits":2,"max_inspections":5, "max_term_freq":0.01,"prefix_length":2,"min_word_length":4,"min_doc_freq":0.0}}},"collapse":{"field":"relationship.product.group","inner_hits":{"name":"data","ignore_unmapped":false,"from":0,"size":20000,"version":false, "seq_no_primary_term":false,"explain":false,"track_scores":false,"stored_fields":["url.12001.thumbnail","url.11.thumbnail","id.*","prices.*"]}}} 

Dado que toda la consulta de ElasticSearch está impresa en el rastreo, puede tomar esta consulta JSON y ejecutarla usted mismo directamente en el índice de su producto. Por ejemplo, así es como se podría ejecutar directamente esta misma consulta de ElasticSearch:

POST http://{{es_hostname_port}}/auth.12001.product/_search { "from": 0, "size": 12, "query": { "function_score": { "query": { "bool": { "filter": [ { "query_string": { "query": "workspace_name : \"Base\"", "fields": [], "type": "best_fields", "default_operator": "or", "max_determinized_states": 10000, "enable_position_increments": true, "fuzziness": "AUTO", "fuzzy_prefix_length": 0, "fuzzy_max_expansions": 50, "phrase_slop": 0, "escape": false, "auto_generate_synonyms_phrase_query": true, "fuzzy_transpositions": true, "boost": 1.0 } }, { "query_string": { "query": "-((type:product AND relationship.has_sku:true) OR (type:variant AND state:false)) AND (relationship.product.group:*)", "fields": [], "type": "best_fields", "default_operator": "or", "max_determinized_states": 10000, "enable_position_increments": true, "fuzziness": "AUTO", "fuzzy_prefix_length": 0, "fuzzy_max_expansions": 50, "phrase_slop": 0, "escape": false, "auto_generate_synonyms_phrase_query": true, "fuzzy_transpositions": true, "boost": 1.0 } }, { "query_string": { "query": "id.catalog:\"11501\"", "fields": [], "type": "best_fields", "default_operator": "or", "max_determinized_states": 10000, "enable_position_increments": true, "fuzziness": "AUTO", "fuzzy_prefix_length": 0, "fuzzy_max_expansions": 50, "phrase_slop": 0, "escape": false, "auto_generate_synonyms_phrase_query": true, "fuzzy_transpositions": true, "boost": 1.0 } }, { "query_string": { "query": "id.store:(\"11\" \"12001\")", "fields": [], "type": "best_fields", "default_operator": "or", "max_determinized_states": 10000, "enable_position_increments": true, "fuzziness": "AUTO", "fuzzy_prefix_length": 0, "fuzzy_max_expansions": 50, "phrase_slop": 0, "escape": false, "auto_generate_synonyms_phrase_query": true, "fuzzy_transpositions": true, "boost": 1.0 } }, { "query_string": { "query": "id.language:\"-1\"", "fields": [], "type": "best_fields", "default_operator": "or", "max_determinized_states": 10000, "enable_position_increments": true, "fuzziness": "AUTO", "fuzzy_prefix_length": 0, "fuzzy_max_expansions": 50, "phrase_slop": 0, "escape": false, "auto_generate_synonyms_phrase_query": true, "fuzzy_transpositions": true, "boost": 1.0 } }, { "query_string": { "query": "displayable:true", "fields": [], "type": "best_fields", "default_operator": "or", "max_determinized_states": 10000, "enable_position_increments": true, "fuzziness": "AUTO", "fuzzy_prefix_length": 0, "fuzzy_max_expansions": 50, "phrase_slop": 0, "escape": false, "auto_generate_synonyms_phrase_query": true, "fuzzy_transpositions": true, "boost": 1.0 } }, { "query_string": { "query": "(*:* AND -_exists_:facets.7000000000000001010.value.raw)", "fields": [], "type": "best_fields", "default_operator": "or", "max_determinized_states": 10000, "enable_position_increments": true, "fuzziness": "AUTO", "fuzzy_prefix_length": 0, "fuzzy_max_expansions": 50, "phrase_slop": 0, "escape": false, "auto_generate_synonyms_phrase_query": true, "fuzzy_transpositions": true, "boost": 1.0 } } ], "should": [ { "query_string": { "query": "(\"sofa\" OR \"couch\")", "fields": [ "default.search.normalized^1.0", "default.search.text^1.0", "default.search.text_en_US^1.0", "default.sku.normalized^1.0", "natural.keywords.normalized^100.0", "natural.nouns.normalized^100.0" ], "type": "most_fields", "default_operator": "and", "max_determinized_states": 10000, "enable_position_increments": true, "fuzziness": "AUTO", "fuzzy_prefix_length": 0, "fuzzy_max_expansions": 50, "phrase_slop": 0, "lenient": true, "escape": false, "auto_generate_synonyms_phrase_query": true, "fuzzy_transpositions": true, "boost": 1.0 } }, { "query_string": { "query": "(\"sofa\" OR \"couch\")", "fields": [ "default.search.normalized^1.0", "default.search.text^1.0", "default.search.text_en_US^1.0", "default.sku.normalized^1.0", "natural.keywords.normalized^100.0", "natural.nouns.raw^100.0" ], "type": "most_fields", "default_operator": "and", "max_determinized_states": 10000, "enable_position_increments": true, "fuzziness": "AUTO", "fuzzy_prefix_length": 0, "fuzzy_max_expansions": 50, "phrase_slop": 0, "lenient": true, "escape": false, "auto_generate_synonyms_phrase_query": true, "fuzzy_transpositions": true, "boost": 1.0 } } ], "adjust_pure_negative": true, "minimum_should_match": "1", "boost": 1.0 } }, "functions": [ { "filter": { "match_all": { "boost": 1.0 } }, "script_score": { "script": { "id": "boost-script-param-1", "params": { "boostFactor": 10.0, "param1": "couch" } } } } ], "score_mode": "sum", "boost_mode": "sum", "max_boost": 3.4028235E38, "boost": 1.0 } }, "explain": true, "_source": false, "stored_fields": [ "id.catentry", "id.store", "buyable", "identifier.sku.raw", "manufacturer.raw", "id.member", "seller.raw", "type", "prices.-11005.usd", "path.11001", "path.11501", "path.11502", "relationship.item.id", "relationship.product.id", "identifier.mpn.raw", "attribute.*", "kit.preconfigured", "kit.model", "kit.URL", "kit.default_configuration", "kit.parent.model", "kit.configurable", "kit.parent.configurable", "start", "end", "*_display", "prices.list.usd", "prices.offer.usd", "name.11.raw", "description.11.raw", "url.11.thumbnail", "keyword.11.text", "url.11.seo", "url.12001.thumbnail", "url.12001.seo", "name.12001.raw", "description.12001.raw", "keyword.12001.text" ], "track_total_hits": 2147483647, "aggregations": { "itemCount": { "cardinality": { "field": "relationship.product.group" } } }, "suggest": { "correction": { "text": "couch", "term": { "field": "default.correction.text", "size": 5, "suggest_mode": "MISSING", "accuracy": 0.3, "sort": "SCORE", "string_distance": "INTERNAL", "max_edits": 2, "max_inspections": 5, "max_term_freq": 0.01, "prefix_length": 2, "min_word_length": 4, "min_doc_freq": 0.0 } } }, "collapse": { "field": "relationship.product.group", "inner_hits": { "name": "data", "ignore_unmapped": false, "from": 0, "size": 20000, "version": false, "seq_no_primary_term": false, "explain": false, "track_scores": false, "stored_fields": [ "url.12001.thumbnail", "url.11.thumbnail", "id.*", "prices.*" ] } } }
Versión final de la respuesta de REST
Para encontrar el final del procesamiento de la solicitud de REST, puede consultar el resultado de rastreo de AbstractSearchResource.executeSearch(). Por ejemplo, aquí está la versión final de la respuesta de REST para la búsqueda de "couch" (condensada por brevedad):
2023-06-13T20:17:33.782Z [Default Executor-thread-52975] [7244267430895139116] TRACE c.h.c.s.rest.AbstractSearchResource.executeSearch:505 - Result : <200 OK OK,{catalogEntryView=[{hasSingleSKU=false, buyable=true, resourceId=https://search:30901/search/resources/api/v2/products?storeId=11&searchTerm=couch&limit=12&offset=0&contractId=-11005&currency=USD&langId=-1&profileName=HCL_V2_findProductsBySearchTermWithPrice, uniqueID=14033, thumbnailRaw=/EmeraldCAS/images/catalog/livingroom/furniture/chair4_b1_350.jpg, thumbnail=/hclstore/EmeraldCAS/images/catalog/livingroom/furniture/chair4_b1_350.jpg, sellerId=7000000000000003501, parentCatalogGroupID=/10501/10502, manufacturer=Stonehenge, shortDescription=Very cozy short design single sofa., catalogEntryTypeCode=ProductBean, groupingProperties={groupOfferPriceRange=[Ljava.lang.Object;@682c66e4, groupListPriceRange=[Ljava.lang.Object;@c25e4f60, groupCount=4, groupOwner=14033, groupMaxPriceValue=749.99, groupHero=14035, groupMinPriceValue=749.99}, name=Stonehenge UltraCozy Single Sofa, partNumber=LR-FNTR-0004, storeID=11, seo={href=/stonehenge-ultracozy-single-sofa-lr-fntr-0004}, price=[{usage=Display, description=L, currency=USD, value=800.0}, {usage=Offer, contractId=-11005, description=I, currency=USD, value=749.99}], attributes=[{identifier=Color, attribute.group= , attribute.natural=["Brown","Dark Grey","Seaweed","Denim"], usage=Defining, values=[{sequence=[2.0, 10.0, 10.0, 10.0], identifier=[brown, darkgrey, seaweed, denim], unitOfMeasure=[one, one, one, one], unitID=[C62, C62, C62, C62], image1=[/EmeraldCAS/images/catalog/swatches/sw_brown.png, /EmeraldCAS/images/catalog/swatches/sw_darkgrey.png, /EmeraldCAS/images/catalog/swatches/sw_seaweed.png, /EmeraldCAS/images/catalog/swatches/sw_denim.png], value=[Brown, Dark Grey, Seaweed, Denim], image1path=[/hclstore/EmeraldCAS/images/catalog/swatches/sw_brown.png, /hclstore/EmeraldCAS/images/catalog/swatches/sw_darkgrey.png, /hclstore/EmeraldCAS/images/catalog/swatches/sw_seaweed.png, /hclstore/EmeraldCAS/images/catalog/swatches/sw_denim.png], uniqueID=[7000000000000003002, 7000000000000003010, 7000000000000003014, 7000000000000003020]}], displayable=true, merchandisable=true, searchable=true, sequence=1.0, storeDisplay=false, name=Color, attribute.store=12001, facetable=true, comparable=true, uniqueID=7000000000000000501, swatchable=false}]}, ... ], displayable=true, merchandisable=true, searchable=true, sequence=1.0, storeDisplay=false, name=Color, attribute.store=12001, facetable=true, comparable=true, uniqueID=7000000000000000501, swatchable=false}]}], recordSetComplete=false, recordSetCount=12, recordSetStartNumber=0, recordSetTotal=22, resourceId=https://search:30901/search/resources/api/v2/products?storeId=11&searchTerm=couch&limit=12&offset=0&contractId=-11005&currency=USD&langId=-1&profileName=HCL_V2_findProductsBySearchTermWithPrice, recordSetTotalMatches=22, resourceName=productview, facetView=[], metaData={price=1}},[]>
Métricas de NLP en la respuesta de REST
La sección metaData de la respuesta REST capturará varios cambios de NLP que se han realizado en la búsqueda, para ayudar a proporcionar contexto sobre los resultados según la frase de búsqueda original. Por ejemplo, aquí está el ejemplo de metaData de la búsqueda de "red couch under 600":
 "metaData": { "price": "1", "nlpParsing": [ { "searchTerm": "red couch under 600", "sta": "[couch : [\"sofa\" OR \"couch\"]]", "price": "under 600 --> [LTE:600]", "pos": "ADJECTIVE --> [red]", "color": "COLOR --> [red]" } ] }