API Search legacy per servizi in bundle legacy

L'API Search fornisce un modello per l'indicizzazione di documenti contenenti dati strutturati. Puoi eseguire ricerche in un indice, nonché organizzare e presentare i risultati di ricerca. L'API supporta la corrispondenza del testo completo nei campi delle stringhe. I documenti e gli indici vengono salvati in un archivio permanente separato ottimizzato per le operazioni di ricerca. L'API Search può indicizzare un numero qualsiasi di documenti. Il datastore App Engine potrebbe essere più appropriato per le applicazioni che devono recuperare set di risultati molto grandi.

Panoramica

L'API Search si basa su quattro concetti principali: documenti, indici, query e risultati.

Documenti

Un documento è un oggetto con un ID univoco e un elenco di campi contenenti i dati utente. Ogni campo ha un nome e un tipo. Esistono diversi tipi di campi, identificati in base ai tipi di valori in essi contenuti:

  • Campo Atom: una stringa di caratteri indivisibile.
  • Campo di testo: una stringa di testo normale che può essere cercata parola per parola.
  • Campo HTML. Una stringa che contiene i tag di markup HTML, solo il testo al di fuori dei tag di markup può essere cercato.
  • Campo numerico: un numero in virgola mobile.
  • Campo data: oggetto data con anno/mese/giorno e ora facoltativa.
  • Campo Geopoint: un oggetto dati con coordinate di latitudine e longitudine.

La dimensione massima di un documento è 1 MB.

Indici

Un indice archivia i documenti da recuperare. Puoi recuperare un singolo documento in base all'ID, un intervallo di documenti con ID consecutivi o tutti i documenti in un indice. Puoi anche cercare un indice per recuperare i documenti che soddisfano determinati criteri sui campi e i relativi valori, specificati come stringa di query. Puoi gestire gruppi di documenti inserendoli in indici separati.

Non esiste alcun limite al numero di documenti in un indice o al numero di indici che puoi utilizzare. La dimensione totale di tutti i documenti in un singolo indice è limitata per impostazione predefinita a 10 GB, ma può essere aumentata fino a 200 GB inviando una richiesta dalla pagina App Engine Search di Google Cloud Console.

Query

Per cercare un indice, devi costruire una query, che ha una stringa di query ed eventualmente altre opzioni. Una stringa di query specifica le condizioni per i valori di uno o più campi del documento. Quando esegui una ricerca in un indice, nell'indice vengono restituiti solo i documenti con campi che soddisfano la query.

La query più semplice, talvolta chiamata "ricerca globale", è una stringa contenente solo valori di campo. Questa ricerca utilizza una stringa per cercare i documenti che contengono le parole "rose" e "acqua":

def simple_search(index):
    index.search('rose water')

In questo modo vengono cercati i documenti con campi di data che contengono la data del 4 luglio 1776 o campi di testo che includono la stringa "1776-07-04":

def search_date(index):
    index.search('1776-07-04')

Anche una stringa di query può essere più specifica. Può contenere uno o più termini, ciascuno con i nomi di un campo e un vincolo sul valore del campo. La forma esatta di un termine dipende dal tipo di campo. Ad esempio, supponiamo che ci sia un campo di testo chiamato "prodotto", un campo numerico chiamato "prezzo", la seguente stringa di query con due termini:

def search_terms(index):
    # search for documents with pianos that cost less than $5000
    index.search("product = piano AND price < 5000")

Le opzioni di query, come indica il nome, non sono obbligatorie. Consentono una varietà di funzionalità:

  • Controlla il numero di documenti restituiti nei risultati di ricerca.
  • Specifica quali campi del documento includere nei risultati. Per impostazione predefinita, vengono inclusi tutti i campi del documento originale. Puoi specificare che i risultati includano solo un sottoinsieme dei campi. Il documento originale non sarà interessato.
  • Ordinare i risultati.
  • Crea campi "calcolati" per i documenti che utilizzano FieldExpressions e campi di testo abbreviati utilizzando gli snippet.
  • Consenti il paging tra i risultati di ricerca restituendo solo una parte dei documenti corrispondenti a ogni query (utilizzando offset e cursori)

