Collecte de données MustGather liées à la recherche basée sur Elasticsearch pour les problèmes d'exécution du service Query
Préparez les informations MustGather suivantes avant de contacter le support HCL en vue de résoudre les problèmes liés à Elasticsearch.
Before you begin
Ce MustGather utilisera 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 servir à enquêter sur la cause des problèmes généraux d'exécution basés sur Elasticsearch. Si vous essayez de répondre à l'une des questions suivantes, voici le MustGather à utiliser :
- Pourquoi le nombre de résultats de recherche diffère de celui attendu ?
- Pourquoi l'ordre des résultats de recherche diffère-t-il de celui attendu ?
Procedure
- 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.
- 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.
-
Collectez tous les fichiers de trace générés dans le service Query :
/app/ESQueryService/logs/
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¤cy=USD&langId=-1&profileName=HCL_V2_findProductsBySearchTermWithPrice - Définition du profil de recherche
- Le profil de recherche contient les principales informations contextuelles que nous utiliserons pour construire la requête de recherche, puis pour traiter les résultats de la recherche. Il est donc important de confirmer 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 le HCL_V2_findProductsBySearchTermWithPrice recherché :
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, pour rechercher la configuration HCL_V2_findProductsBySearchTermWithPrice dans l'environnement Auth :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}]]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 :
Si vous souhaitez confirmer que le système utilise bienBasic NLP, vous pouvez alors rechercher la sortie de traçage de SearchNLPSupportProvider.invoke() :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.SearchNLPColorMMProviderHelperIf you want to check that we are using Basic NLP TRACE c.h.c.s.i.e.p.SearchNLPSupportProvider.invoke:123 - Search NLP providers: com.hcl.commerce.search.internal.expression.provider.SearchNLPCustomPartNumberHelper com.hcl.commerce.search.internal.expression.provider.SearchBasicNLPCategorySearchProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPWhiteSpaceProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPCurrencySymbolProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPLowerCaseProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPSpellCorrectionProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPExcludedTermProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPFractionalNumberHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPDMMProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchMultiwordFilterProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchBasicNLPStopwordProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPPriceFilterProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchBasicNLPPOSAndNERProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchNLPColorMMProviderHelper com.hcl.commerce.search.internal.expression.provider.SearchBasicNLPBoostQueryProviderHelperS'il y a un fournisseur NLP en particulier que vous ne souhaitez pas utiliser ou si vous souhaitez inclure vos propres fournisseurs NLP, consultez notre page 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
- Les requêtes HCL Commerce Search 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.*"]}}} - 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¤cy=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¤cy=USD&langId=-1&profileName=HCL_V2_findProductsBySearchTermWithPrice, recordSetTotalMatches=22, resourceName=productview, facetView=[], metaData={price=1}},[]>