2017-09-26 4 views
0

J'ai une collection Azure DocumentDB avec 100 documents. J'ai énuméré un tableau de termes de recherche dans chaque document pour effectuer une recherche basée sur des mots-clés.Rechercher plusieurs mots-clés dans la collection DocumentDB

j'ai pu effectuer une recherche sur un seul mot clé en utilisant requête SQL ci-dessous pour DocumentDB:

SELECT VALEUR c de la racine c REJOIGNEZ mot IN c.tags OÙ CONTIENT (BAS (mot), BAS (» mot-clé '))

Cependant, cela ne permet que la recherche basée sur un seul mot-clé. Je veux être en mesure de rechercher plusieurs mots-clés donnés. Pour cela, j'ai essayé ci-dessous requête:

SELECT * FROM c OÙ ARRAY_CONTAINS (c.tags, "Food") OU ARRAY_CONTAINS (c.tags, "Dessert") OU (ARRAY_CONTAINS c.tags, « épicé ")

Cela fonctionne, mais est sensible à la casse. Comment est-ce que je rends ce cas insensible? J'ai essayé d'utiliser la fonction scalaire INFÉRIEUR comme ce

inférieur (c.tags), BASSE ("Dessert")

mais cela ne semble pas travailler avec ARRAY_CONTAINS.

Une idée de comment je peux effectuer une recherche insensible à la casse sur plusieurs mots-clés en utilisant la requête SQL pour DocumentDB?

Merci,

AB

+0

La quantité de mots-clés est-elle déterministe? Ou pourrait-il être potentiellement grand? Voulez-vous considérer les personnes qui écrivent les mots-clés avec des fautes d'orthographe? –

Répondre

0

La meilleure façon de traiter avec la sensibilité de cas est de les stocker dans le tableau des étiquettes avec tous les minuscules (ou majuscules), puis le faire LOWER(<user-input-tag>) au moment de la requête. En ce qui concerne votre désir de rechercher sur plusieurs étiquettes d'entrée d'utilisateur, votre approche de construire une série de clauses OR est probablement la meilleure approche.