Risultati di ricerca

Una chiamata a search() può restituire solo un numero limitato di documenti corrispondenti. La ricerca potrebbe trovare più documenti di quanti possano essere restituiti in una singola chiamata. Ogni chiamata alla ricerca restituisce un'istanza della classe SearchResults, che contiene informazioni sul numero di documenti trovati e sul numero di documenti restituiti, oltre all'elenco di documenti restituiti. Puoi ripetere la stessa ricerca, utilizzando i rilevatori o gli offset per recuperare l'insieme completo di documenti corrispondenti.

Materiale di formazione aggiuntivo

Oltre a questa documentazione, puoi leggere la lezione di formazione in due parti sull'API Search nell'Academy di Google Developers. La classe include un'applicazione Python di esempio.

Documenti e campi

La classe Documento rappresenta i documenti. Ogni documento ha un identificatore documento e un elenco di campi.

Identificatore documento

Ogni documento di un indice deve avere un identificatore univoco o doc_id. L'identificatore può essere utilizzato per recuperare un documento da un indice senza eseguire una ricerca. Per impostazione predefinita, l'API Search genera automaticamente un doc_id quando viene creato un documento. Puoi anche specificare doc_id manualmente quando crei un documento. Un elemento doc_id deve contenere solo caratteri ASCII visibili e stampabili (codici ASCII da 33 a 126 inclusi) e non deve superare i 500 caratteri. Un identificatore del documento non può iniziare con un punto esclamativo ('!') e non può iniziare e finire con un doppio trattino basso ("&_").

Sebbene sia pratico creare identificatori di documenti univoci leggibili e significativi, non è possibile includere doc_id in una ricerca. Considera questo scenario: hai un indice con documenti che rappresentano parti, utilizzando il numero di serie della parte come doc_id. Sarà molto efficiente recuperare il documento per ogni singola parte, ma non sarà possibile cercare un intervallo di numeri di serie insieme ad altri valori di campo, come la data di acquisto. Archiviare il numero di serie in un campo atom risolve il problema.

Campi documento

Un documento contiene campi con un nome, un tipo e un singolo valore di quel tipo. Due o più campi possono avere lo stesso nome, ma tipi diversi. Ad esempio, puoi definire due campi con il nome "age": uno con un tipo di testo (il valore "ventidue"), l'altro con un tipo numerico (valore 22).

Nomi dei campi

I nomi dei campi sono sensibili alle maiuscole e possono contenere solo caratteri ASCII. Devono iniziare con una lettera e possono contenere lettere, cifre o trattini bassi. Un nome di campo non può contenere più di 500 caratteri.

Campi con più valori

Un campo può contenere un solo valore, che deve corrispondere al tipo di campo. I nomi dei campi non devono necessariamente essere univoci. Un documento può avere più campi con lo stesso nome e lo stesso tipo, per rappresentare un campo con più valori. Tuttavia, i campi relativi a data e numero con lo stesso nome non possono essere ripetuti. Un documento può contenere anche più campi con lo stesso nome e tipi di campi diversi.

Tipi di campo

Esistono tre tipi di campi che memorizzano le stringhe di caratteri; collettivamente sono chiamati campi stringa:

  • Campo di testo: una stringa con una lunghezza massima di 1024**2 caratteri.
  • Campo HTML: stringa in formato HTML con lunghezza massima di 1024**2 caratteri.
  • Campo Atom: una stringa con una lunghezza massima di 500 caratteri.

Esistono inoltre tre tipi di campi per l'archiviazione dei dati non testuali:

  • Campo numerico: un valore in virgola mobile a doppia precisione compreso tra -2.147.483.647 e 2.147.483.647.
  • Campo data: datetime.date o datetime.datetime.
  • Campo Geopoint: un punto sulla Terra descritto dalle coordinate di latitudine e longitudine.

