Quando chiami il
search()
utilizzando solo una stringa di query, i risultati sono
vengono restituiti in base alle opzioni di query predefinite:
- I documenti vengono restituiti in ordine decrescente
- I documenti vengono restituiti in gruppi di 20 documenti alla volta
- I documenti recuperati contengono tutti i campi originali
Puoi utilizzare un'istanza del
Classe Query
come argomento per search()
per modificare queste opzioni.
La classe Query ti consente di specificare quanti documenti alla volta. Ti permette anche di personalizzare i contenuti dei file recuperati documenti. Puoi richiedere solo gli identificatori dei documenti o richiedere i documenti contengono solo un sottoinsieme dei rispettivi campi. Puoi anche creare campi personalizzati nei documenti recuperati: snippet (frammenti di campi di testo che mostrano il testo che circonda una stringa corrispondente) ed espressioni di campo (campi con valori ricavati da altri campi del documento).
Oltre alle opzioni di query,
Classe query
può anche includere un'istanza di SortOptions
. Le opzioni di ordinamento ti consentono di
cambiare l'ordinamento e ordinare i risultati in base a più chiavi.
Ricerca 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
SortOptions
, se necessario. - Crea
QueryOptions
. - Crea un oggetto Query che includa la stringa di query e (facoltativo)
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 quanti risultati vengono restituiti e in quale ordine. Le opzioni offset e cursor, 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 |
Questa proprietà determina l'accuratezza del risultato restituito da SearchResults.number_found() . Imposta un limite per il numero di corrispondenze effettivamente conteggiate, interrompendo la ricerca quando viene raggiunto il limite. Se il numero di corrispondenze nell'indice è inferiore o uguale al limite, il conteggio restituito è esatto. In caso contrario, il conteggio è una stima basata sulle corrispondenze trovate, nonché sulle dimensioni e sulla struttura dell'indice. Tieni presente che l'impostazione di un valore elevato per questa proprietà può influire sulla complessità dell'operazione di ricerca e causare timeout. |
Se il valore non è specificato o se viene impostato su None , la precisione viene impostata sullo stesso valore di limit |
25000 |
offset |
L'offset del primo documento nei risultati da restituire. | 0. I risultati conterranno tutti i documenti corrispondenti (fino al limite). | 1000 |
cursor |
È possibile utilizzare un cursore al posto di un offset per recuperare gruppi di documenti in ordine. Un cursore viene aggiornato man mano che viene passato dentro e fuori una query consecutive, consentendo di continuare ogni nuova ricerca a partire dalla fine della precedente. Il cursore e l'offset vengono discussi nella pagina Gestione dei risultati. | Nullo. I risultati conterranno tutti i documenti corrispondenti (fino al limite). | - |
sort_options |
Imposta un oggetto SortOptions per controllare l'ordinamento dei risultati di ricerca. Un'istanza di SortOptions ha un proprio insieme di proprietà, descritto di seguito. |
Nullo. Ordina in base al ranking del documento diminuendo. | - |
Queste proprietà controllano quali campi del documento vengono visualizzati nei risultati.
Proprietà | Descrizione | Predefinito |
---|---|---|
ids_only |
Imposta su True o False . Se True , i documenti restituiti nei risultati conterranno solo ID, senza campi. |
False (restituisce tutti i campi). |
returned_fields |
Specifica i campi del documento da includere nei risultati. Non è possibile specificare più di 100 campi. | Restituisci 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à expressions 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à expressions 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 il punteggio dei risultati di ricerca.
Proprietà | Descrizione | Predefinito |
---|---|---|
expressions |
Un elenco di SortExpressions che rappresenta una classificazione multidimensionale dei documenti. |
Nessuno |
match_scorer |
Un oggetto MatchScorer facoltativo. Se presente, ai documenti verrà assegnato un punteggio in base alla frequenza dei termini di ricerca. Il punteggio sarà disponibile nel campo _score . L'assegnazione del punteggio ai documenti può essere costosa (sia in termini di operazioni fatturabili sia di tempo di esecuzione) e può rallentare le ricerche. Utilizza il punteggio con parsimonia. |
Nessuno |
limit |
Numero massimo di oggetti da valutare e/o ordinare. Non può essere superiore a 10.000. | 1000 |
Ordinamento per 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ù risorse
significati relativi alle opzioni di ordinamento: lo stesso SortOption
ha un
attributo expressions. Questo attributo è un elenco di SortExpression
oggetti
che corrispondono alle chiavi di ordinamento. Infine, ogni oggetto SortExpression
contiene un
attributo expression che specifica come calcolare il valore della chiave di ordinamento. Questa espressione viene creata in base alle regole
sezione successiva.
Un SortExpression
definisce anche l'ordine di 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 |
Valore predefinito dell'espressione, se non è presente alcun campo e non può essere calcolato per un documento. È necessario specificare un valore di testo per gli ordinamenti testuali. Per gli ordinamenti numerici è necessario specificare un valore numerico. | Nessuno |
Ordinamento in base a campi con più valori
Quando ordini in base a un campo con più valori di un determinato tipo, viene utilizzato solo il primo valore assegnato al campo. Ad esempio, prendiamo in considerazione due documenti, DocA e DocB, che hanno entrambi un campo di testo denominato "colore". Al campo "colore" del documento A vengono assegnati due valori nell'ordine (rosso, blu) e due valori al documento B nell'ordine (verde, rosso). Quando esegui un ordinamento specificando il campo di testo "color", DocA viene ordinata in base al valore "red" e DocB sul valore "green". Gli altri valori degli altri campi non vengono utilizzati nell'ordinamento.
Ordinare o meno
Se non specifichi opzioni di ordinamento, i risultati di ricerca vengono visualizzati automaticamente in ordine decrescente. Non c'è limite al numero di documenti che vengono restituiti in questo caso. Se specifichi le opzioni di ordinamento, l'ordinamento viene eseguite dopo aver selezionato tutti i documenti corrispondenti. C'è un proprietà esplicita, "OrdinaOptions.limit" , che controlla le dimensioni di questo tipo. Non puoi mai ordinare più di 10.000 documenti. Il valore predefinito è 1000. Se esistono più documenti corrispondenti rispetto al numero specificato da "SortOptions.limit", la ricerca recupera, ordina e restituisce solo questo numero limitato. Seleziona i documenti da ordinare dall'elenco di tutti i documenti corrispondenti, in ordine decrescente. È possibile che una query selezioni più documenti corrispondenti di quelli che puoi ordinare. Se utilizzi opzioni di ordinamento ed è importante recuperare tutti i documenti corrispondenti, devi assicurarti che la query non restituisca più documenti di quelli che puoi ordinare.
Scrivere espressioni
Le espressioni vengono utilizzate per definire le espressioni dei campi (impostate in "QueryOptions") e le espressioni di ordinamento, 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 predefinite elencate di seguito. Espressioni che coinvolgono i campi di punti geografici, è possibile usare le funzioni di punti geografici 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à ranking di un documento. Può essere utilizzata nelle espressioni di campo e nelle espressioni di ordinamento. |
_score |
Il punteggio assegnato a un documento quando includi un elemento MatchScorer in SortOptions . Questo termine può essere utilizzato solo nelle espressioni di ordinamento; non può essere utilizzato nelle espressioni dei campi. |
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 |
Richiede due argomenti numerici. La chiamata pow(x, y) calcola il valore di x elevato alla potenza y. | pow(x, 2) |
count |
Prende 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 punto geografico
Queste funzioni possono essere utilizzate per le espressioni che coinvolgono i campi geopoint.
Funzione | Descrizione | Esempio |
---|---|---|
geopoint |
Definisce un punto geografico a partire da una latitudine e una longitudine. | geopoint(-31.3, 151.4) |
distance |
Calcola la distanza in metri tra due punti geografici. Tieni presente che uno dei due argomenti può essere il nome di un campo geopoint o un'invocazione della funzione geopoint. Tuttavia, un solo argomento può essere il nome di un 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 è facoltativo; il valore predefinito è 160 caratteri.
La funzione restituisce una stringa HTML. La stringa contiene uno snippet del valore del campo del corpo, con il testo corrispondente alla query in grassetto.