Opzioni di query e ordinamento

Quando chiami il search() metodo utilizzando una stringa di query da sola, i risultati vengono restituiti in base alle opzioni di query predefinite:

  • I documenti vengono restituiti ordinati in base al ranking in ordine decrescente
  • I documenti vengono restituiti in gruppi di 20 alla volta
  • I documenti recuperati contengono tutti i campi originali

Puoi utilizzare un'istanza della Query classe come argomento di search() per modificare queste opzioni.

La classe Query della struttura ti consente di specificare il numero di documenti da restituire alla volta. Ti consente anche di personalizzare i contenuti dei documenti recuperati. Puoi richiedere solo gli identificatori dei documenti o richiedere che i documenti contengano solo un sottoinsieme dei relativi campi. Puoi anche creare campi personalizzati nei documenti recuperati utilizzando: snippet (frammenti di campi di testo che mostrano il testo che circonda una stringa corrispondente) edespressioni 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:

  1. Crea una stringa di query.
  2. Crea SortOptions, se necessario.
  3. Crea QueryOptions.
  4. Crea un oggetto Query che includa la stringa di query e le QueryOptions (facoltative).
  5. Chiama il metodo di ricerca sull'oggetto Query.

I costruttori QueryOptions e SortOptions utilizzano argomenti con nome, come mostrato in questo esempio:

def query_options():
    index = search.Index('products')
    query_string = "product: piano AND price < 5000"

    # Create sort options to sort on price and brand.
    sort_price = search.SortExpression(
        expression='price',
        direction=search.SortExpression.DESCENDING,
        default_value=0)
    sort_brand = search.SortExpression(
        expression='brand',
        direction=search.SortExpression.DESCENDING,
        default_value="")
    sort_options = search.SortOptions(expressions=[sort_price, sort_brand])

    # Create field expressions to add new fields to the scored documents.
    price_per_note_expression = search.FieldExpression(
        name='price_per_note', expression='price/88')
    ivory_expression = search.FieldExpression(
        name='ivory', expression='snippet("ivory", summary, 120)')

    # Create query options using the sort options and expressions created
    # above.
    query_options = search.QueryOptions(
        limit=25,
        returned_fields=['model', 'price', 'description'],
        returned_expressions=[price_per_note_expression, ivory_expression],
        sort_options=sort_options)

    # Build the Query and run the search
    query = search.Query(query_string=query_string, options=query_options)
    results = index.search(query)
    for scored_document in results:
        print(scored_document)

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 da una query consecutiva all'altra, consentendo di continuare ogni nuova ricerca dalla fine della precedente. Il cursore e l'offset sono descritti nella pagina di riferimento della ricerca Go . Null. I risultati conterranno tutti i documenti corrispondenti (fino al limite). -
sort_options Imposta un SortOptions per controllare l'ordinamento dei risultati di ricerca. Un'istanza di SortOptions ha un proprio insieme di proprietà descritte di seguito. Null. Ordina in base al ranking dei documenti in ordine decrescente. -

Queste proprietà controllano quali campi dei documenti vengono visualizzati nei risultati.

Proprietà Descrizione Predefinito
ids_only Imposta su True o False . Se True , i documenti restituiti nei risultati conterranno solo gli ID, senza campi. False (restituisci tutti i campi).
returned_fields Specifica i campi dei documenti da includere nei risultati. Non è possibile specificare più di 100 campi. Restituisci tutti i campi dei documenti (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 dei documenti. Nessuno
snippeted_fields Un elenco di nomi di campi di testo. Viene generato uno snippet per ogni campo. Si tratta di un campo calcolato che viene aggiunto alla proprietà expressions dei documenti nei risultati di ricerca. Il campo dello 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 di SortExpressions che rappresenta un ordinamento multidimensionale dei documenti. Nessuno
match_scorer Un oggetto facoltativo MatchScorer oggetto . Se presente, i documenti verranno valutati in base alla frequenza dei termini di ricerca. Il punteggio sarà disponibile come campo _score. La valutazione dei documenti può essere costosa (sia in termini di operazioni fatturabili sia di tempo di esecuzione) e può rallentare le ricerche. Utilizza la valutazione con parsimonia. Nessuno
limit Il numero massimo di oggetti da valutare e/o ordinare. Non può essere superiore a 10.000. 1000

Ordinare 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 di 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: la SortOption stessa ha un attributo expressions. Questo attributo è un elenco di oggetti SortExpression 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 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 è necessario specificare un valore di testo. Per gli ordinamenti numerici è necessario specificare un valore numerico. Nessuno

Ordinare in base a campi con più valori

Quando ordini in base a un campo con più valori di un tipo specifico, 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 "color". Al campo "color" di DocA vengono assegnati due valori nell'ordine (rosso, blu) e due valori a DocB nell'ordine (verde, rosso). Quando esegui un ordinamento specificando il campo di testo "color", DocA viene ordinato in base al valore "rosso" e DocB in base al valore "verde". Gli altri valori dei campi non vengono utilizzati nell'ordinamento.

Ordinare o non ordinare

Se non specifichi alcuna opzione di ordinamento, i risultati di ricerca vengono restituiti automaticamente ordinati in base al ranking in ordine 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 al numero specificato da SortOptions.limit , la ricerca recupera, ordina e restituisce solo il numero limitato di documenti. Seleziona i documenti da ordinare dall'elenco di tutti i documenti corrispondenti, che è in ordine di ranking decrescente. È possibile che una query selezioni più documenti corrispondenti di quelli che puoi ordinare. Se utilizzi le 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 di campo (impostate in QueryOptions ) e le espressioni di ordinamento, che vengono impostate in SortOptions. Vengono 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 i campi geopoint possono utilizzare le funzioni geopoint e distance. Le espressioni per i campi di testo e HTML possono utilizzare la funzione snippet.

Le espressioni possono includere anche questi termini speciali:

Termine Descrizione
_rank La proprietà di 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 MatchScorer oggetto in SortOptions. Questo termine può essere visualizzato solo nelle espressioni di ordinamento; 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 valore più grande dei suoi argomenti. max(recommended_retail_price, discount_price, wholesale_price)
min Restituisce il valore 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 in base a una latitudine e una longitudine. geopoint(-31.3, 151.4)
distance Calcola la distanza in metri tra due geopoint. 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 uno snippet del valore del campo body, con il testo che corrisponde alla query in grassetto.