I tipi di campo sono specificati dalle classi TextField, HtmlField, AtomField, NumberField, DateField e GeoField.

Trattamento speciale dei campi di stringhe e date

Quando un documento con campi di data, testo o HTML viene aggiunto a un indice, viene eseguita una gestione speciale. È utile comprendere le operazioni in corso per utilizzare in modo efficace l'API Search.

Campi di tokenizzazione delle stringhe

Quando viene indicizzato un campo HTML o di testo, i relativi contenuti vengono tokenizzati. La stringa è suddivisa in token ovunque ci sono spazi o caratteri speciali (segni di punteggiatura, cancelletto, barra rovesciata e così via). L'indice includerà una voce per ogni token. Ciò ti permette di cercare parole chiave e frasi che includono solo una parte del valore di un campo. Ad esempio, una ricerca per "dark" corrisponderà a un documento con un campo di testo contenente la stringa "è stata una notte buia e tempestosa", mentre il termine "time" corrisponderà a un documento con un campo di testo contenente la stringa "si tratta di un sistema in tempo reale".

Nei campi HTML, il testo all'interno dei tag di markup non è tokenizzato, quindi un documento con un campo HTML contenente it was a <strong>dark</strong> night corrisponderà a una ricerca di "notte", ma non a "forte". Se vuoi avere la possibilità di cercare nel testo del markup, archivialo in un campo di testo.

I campi Atom non hanno token. Un documento con un campo atomico che ha il valore "mal in tempo reale" corrisponderà solo a una ricerca per l'intera stringa "maltempo". Non corrisponderà alla ricerca di "bad" o "weather".

Regole di tokenizzazione
  • I trattini bassi (_) e la e commerciale (&) non suddivideranno le parole in token.

  • Questi spazi vuoti racchiudono sempre le parole in token: spazio, ritorno a capo, feed riga, tabulazione orizzontale, tabulazione verticale, feed modulo e NULL.

  • Questi caratteri vengono considerati come punteggiatura e suddivideranno le parole in token:

    !"%()
    *,-|/
    []]
    :=>?@
    {}~$
  • I caratteri nella tabella seguente di solito suddivideno le parole in token, ma possono essere gestiti in modo diverso a seconda del contesto in cui vengono visualizzati:

    Carattere Regola
    < In un campo HTML, il segno "meno di" indica l'inizio di un tag HTML che viene ignorato.
    + Una stringa di uno o più segni "più" viene considerata come parte della parola se viene visualizzata alla fine della parola (C++).
    # Il simbolo "hash" viene considerato come parte della parola se è preceduto da a, b, c, d, e, f, g, j o x (a# - g# sono note musicali; j# e x# sono linguaggio di programmazione, c# è entrambi). Se un termine è anteposto da '#' (#google), viene considerato come un hashtag e l'hash fa parte della parola.
    ' L'apostrofo è una lettera se precede la lettera "seguita da un'interruzione di parola, come in "Cappello di Mario".
    . Se tra le cifre viene visualizzato un punto decimale, questo fa parte di un numero (ovvero, un separatore decimale). Può fare parte di una parola anche se utilizzata in un acronimo (A.B.C).
    - Il trattino fa parte di una parola se utilizzato in un acronimo (I-B-M).
  • Tutti gli altri caratteri a 7 bit diversi da lettere e cifre ('A-Z', 'a-z', '0-9') sono gestiti come punteggiatura e presentano parole in token.

  • Tutto il resto viene analizzato come carattere UTF-8.

Acronimi

La tokenizzazione utilizza regole speciali per riconoscere gli acronimi (stringhe come "I.B.M.", "a-b-c" o "C I A"). Un acronimo è una stringa di singoli caratteri alfabetici, con tutti lo stesso carattere di separazione. I separatori validi sono il punto, il trattino o qualsiasi numero di spazi. Il carattere di separazione viene rimosso dalla stringa quando un acronimo viene tokenizzato. Di conseguenza, le stringhe di esempio menzionate sopra diventano i token "ibm", "abc". Il testo originale rimane nel campo del documento.

