HCL Commerce Version 9.1.12.0 or later

Génération de requêtes pour Elasticsearch

Les chaînes de recherche entrantes sont transmises via un système NLP (Natural Language Processing) et les requêtes sont exécutées sur la classification NLP générée. Lorsque des synonymes sont trouvés, ils sont traités séparément. La compréhension de la façon dont les requêtes sont regroupées et exécutées vous aidera à personnaliser et à optimiser votre système.

Lors d'une recherche par mot clé, le terme de recherche entré passe par le traitement NLP, comme décrit dans Traitement du langage naturel (NLP) dans la version 9.1. Une fois que le terme de recherche est analysé par l'analyseur NLP dans le service de requête, la requête de recherche principale est générée en fonction des classifications. En cas d'élargissement aux synonymes, les termes étendus ne passent pas par l'analyseur NLP. Tous les mots clés séparés par des virgules issus de synonymes sont ajoutés à la clause SHOULD de la requête Elasticsearch générée avec une condition de correspondance minimale should égale à 1.

Une fois que le terme de recherche a été entièrement analysé, chaque classification NLP obtient sa propre liste de mots clés analysés. Une requête Elasticsearch est générée à partir de chaque mot clé de la liste et la requête générée est ajoutée à la clause MUST de la requête. L'exception est la classification des adjectifs. Des adjectifs sont ajoutés à la clause SHOULD avec une correspondance should minimale = 2<70 % (configuration par défaut). Ici 2<70%, signifie que 1 à 2 clauses should sont requises, mais que plus de trois clauses 70 % sont requises.

Dans le cas de synonymes, si un terme de recherche partiel se qualifie pour l'élargissement aux synonymes, les termes de recherche restants seront analysés via le processus NLP et, en fonction de la classification, la requête est générée avec une clause MUST pour les termes analysés par NLP et une clause SHOULD pour les termes élargis aux synonymes. Si quelque chose est identifié comme un adjectif dans ce cas, une requête d'adjectif ne sera alors plus ajoutée à la clause SHOULD avec des synonymes.

Dans le cas de recherches de nom de marque, une correspondance exacte se produit après la lemmatisation sur le nom de marque, et les zones de requête seront utilisées à partir de la liste des zones ci-dessous pour la classification du nom de marque. En plus du nom de marque, si une autre classification avec une liste de mots clés est disponible, une requête de nom de marque est générée pour une recherche de nom de marque exacte, tandis que chaque jeton issu du nom de marque et la portée de la zone de requête sera augmenté avec les zones de classification NOUN.

Voici la liste des zones de requête utilisées lors de la recherche sur chaque classification NLP et terme étendu synonyme. Des zones supplémentaires sont ajoutées à la requête Elasticsearch finale à partir de la liste des zones de requête de profil de recherche. Ces zones sont configurables et peuvent être mises à jour via le nœud final de l'API REST /configuration pour la propriété de nœud de composant ZooKeeper nlp.classification.field.mapping. Pour augmenter la portée de recherche de la classification, nous pouvons ajouter une nouvelle zone dans la liste des zones séparées par # via le nœud final de configuration.
NOUN=natural.nouns.normalized, natural.nouns.raw CATEGORY=natural.categories.normalized, natural.categories.raw, natural.nouns.raw, natural.nouns.normalized BRAND_NAME=natural.names.normalized, natural.names.raw ADJECTIVES=natural.adjectives.normalized, natural.adjectives.raw, natural.nouns.raw, natural.nouns.normalized ADJECTIVES_NAME=attribute.name.normalized, attribute.name.raw, natural.nouns.raw, natural.nouns.normalized UNIT_OF_MEASURE_DEFAULT_FIELD=attribute.value.raw, natural.nouns.raw, natural.nouns.normalized STA_QUERY_FIELD=natural.nouns.normalized, natural.nouns.raw ROOT_BOOSTING_FIELD=nlp.name.normalized, nlp.keyword.text 

Les zones du ROOT_BOOSTING_FIELD sont utilisées uniquement à des fins de stimulation. Ils ne font pas partie de la zone de requête réelle. Le préfixe nlp. est réservé à l'usage interne de HCL ; le nom de zone réel se produit après nlp.

Les zones peuvent être mises à jour à l'aide du nœud final /configuration comme illustré dans l'exemple suivant. Ce processus utilise la méthode de requête PATCH/POST.
PATCH/POST http://dataQueryHost:dataQueryPort/search/resources/api/v2/configuration?nodeName=component&envType=auth
Corps de la requête :
 { "extendedconfiguration": { "configgrouping": [ { "name": "SearchConfiguration", "property": [ { "name": "nlp.classification.field.mapping", "value": "NOUN=natural.nouns.normalized#natural.nouns.raw, CATEGORY=natural.categories.normalized#natural.categories.raw#natural.nouns.raw#natural.nouns.normalized, BRAND_NAME=natural.names.normalized#natural.names.raw, ADJECTIVES=natural.adjectives.normalized#natural.adjectives.raw#natural.nouns.raw#natural.nouns.normalized, ADJECTIVES_NAME=attribute.name.normalized#attribute.name.raw#natural.nouns.raw#natural.nouns.normalized, UNIT_OF_MEASURE_DEFAULT_FIELD=attribute.value.raw#natural.nouns.raw#natural.nouns.normalized, STA_QUERY_FIELD=natural.nouns.normalized#natural.nouns.raw, ROOT_BOOSTING_FIELD=nlp.name.normalized#nlp.keyword.text" } ] } ] } } 
Note:
  1. Si c'est la première fois que vous ajoutez la configuration via le nœud final /configuration, utilisez la méthode de requête POST, sinon utilisez la méthode de requête PATCH.
  2. Redémarrez le service Query après avoir ajouté ou mis à jour la configuration.