HCL Commerce Version 9.1.2.0 or later

Collecte de données MustGather de recherche basées sur Elasticsearch pour le traitement du langage naturel (NLP)

Préparez les informations MustGather suivantes avant d'appeler la prise en charge d'HCL pour vous aider à identifier et résoudre les incidents du processus.

Before you begin

Ce MustGather utilise le traçage au niveau de la requête afin de n'appliquer le traçage qu'à la requête Query REST utilisée pour le scénario, plutôt que de l'appliquer au niveau du service, ce qui aurait pour effet de l'appliquer à toutes les requêtes Query REST en cours de traitement dans l'application. Pour activer le traçage au niveau de la requête, suivez les étapes décrites dans Journalisation et dépannage des services Ingest et Query.

About this task

Ce MustGather peut être utilisé pour enquêter sur la cause des problèmes de NLP basés sur Elasticsearch. Si vous essayez de répondre à l’une des questions suivantes, voici le MustGather à utiliser :

  1. Pourquoi mes filtres de couleurs, dimensions ou prix ne sont-ils pas reconnus dans la recherche par terme ?
  2. Pourquoi ne vois-je des correspondances que pour un seul terme parmi l'ensemble des termes de ma phrase de recherche ?
  3. Pourquoi ce terme de recherche est-il incorrectement classé (par exemple en tant qu'attribut, mesure, catégorie, etc.) alors que mon intention est différente pour ce terme de recherche ?
  4. Comment le NLP transforme-t-il ma phrase de recherche et à quoi ressemblera le résultat une fois l'analyse NLP terminée ?

Procedure

  1. Confirmez la requête Query REST qui s'applique au scénario que vous examinez. En cas de doute, et si vous utilisez une vitrine basée sur React, vous pouvez utiliser l'onglet réseau Outils de développement de votre navigateur lorsque vous parcourez la vitrine afin de reproduire le problème et d'afficher le ou les appels Query REST en cours.
  2. Exécutez la requête Query REST avec un en-tête supplémentaire "X-Log-Level=TRACE". Ne l'ajoutez pas à votre requête REST via un paramètre d'URL.
  3. Collectez tous les fichiers de trace générés dans le service Query :
    /app/ESQueryService/logs/​ 
  4. Collectez les réponses JSON pour les requêtes REST suivantes :
    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. Collectez les fichiers NER à partir du service Query :
    /opt/WebSphere/Liberty/usr/servers/default/custom-ner-*.txt

What to do next

Examen de la requête initiale
Le début du scénario correspond au traitement de la requête REST entrante auprès du service Query. Le gestionnaire de ressources utilisé sera basé sur l'API invoquée. Par exemple, lors d'une recherche sur la vitrine pour "couch", le gestionnaire V2ProductResource sera utilisé du fait de l'utilisation d'un appel API /api/v2/products. Par exemple :
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 
Définition du profil de recherche
Le profil de recherche contient les principales informations contextuelles utilisées pour construire la requête de recherche, puis pour traiter les résultats de la recherche. Il est important de s'assurer que le profil de recherche correspond bien à votre comportement attendu pour cette recherche. Afin de valider la définition du profil de recherche utilisée, vous pouvez rechercher la sortie de traçage de SearchConfigurationRegistry.getSearchProfile(). Par exemple, voici la définition du profil de recherche pour 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 cela ne correspond pas à la définition de profil attendue, vous pouvez valider votre configuration à partir du point de terminaison de l'API Query du profil de recherche. Par exemple, utilisez le point de terminaison suivant pour rechercher la configuration HCL_V2_findProductsBySearchTermWithPrice dans l'environnement Auth :

GET https://data_environment_hostname:30921/search/resources/api/v2/documents/profiles/HCL_V2_findProductsBySearchTermWithPrice 
Traitement du langage naturel (NLP)
Commerce Search utilise le NLP pour procéder à une analyse du ou des termes de recherche utilisés afin d'identifier l'intention sous-jacente aux termes utilisés et de modifier la recherche en conséquence. Si les résultats obtenus sont inattendus, cela peut être dû au fait que cette analyse NLP fonctionne d'une manière à laquelle vous ne vous attendiez pas, ou qu'elle prend en compte des points de données supplémentaires que vous n'avez peut-être pas envisagés pour cette recherche.

Tout d’abord, afin d'identifier les fournisseurs de NLP qui seront utilisés pour la recherche, vous pouvez rechercher la sortie de traçage de SearchNLPSupportProvider.invoke(). Par exemple, voici la sortie de traçage lors de l'utilisation du profil NLP par défaut :

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 

S'il y a un fournisseur NLP en particulier que vous ne souhaitez pas utiliser ou si vous souhaitez inclure vos propres fournisseurs NLP, consultez Profils de processeur de langage naturel pour plus d'informations.

Passez ensuite en revue chacun des fournisseurs de NLP pour voir s'il a produit l'effet escompté sur la recherche. Par exemple, en cas de synonymes (termes de recherche associés, ou STA) tels que « couch » (canapé) et « sofa », nous pouvons confirmer que SearchNLPSTAExpansionProviderHelper a bien saisi ces synonymes en examinant la sortie de traçage produite par ce fournisseur 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 
Requête Elasticsearch
Nos requêtes Elasticsearch pouvant être mises en cache, nous pouvons utiliser la sortie de traçage de SearchResponseCache.myInvoke() pour voir la requête Elasticsearch utilisée pour notre recherche. Par exemple, voici la requête Elasticsearch générée pour la recherche "couch" précédente :
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.*"]}}} 

Etant donné que l'intégralité de la requête Elasticsearch est imprimée dans le traçage, il est possible d'exécuter vous-même directement cette requête JSON sur votre index de produit. Par exemple, voici comment cette même requête Elasticsearch pourrait être exécutée directement :

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.*" ] } } }
Version finale de la réponse REST
Pour trouver la fin du traitement de la requête REST, vous pouvez consulter la sortie de traçage pour AbstractSearchResource.executeSearch(). Par exemple, voici la version finale de la réponse REST pour la recherche "couch" (condensée par souci de concision) :
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étriques NLP dans la réponse REST
La section metaData de la réponse REST capturera diverses modifications de NLP apportées à la recherche afin d'offrir plus de contexte sur les résultats en fonction de l'expression de recherche d'origine. Par exemple, voici l'exemple de metaData pour la recherche "red couche 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]" } ] }