Lorsqu'un champ de document contient plusieurs valeurs du même type, comme les genres d'un livre ou les catégories d'un produit, mappez ce champ vers un type ARRAY. OpenSearch indexe chaque élément indépendamment ; ainsi, une requête correspondant à l'un des éléments renvoie le document.
Exemple : Un roman tagué « Mystery », « Time-travel » et « Classical » apparaît dans les résultats lorsqu'un utilisateur recherche uniquement « Mystery ».
Envoi des données ARRAY
Appel des opérations API
Soumettez le champ tableau sous forme de tableau JSON dans l'objet fields. Définissez cmd sur ADD.
[
{
"fields": {
"id": "0",
"int_array": [14, 85],
"float_array": [14.0, 85.0],
"literal_array": ["abc", "xyz"]
},
"cmd": "ADD"
}
]
Pour la référence complète de l'API, consultez la rubrique Traitement des données.
Utilisation des SDK
Le processus d'envoi suit le même modèle quel que soit le langage du SDK. Pour un exemple en Java, reportez-vous à la section Code de démonstration pour l'envoi de données.
En Java, associez chaque champ ARRAY au type de tableau Java correspondant :
| Champ OpenSearch | Type Java |
|---|---|
literal_array |
String[] |
int_array |
int[] |
Configuration des sources de données
Lorsque vous utilisez un connecteur de source de données, associez le plug-in MultiValueSpliter au champ de type ARRAY et définissez un délimiteur. Ce plug-in fractionne la chaîne délimitée issue de votre base de données et la convertit en valeur ARRAY que le moteur de recherche peut indexer.
Par exemple, si la base de données source stocke les tags sous la forme "Time-travel,Mystery,Romantic", définissez la virgule (,) comme délimiteur.
Pour obtenir les instructions de configuration, consultez la rubrique Utilisation des plug-ins de traitement des données.
Interrogation des champs ARRAY
Utilisez une clause de requête ou une clause de filtre pour faire correspondre des éléments individuels. Les exemples suivants s'appuient sur un document dont le champ tags contient « Time-travel », « Mystery » et « Romantic », et dont le champ title contient « Treading On Thin Ice ».
-
Clause de requête uniquement — correspondance sur un seul tag :
query=tags:'Time-travel' -
Requête et filtre combinés — correspondance sur le titre et filtrage par tag :
query=title:'Treading On Thin Ice'&&filter=tags="Time-travel"
Format de la valeur de retour : Les résultats de recherche renvoient les valeurs des champs ARRAY sous forme de chaînes séparées par des tabulations (\t), et non sous forme de tableaux JSON. Dans le code de votre application, découpez la chaîne selon \t pour récupérer les éléments individuels.
Pour compter les éléments d'un champ ARRAY, utilisez la fonction fieldlen dans une clause de filtre. Consultez la rubrique clause de filtre pour connaître la syntaxe complète.
FAQ
Pourquoi le type TEXT_ARRAY n'est-il pas disponible, et quelle est la différence entre TEXT et STRING_ARRAY ?
Les types TEXT (TEXT, SHORT_TEXT, NWS_TEXT, MWS_TEXT) passent par un pipeline d'analyse qui prend en charge la correspondance floue. Étant donné que l'analyse s'applique à la valeur entière du champ, la sémantique multivaluée ne s'applique pas : il n'existe donc pas de type TEXT_ARRAY. À l'inverse, STRING_ARRAY effectue une correspondance exacte sur chaque élément individuellement. Un élément peut contenir plusieurs termes, et il n'est pas nécessaire que tous les éléments correspondent pour que le document soit renvoyé.