Per quanto riguarda gli acronimi, tieni presente che:

  • Un acronimo non può contenere più di 21 lettere. Una stringa di acronimo valida con più di 21 lettere viene suddivisa in una serie di acronimi, ogni 21 lettere o meno.
  • Se le lettere di un acronimo sono separate da spazi, tutte le lettere devono essere lo stesso caso. Gli acronimi creati con il punto e il trattino possono utilizzare lettere maiuscole e minuscole.
  • Quando cerchi un acronimo, puoi inserirne la forma canonica (la stringa senza separatori) oppure utilizzare l'acronimo con il trattino o il punto (ma non entrambi) tra le lettere dell'acronimo. Il testo "I.B.M" può essere recuperato con uno qualsiasi dei termini di ricerca "I.B.M". o "IBM".

Precisione del campo data

Quando crei un campo data in un documento, ne imposti il valore su datetime.date o datetime.datetime. Tieni presente che puoi utilizzare solo oggetti data/ora Python . Gli oggetti "Aware" non sono consentiti. . Ai fini dell'indicizzazione e della ricerca nel campo della data, qualsiasi componente temporale viene ignorato e la data viene convertita nel numero di giorni a partire dal giorno 01/01/1970 UTC. Ciò significa che, anche se un campo data può contenere un valore di data e ora preciso, una query di data può specificare solo un valore di campo data nel formato yyyy-mm-dd. Ciò significa inoltre che l'ordine ordinato dei campi di data con la stessa data non è ben definito.

Altre proprietà del documento

Il ranking di un documento è un numero intero positivo che determina l'ordine predefinito dei documenti restituiti da una ricerca. Per impostazione predefinita, il ranking viene impostato al momento della creazione del documento in base al numero di secondi dal 1 gennaio 2011. Puoi impostare il ranking in modo esplicito quando crei un documento. Non è una buona idea assegnare lo stesso ranking a molti documenti e non devi mai assegnare più di 10.000 documenti allo stesso ranking. Se specifichi le opzioni di ordinamento, puoi utilizzare il ranking come chiave di ordinamento. Tieni presente che, quando un ranking è utilizzato in un'espressione di ordinamento o in un'espressione di campo, il riferimento è _rank.

La proprietà della lingua specifica la lingua in cui sono codificati i campi.

Per ulteriori dettagli su questi attributi, consulta la pagina di riferimento delle classi Document.

Collegamento di un documento ad altre risorse

Puoi utilizzare l'doc_id di un documento e altri campi come link ad altre risorse nell'applicazione. Ad esempio, se utilizzi Blobstore, puoi associare il documento a un blob specifico impostando il valore doc_id o un valore Atom sul BlobKey dei dati.

Creazione di un documento

Il seguente esempio di codice mostra come creare un oggetto documento. Il costruttore Document viene chiamato con l'argomento campi impostato su un elenco di oggetti campo. Ogni oggetto nell'elenco viene creato e inizializzato utilizzando la funzione costruttore della classe del campo. Nota l'utilizzo del costruttore GeoPoint e della classe datetime Python per creare i tipi appropriati di valori di campo.

def create_document():
    document = search.Document(
        # Setting the doc_id is optional. If omitted, the search service will
        # create an identifier.
        doc_id='PA6-5000',
        fields=[
            search.TextField(name='customer', value='Joe Jackson'),
            search.HtmlField(
                name='comment', value='this is <em>marked up</em> text'),
            search.NumberField(name='number_of_visits', value=7),
            search.DateField(name='last_visit', value=datetime.now()),
            search.DateField(
                name='birthday', value=datetime(year=1960, month=6, day=19)),
            search.GeoField(
                name='home_location', value=search.GeoPoint(37.619, -122.37))
        ])
    return document

Utilizzo di un indice

Inserimento di documenti in un indice

Quando inserisci un documento in un indice, il documento viene copiato in un'archiviazione permanente e ogni campo viene indicizzato in base al nome, al tipo e all'elemento doc_id.

