Quando chiami il metodo search() utilizzando solo una stringa di query, i risultati vengono restituiti in base alle opzioni di query predefinite:
- I documenti vengono restituiti ordinati in base al rango decrescente
- I documenti vengono restituiti in gruppi di 20 alla volta
- I documenti recuperati contengono tutti i campi originali
Puoi utilizzare un'istanza della classe
della classe
Query
come argomento di
search() per modificare queste opzioni.
La struttura Query class ti consente di specificare il numero di documenti da restituire alla volta. Ti consente inoltre di personalizzare i contenuti dei documenti recuperati. Puoi richiedere solo gli identificatori dei documenti o che i documenti contengano solo un sottoinsieme dei loro campi. Puoi anche creare campi personalizzati nei documenti recuperati: snippet (frammenti di campi di testo che mostrano il testo che circonda una stringa corrispondente) e espressioni di campo (campi con valori derivati da altri campi del documento).
Oltre alle opzioni di query, la classeQuery della può includere anche un'istanza della SortOptions
"struct". Utilizzando le opzioni di ordinamento, puoi modificare l'ordine di ordinamento e ordinare i risultati in base a più chiavi.
Eseguire ricerche con la classe Query
Quando esegui una ricerca con un'istanza della classe Query, devi creare un'istanza della classe in più passaggi. Questo è l'ordine generale:
- Crea una stringa di query.
- Crea
SortOptionsse necessario. - Crea
QueryOptions. - Crea un oggetto Query che includa la stringa di query e (facoltativamente)
QueryOptions. - Chiama il metodo di ricerca sull'oggetto Query.
I costruttori QueryOptions e SortOptions utilizzano argomenti denominati, come mostrato
in questo esempio:
QueryOptions
Queste proprietà controllano il numero di risultati restituiti e l'ordine in cui vengono restituiti. Le opzioni offset e cursore, che si escludono a vicenda, supportano la paginazione. Specificano quali documenti selezionati restituire nei risultati.
| Proprietà | Descrizione | Predefinito | Massimo |
|---|---|---|---|
limit
|
Il numero massimo di documenti da restituire nei risultati. | 20 | 1000
number_found_accuracy
|
offset
|
L'offset del primo documento nei risultati da restituire. | 0. I risultati conterranno tutti i documenti corrispondenti (fino al limite). | 1000 |
cursor
|
Un cursore può essere utilizzato al posto di un offset per recuperare gruppi di documenti in ordine ordinato. Un cursore viene aggiornato quando viene passato a query consecutive e quando esce da queste, consentendo a ogni nuova ricerca di continuare dalla fine della precedente. Il cursore e l'offset sono descritti nella pagina Gestione dei risultati . | Null. I risultati conterranno tutti i documenti corrispondenti (fino al limite). | - |
sort_options
|
Imposta un SortOptions object per controllare l'ordinamento dei risultati di ricerca. Un'istanza di SortOptions ha il proprio insieme di proprietà, descritte di seguito. |
Null. Ordina in base al ranking decrescente dei documenti. | - |
Queste proprietà controllano quali campi del documento vengono visualizzati nei risultati.
| Proprietà | Descrizione | Predefinito |
|---|---|---|
ids_only
|
Da impostare su
True
o
False
. Quando
True
, i documenti restituiti nei risultati conterranno solo ID, nessun campo. |
False
(restituisce tutti i campi). |
returned_fields
|
Specifica i campi del documento da includere nei risultati. Non è possibile specificare più di 100 campi. | Restituisce tutti i campi del documento (fino a 100 campi). |
returned_expressions
|
Espressioni di campo che descrivono i campi calcolati aggiunti a ogni documento restituito nei risultati di ricerca. Questi campi vengono aggiunti alla proprietà delle espressioni del documento. Il valore del campo viene specificato scrivendo un'espressione che può includere uno o più campi del documento. | Nessuno |
snippeted_fields
|
Un elenco di nomi di campi di testo. Per ogni campo viene generato uno snippet. Si tratta di un campo calcolato che viene aggiunto alla proprietà delle espressioni dei documenti nei risultati di ricerca. Il campo snippet ha lo stesso nome del campo di origine. Questa opzione utilizza implicitamente la funzione snippet con solo due argomenti, creando uno snippet con al massimo una stringa corrispondente, in base alla stessa stringa di query utilizzata dalla ricerca per recuperare i risultati: snippet("query-string", field-name).Puoi anche creare snippet personalizzati con l'opzione returned_expressions
aggiungendo un'espressione di campo che chiama esplicitamente la funzione snippet. |
Nessuno |
SortOptions
Le proprietà di SortOptions controllano l'ordinamento e l'assegnazione del punteggio dei risultati di ricerca.
| Proprietà | Descrizione | Predefinito |
|---|---|---|
expressions
|
Un elenco di di SortExpressions che rappresentano un ordinamento multidimensionale dei documenti. |
Nessuno |
match_scorer
|
Un oggetto MatchScorer facoltativo
MatchScorer
. Se presente, i documenti verranno valutati in base alla frequenza dei termini di ricerca. Il punteggio sarà disponibile come campo _score. L'assegnazione di un punteggio ai documenti può essere costosa (sia in termini di operazioni fatturabili che di tempo di esecuzione) e può rallentare le ricerche. Utilizza il punteggio con parsimonia. |
Nessuno |
| limite | Numero massimo di oggetti da valutare e/o ordinare. Non può essere superiore a 10.000. | 1000 |
Ordinamento in base a più chiavi
Puoi ordinare i risultati di ricerca in base a più chiavi di ordinamento. Ogni chiave può essere un semplice
nome campo o un valore calcolato da più campi.Tieni presente che il termine "espressione" viene utilizzato con più significati quando si parla di opzioni di ordinamento: l'SortOption stesso ha un attributo espressioni. Questo attributo è un elenco di oggetti SortExpression
che corrispondono alle chiavi di ordinamento. Infine, ogni oggetto SortExpression contiene un
attributo espressione che specifica come calcolare il valore della chiave di ordinamento. Questa espressione viene creata in base alle regole della sezione successiva.
Un SortExpression definisce anche la direzione dell'ordinamento e un valore della chiave predefinito da utilizzare se l'espressione non può essere calcolata per un documento. Ecco l'elenco completo delle proprietà:
| Proprietà | Descrizione | Predefinito | |
|---|---|---|---|
expression
|
Un'espressione da valutare durante l'ordinamento dei risultati per ogni documento corrispondente. | Nessuno | |
direction
|
La direzione in cui ordinare i risultati di ricerca, ASCENDING o DESCENDING. |
DESCENDING |
|
default_value
|
Il valore predefinito dell'espressione, se non è presente alcun campo e non può essere calcolato per un documento. Per gli ordinamenti di testo deve essere specificato un valore di testo. Per gli ordinamenti numerici deve essere specificato un valore numerico. | Nessuno |
Ordinamento in base a campi multivalore
Quando esegui l'ordinamento in base a un campo multivalore di un determinato tipo, viene utilizzato solo il primo valore assegnato al campo. Ad esempio, considera due documenti, DocA e DocB, che hanno entrambi un campo di testo denominato "colore". Al campo "color" di DocA vengono assegnati due valori nell'ordine (rosso, blu) e a DocB due valori nell'ordine (verde, rosso). Quando esegui un ordinamento specificando il campo di testo "colore", il documento A viene ordinato in base al valore "rosso" e il documento B in base al valore "verde". Gli altri valori dei campi non vengono utilizzati nell'ordinamento.
Ordinare o non ordinare
Se non specifichi opzioni di ordinamento, i risultati di ricerca vengono restituiti automaticamente
ordinati in base al ranking decrescente. In questo caso, non esiste alcun limite al numero di documenti restituiti. Se specifichi opzioni di ordinamento, l'ordinamento viene eseguito dopo aver selezionato tutti i documenti corrispondenti. Esiste una proprietà
esplicita,
SortOptions.limit
, che controlla le dimensioni
dell'ordinamento. Non puoi mai ordinare più di 10.000 documenti. Il valore predefinito è 1000. Se
il numero di documenti corrispondenti è superiore a quello specificato da
SortOptions.limit
, la ricerca recupera, ordina e restituisce solo quel numero
limitato. Seleziona i documenti da ordinare dall'elenco di tutti i documenti corrispondenti, che è in ordine di rango decrescente. È possibile che una query selezioni più documenti corrispondenti di quanti tu possa ordinare. Se utilizzi le opzioni di ordinamento
ed è importante recuperare ogni documento corrispondente, devi cercare di
assicurarti che la query restituisca un numero di documenti non superiore a quelli che puoi ordinare.
Scrivere espressioni
Le espressioni vengono utilizzate per definire le espressioni dei campi (impostate in
QueryOptions
) e le espressioni di ordinamento, che vengono impostate in SortOptions.
Sono scritte come stringhe:
"price * quantity"
"(men + women)/2"
"min(daily_use, 10) * rate"
"snippet('rose', flower, 120)"
Le espressioni che coinvolgono i campi numerici possono utilizzare gli operatori aritmetici (+, -, *, /) e le funzioni numeriche integrate elencate di seguito. Le espressioni che coinvolgono campi geopoint possono utilizzare le funzioni geopoint e distanza. Le espressioni per i campi di testo e HTML possono utilizzare la funzione snippet.
Le espressioni possono includere anche i seguenti termini speciali:
| Termine | Descrizione |
|---|---|
_rank |
La proprietà rank di un documento. Può essere utilizzata nelle espressioni dei campi e di ordinamento. |
_score |
Il punteggio assegnato a un documento quando includi un oggetto
MatchScorer
nel SortOptions. Questo termine può essere visualizzato solo nelle espressioni di ordinamento e non può essere utilizzato nelle espressioni di campo. |
Funzioni numeriche
Le espressioni per definire i valori numerici per FieldExpressions e
SortExpressions possono utilizzare queste funzioni integrate. Gli argomenti devono essere
numeri, nomi di campi o espressioni che utilizzano numeri e nomi di campi.
| Funzione | Descrizione | Esempio |
|---|---|---|
max |
Restituisce il più grande dei suoi argomenti. | max(recommended_retail_price, discount_price, wholesale_price) |
min |
Restituisce il più piccolo dei suoi argomenti. | min(height, width, length) |
log |
Restituisce il logaritmo naturale. | log(x) |
abs |
Restituisce il valore assoluto. | abs(x) |
pow |
Accetta due argomenti numerici. La chiamata pow(x, y) calcola il valore di x elevato alla potenza y. | pow(x, 2) |
count |
Accetta un nome di campo come argomento. Restituisce il numero di campi nel documento con quel nome. Ricorda che un documento può contenere più campi di tipi diversi con lo stesso nome. Nota: count può essere utilizzato solo in FieldExpressions. Non può essere visualizzato in SortExpressions. |
count(user) |
Funzioni geopoint
Queste funzioni possono essere utilizzate per le espressioni che coinvolgono i campi geopoint.
| Funzione | Descrizione | Esempio |
|---|---|---|
geopoint |
Definisce un geopoint dato una latitudine e una longitudine. | geopoint(-31.3, 151.4) |
distance |
Calcola la distanza in metri tra due geopunti. Tieni presente che uno dei due argomenti può essere il nome di un campo geopoint o una chiamata alla funzione geopoint. Tuttavia, solo un argomento può essere un nome di campo. | distance(geopoint(23, 134), store_location) |
Snippet
Uno snippet è un frammento di un campo di testo che corrisponde a una stringa di query e include
il testo circostante. Gli snippet vengono creati chiamando la funzione snippet:
snippet(query, body, [max_chars])
query- Una stringa di query tra virgolette che specifica il testo da trovare nel campo.
body- Il nome di un campo di testo, HTML o atom.
max_chars- Il numero massimo di caratteri da restituire nello snippet. Questo argomento è facoltativo; il valore predefinito è 160 caratteri.
La funzione restituisce una stringa HTML. La stringa contiene un frammento del valore del campo corpo, con il testo che corrisponde alla query in grassetto.