Sintassi del selettore di query

Il linguaggio IBM Cloudant Query è espresso come un oggetto JSON che descrive i documenti di interesse. All'interno di questa struttura, è possibile applicare la logica condizionale utilizzando campi appositamente denominati.

Il linguaggio IBM Cloudant Query ha alcune somiglianze con i documenti di query di MongoDB, ma queste somiglianze derivano da una comunanza di scopi e non si estendono necessariamente a un'equivalenza di funzioni o risultati.

Nozioni di base del selettore

La sintassi del selettore elementare richiede di specificare uno o più campi, e i valori corrispondenti necessari per tali campi. Il seguente esempio di selettore corrisponde a tutti i che hanno un campo director contenente il valore Lars von Trier.

Si veda il seguente esempio di un semplice selettore:

{
	"selector": {
		"director": "Lars von Trier"
	}
}

Se si è creato un indice di testo completo specificando "type":"text" al momento della creazione dell'indice, è possibile utilizzare l'operatore $text per selezionare i documenti corrispondenti. Nell'esempio seguente, l'indice del testo completo viene ispezionato per trovare qualsiasi documento che contenga la parola Bond.

Si veda il seguente esempio di un semplice selettore per un indice full_text:

{
	"selector": {
		"$text": "Bond"
	}
}

È possibile creare espressioni di selettore più complesse combinando gli operatori. Tuttavia, per gli indici di IBM Cloudant Query di tipo json, non è possibile utilizzare operatori "combinati" o "logici di array" come $regex come base di una query. Solo gli operatori di uguaglianza come $eq, $gt, $gte, $lt, e $lte- ma non $ne- può essere utilizzato come base per una ricerca più complessa. Per ulteriori informazioni sulla creazione di espressioni di selettore complesse, vedere Creazione di espressioni di selettori.

Selettore con due campi

Nell'esempio seguente, il selettore corrisponde a qualsiasi documento con un campo name che contiene Paul, e che abbia anche un campo location con il valore "Boston".

Si veda l'esempio seguente di un selettore più complesso:

{
	"selector": {
		"name": "Paul",
		"location": "Boston"
	}
}

Campi secondari

Utilizzare un selettore più complesso per specificare i valori di un campo di oggetti annidati, o sottocampi. Ad esempio, si potrebbe usare una struttura JSON standard per specificare un campo e un sottocampo.

Si veda il seguente esempio di selettore di campo e sottocampo all'interno di un oggetto JSON:

{
	"selector": {
		"imdb": {
			"rating": 8
		}
	}
}

Un equivalente abbreviato utilizza una notazione a punti per combinare i nomi dei campi e dei sottocampi in un unico nome.

Si veda l'esempio seguente di un selettore di campo e sottocampo equivalente che utilizza la notazione a punti:

{
	"selector": {
		"imdb.rating": 8
	}
}

Costruire espressioni di selettori più complesse

In generale, ogni volta che si ha un operatore che accetta un argomento, quell'argomento può essere a sua volta un altro operatore con argomenti propri. Questa espansione consente espressioni di selettori più complesse.

Gli operatori logici combinati o di matrice, come $regex, possono quando si usano indici di tipo JSON, può verificarsi una scansione completa del database, con conseguenti scarse prestazioni. Solo gli operatori di uguaglianza, come $eq, $gt, $gte, $lt, e $lte (ma non $ne), abilitano la ricerca degli indici. Per assicurarsi che gli indici siano usati in modo efficace, analizzare il piano di spiegazione di ogni spiegare il piano per ogni query.

La maggior parte delle espressioni del selettore funziona esattamente come ci si aspetterebbe per l'operatore. Gli algoritmi di corrispondenza utilizzati dall'operatore $regex sono attualmente basati sulla libreria sulla libreria Perl Compatible Regular Expression(PCRE). Tuttavia, non tutta la libreria PCRE è implementata. Inoltre, alcune parti dell'operatore di $regex vanno oltre quanto offerto dal PCRE. Per ulteriori informazioni su ciò che viene implementato, vedere le informazioni sulle espressioni regolari di Erlang.

Utilizzo dell'operatore $text

L'operatore $text si basa su una ricerca Lucene con un analizzatore standard. L'operatore non fa distinzione tra maiuscole e minuscole e corrisponde a qualsiasi parola. Tuttavia, l'operatore $text non supporta la sintassi completa di Lucene, come i caratteri jolly, corrispondenze sfumate, o il rilevamento della prossimità.

Per ulteriori informazioni, consultare il sito Ricerca documentazione. L'operatore $text si applica a tutte le stringhe trovate nel documento. Se si inserisce questo operatore nel contesto di un nome di campo, non è valido.