Il seguente esempio di codice mostra come accedere a un indice e inserire un documento.

def add_document_to_index(document):
    index = search.Index('products')
    index.put(document)
Puoi inviare fino a 200 documenti alla volta al metodo put(). Il raggruppamento in batch è più efficiente rispetto all'aggiunta di documenti uno alla volta.

Quando inserisci un documento in un indice che contiene già un documento con lo stesso doc_id, il nuovo documento sostituisce quello precedente. Non viene fornito alcun avviso. Puoi chiamare Index.get(id) prima di creare o aggiungere un documento a un indice per verificare se un elemento doc_id specifico esiste già.

Il metodo put restituisce un elenco di PutResults, uno per ogni documento passato come argomento. Se non hai specificato tu doc_id, puoi esaminare l'attributo id del risultato per scoprire i doc_id che sono stati generati:

def add_document_and_get_doc_id(documents):
    index = search.Index('products')
    results = index.put(documents)
    document_ids = [document.id for document in results]
    return document_ids

Tieni presente che la creazione di un'istanza della classe Index non garantisce che esista un indice permanente. Un indice permanente viene creato la prima volta che vi aggiungi un documento con il metodo put. Se vuoi verificare se un indice esiste effettivamente prima di iniziare a utilizzarlo, utilizza la funzione search.get_indexes().

Aggiornamento di documenti

Non puoi modificare un documento dopo averlo aggiunto a un indice. Non puoi aggiungere o rimuovere campi, né modificare il valore di un campo. Tuttavia, puoi sostituirlo con un nuovo documento che abbia lo stesso doc_id.

Recupero documenti di doc_id

Esistono due modi per recuperare i documenti da un indice utilizzando gli identificatori di documento:
  • Utilizza Index.get() per recuperare un singolo documento entro il relativo doc_id.
  • Utilizza Index.get_range() per recuperare un gruppo di documenti consecutivi ordinati per doc_id.

Ogni chiamata è illustrata nell'esempio riportato di seguito.

def get_document_by_id():
    index = search.Index('products')

    # Get a single document by ID.
    document = index.get("AZ125")

    # Get a range of documents starting with a given ID.
    documents = index.get_range(start_id="AZ125", limit=100)

    return document, documents

Cercare documenti in base al contenuto

Per recuperare i documenti da un indice, devi creare una stringa di query e chiamare Index.search(). La stringa di query può essere trasmessa direttamente come argomento oppure puoi includere la stringa in un oggetto Query che viene passato come argomento. Per impostazione predefinita, search() restituisce i documenti corrispondenti ordinati in ordine decrescente. Per controllare quanti documenti vengono restituiti, come vengono ordinati o aggiungere campi calcolati ai risultati, devi utilizzare un oggetto Query, che contiene una stringa di query e che può anche specificare altre opzioni di ricerca e ordinamento.

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

    results = index.search(query_string)

    for scored_document in results:
        print(scored_document)

Eliminazione di un indice

Ogni indice è costituito dai documenti indicizzati e da uno schema di indice. Per eliminare un indice, elimina tutti i documenti in un indice, quindi elimina lo schema di indice.

Puoi eliminare i documenti in un indice specificando il doc_id di uno o più documenti che vuoi eliminare al metodo Index.delete(). Dovresti eliminare i documenti in gruppi per migliorare l'efficienza. Puoi inviare fino a 200 ID documento alla volta al metodo delete().

def delete_index(index):
    # index.get_range by returns up to 100 documents at a time, so we must
    # loop until we've deleted all items.
    while True:
        # Use ids_only to get the list of document IDs in the index without
        # the overhead of getting the entire document.
        document_ids = [
            document.doc_id
            for document
            in index.get_range(ids_only=True)]

        # If no IDs were returned, we've deleted everything.
        if not document_ids:
            break

        # Delete the documents for the given IDs
        index.delete(document_ids)

    # delete the index schema
    index.delete_schema()
Puoi inviare fino a 200 documenti alla volta al metodo delete(). Il processo di eliminazione batch è più efficiente rispetto alla loro gestione una alla volta.

Coerenza finale

Quando inserisci, aggiorni o elimini un documento in un indice, la modifica si propaga in più data center. Di solito questa situazione si presenta in poco tempo, ma il tempo necessario può variare. L'API Search garantisce un'eventuale coerenza. Ciò significa che, in alcuni casi, la ricerca o il recupero di uno o più documenti potrebbero restituire risultati che non riflettono le modifiche più recenti.

Determinazione delle dimensioni di un indice

Un indice archivia i documenti da recuperare. Puoi recuperare un singolo documento in base all'ID, un intervallo di documenti con ID consecutivi o tutti i documenti in un indice. Puoi anche cercare un indice per recuperare i documenti che soddisfano determinati criteri sui campi e i relativi valori, specificati come stringa di query. Puoi gestire gruppi di documenti inserendoli in indici separati. Non esiste alcun limite al numero di documenti in un indice o al numero di indici che puoi utilizzare. La dimensione totale di tutti i documenti in un singolo indice è limitata per impostazione predefinita a 10 GB, ma può essere aumentata fino a 200 GB inviando una richiesta dalla pagina App Engine Search di Google Cloud Console. La proprietà di indice storage_limit è la dimensione massima consentita di un indice.

La proprietà indice storage_usage è una stima della quantità di spazio di archiviazione utilizzata da un indice. Questo numero è una stima perché il sistema di monitoraggio dell'indice non funziona continuamente; l'utilizzo effettivo viene calcolato periodicamente. Il storage_usage viene modificato tra i punti di campionamento tenendo conto delle aggiunte di documenti, ma non delle eliminazioni.

Esecuzione di operazioni asincrone

Puoi utilizzare chiamate asincrone per eseguire più operazioni senza bloccare e poi recuperare tutti i risultati contemporaneamente, bloccando una sola volta. Ad esempio, il seguente codice esegue più ricerche in modo asincrono:

def async_query(index):
    futures = [index.search_async('foo'), index.search_async('bar')]
    results = [future.get_result() for future in futures]
    return results

Schemi di indice

Ogni indice ha uno schema che mostra tutti i nomi dei campi e i tipi di campi che vengono visualizzati nei documenti che contiene. Non puoi definire personalmente uno schema. Gli schemi vengono mantenuti dinamicamente; vengono aggiornati man mano che i documenti vengono aggiunti a un indice. Uno schema semplice potrebbe avere il seguente formato simile a JSON:

{'comment': ['TEXT'], 'date': ['DATE'], 'author': ['TEXT'], 'count': ['NUMBER']}

Ogni chiave nel dizionario rappresenta il nome di un campo di documento. Il valore della chiave è un elenco dei tipi di campo utilizzati con quel nome. Se hai utilizzato lo stesso nome di campo con tipi di campo diversi, lo schema elencherà più di un tipo di campo per il nome di un campo, in questo modo:

{'ambiguous-integer': ['TEXT', 'NUMBER', 'ATOM']}

Quando un campo viene visualizzato in uno schema non può più essere rimosso. Non è possibile eliminare un campo, anche se l'indice non contiene più documenti con quel determinato nome di campo.

Puoi visualizzare gli schemi per gli indici in questo modo:

from google.appengine.api import search
...
for index in search.get_indexes(fetch_schema=True):
    logging.info("index %s", index.name)
    logging.info("schema: %s", index.schema)
Tieni presente che una chiamata a get_indexes non può restituire più di 1000 indici. Per recuperare più indici, richiama la funzione ripetutamente utilizzando l'argomento start_index_name.

Uno schema non definisce una "classe" nel senso di programmazione degli oggetti. Per quanto riguarda l'API Search, ogni documento è univoco e gli indici possono contenere diversi tipi di documenti. Se vuoi trattare raccolte di oggetti con lo stesso elenco di campi come istanze di una classe, questa è un'astrazione che devi applicare al tuo codice. Ad esempio, puoi assicurarti che tutti i documenti con lo stesso insieme di campi siano conservati nel proprio indice. Lo schema di indice potrebbe essere visto come la definizione della classe e ogni documento nell'indice rappresentava un'istanza della classe.

Visualizzazione degli indici in Google Cloud Console

In Cloud Console puoi visualizzare le informazioni sugli indici delle applicazioni e i documenti che contengono. Se fai clic sul nome di un indice, vengono visualizzati i documenti contenuti nell'indice. Vedrai tutti i campi dello schema definiti per l'indice; per ogni documento con un campo di questo nome, potrai vedere il valore del campo. Puoi anche inviare query sui dati dell'indice direttamente dalla console.

Quote per l'API Search

L'API Search ha diverse quote gratuite:

Risorsa o chiamata API Quota gratuita
Capacità di archiviazione totale (documenti e indici) 0,25 GB
Query 1000 query al giorno
Aggiunta di documenti agli indici 0,01 GB al giorno

L'API Search impone questi limiti per garantire l'affidabilità del servizio. vale sia per le app gratuite sia per quelle a pagamento.

Risorsa Quota di sicurezza
Utilizzo massimo delle query 100 minuti aggregati di tempo di esecuzione delle query al minuto
Numero massimo di documenti aggiunti o eliminati 15.000 al minuto
Dimensione massima per indice (numero illimitato di indici consentiti) 10 GB

L'utilizzo delle API viene conteggiato in modi diversi a seconda del tipo di chiamata:

  • Index.search(): ogni chiamata API viene conteggiata come una query; il tempo di esecuzione è equivalente alla latenza della chiamata.
  • Index.put(): quando aggiungi documenti per indicizzare le dimensioni di ogni documento e il numero di documenti viene conteggiato ai fini della quota di indicizzazione.
  • Tutte le altre chiamate all'API Search vengono conteggiate in base al numero di operazioni interessate:
    • search.get_indexes(): viene conteggiata 1 operazione per ogni indice effettivamente restituito, oppure 1 operazione se non viene restituito nulla.
    • Index.get() e Index.get_range(): 1 operazione conteggiata per ogni documento effettivamente restituito, oppure 1 operazione se non viene restituito nulla.
    • Index.delete(): 1 operazione conteggiata per ogni documento nella richiesta o 1 operazione se la richiesta è vuota.

La quota di velocità effettiva delle query viene impostata in modo che un singolo utente non possa monopolizzare il servizio di ricerca. Poiché le query possono essere eseguite contemporaneamente, a ogni applicazione è consentito eseguire query che consumano fino a 100 minuti di tempo di esecuzione per un minuto di orologio. Se esegui molte query brevi, probabilmente non raggiungerai questo limite. Una volta superata la quota, le query successive non andranno a buon fine fino alla quota successiva, quando la quota verrà ripristinata. La quota non viene applicata rigorosamente in sezioni di un minuto; viene utilizzata una variante dell'algoritmo perdito per controllare la larghezza di banda di ricerca con incrementi di cinque secondi.

Ulteriori informazioni sulle quote sono disponibili nella pagina Quote. Quando un'applicazione tenta di superare questi valori, viene restituito un errore di quota insufficiente.

Tieni presente che, sebbene questi limiti vengano applicati al minuto, la console mostra i totali giornalieri per ciascuno. I clienti con assistenza Silver, Gold o Platinum possono richiedere limiti di velocità effettiva superiori contattando il proprio rappresentante dell'assistenza.

Prezzi dell'API Search

I seguenti costi si applicano all'utilizzo oltre le quote gratuite:

Risorsa Costo
Capacità di archiviazione totale (documenti e indici) $0,18 per GB/mese
Query $ 0,50 per 10.000 query
Indicizzazione dei documenti disponibili per la ricerca $2,00 per GB

Ulteriori informazioni sui prezzi sono disponibili nella pagina Prezzi.