Utilizzo di IBM Cloudant Ricerca
IBM® Cloudant® for IBM Cloud® La ricerca consente di effettuare interrogazioni a testo libero, multi-campo e geospaziali semplici, supportate da Apache Lucene, un motore di ricerca open-source.
IBM Cloudant La ricerca viene utilizzata per creare query flessibili che utilizzano uno, molti o tutti i campi indicizzati, utilizzando la sintassi delle query di Apache Lucene.
Come funziona la ricerca su IBM Cloudant
Le definizioni degli indici di ricerca sono memorizzate nei documenti di progettazione sotto forma di una funzione JavaScript che viene eseguita su ogni documento del database. La funzione definisce quali attributi sono indicizzati, quali sono memorizzati nell'indice ma non sono ricercabili e come ogni attributo di testo viene pre-elaborato prima dell'indicizzazione (utilizzando un "analizzatore" di ricerca scelto).
IBM Cloudant le ricerche possono agire sull'intero database o, per i database partizionati, su una singola partizione dove options.partitioned è true nel documento di progettazione.
Quando utilizzare la ricerca su IBM Cloudant
IBM Cloudant La ricerca è ideale per:
- Ricerca full-text consapevole della lingua, ricerche con caratteri jolly e semplici query di intervallo su campi numerici o di testo.
- Query flessibili su un insieme di campi indicizzati.
- Semplici query geospaziali, come Trova il più vicino o Trova con un riquadro di delimitazione.
- Aggregazioni di conteggio su singoli campi all'interno dell'insieme di risultati, note come "faceting".
Quando non utilizzare la ricerca su IBM Cloudant
Evitare IBM Cloudant Ricerca di
- Aggregazione (diversa dalla sfaccettatura). Utilizzare invece le viste.
Creare un indice di ricerca
Per creare un indice di ricerca, si aggiunge una funzione JavaScript a un documento di design nel database. Un indice si costruisce dopo l'elaborazione di una richiesta di ricerca o dopo che il server rileva un aggiornamento di un documento.
La funzione index accetta i seguenti parametri:
- Nome del campo - Il nome del campo che si desidera utilizzare quando si interroga l'indice. Se si imposta questo parametro su
default, il campo viene interrogato se non è specificato alcun campo nella sintassi della query. - Dati che si desidera indicizzare, ad esempio
doc.address.country. - (Facoltativo) Il terzo parametro comprende i seguenti campi:
boost,facet,index, estore. Questi campi sono descritti in dettaglio più avanti.
Per impostazione predefinita, la risposta di un indice di ricerca restituisce 25 righe. Il numero di righe restituite può essere modificato utilizzando il parametro limit. Tuttavia, il set di risultati di una ricerca è limitato
a 200 righe. Ogni risposta include un campo bookmark. È possibile includere il valore del campo bookmark nelle query successive per esaminare le risposte.
È possibile interrogare l'API utilizzando uno dei seguenti metodi: URI, IBM Cloudant Dashboard, curl o un plug-in del browser, come Postman o RESTClient.
Si veda il seguente esempio di documento di progettazione che definisce un indice di ricerca:
{
"_id": "_design/search_example",
"indexes": {
"animals": {
"index": "function(doc){ ... }"
}
}
}
Tipo di partizionamento dell'indice di ricerca
Un indice di ricerca eredita il tipo di partizionamento dal options.partitioned campo del documento di progettazione in cui è contenuto.
Funzioni dell'indice
Se si tenta di indicizzare utilizzando un campo dati che non esiste, l'operazione fallisce. Per evitare questo problema, utilizzare una clausola di protezione appropriata.
Le funzioni di indicizzazione operano in un ambiente a memoria limitata, dove il documento stesso costituisce una parte della memoria utilizzata. Lo stack e il documento del codice devono rientrare in questa memoria. I documenti sono limitati a una dimensione massima di 64 MB.
All'interno di un indice di ricerca, non indicizzare lo stesso nome di campo con più di un tipo di dati. Se lo stesso nome di campo viene indicizzato con tipi di dati diversi nella stessa funzione di indice di ricerca, potrebbe verificarsi un
errore. Questo errore si verifica quando si interroga l'indice di ricerca che contiene il campo was indexed without position data. Ad esempio, non includere entrambe le righe nella stessa funzione di indice di ricerca. Queste
righe indicizzano il campo myfield come due tipi di dati diversi, una stringa "this is a string" e un numero 123.
index("myfield", "this is a string");
index("myfield", 123);
La funzione contenuta nel campo dell'indice è una funzione JavaScript che viene richiamata per ogni documento del database. La funzione prende il documento come parametro, estrae alcuni dati da esso e poi chiama la funzione definita nel campo
index per indicizzare tali dati.
La funzione index accetta tre parametri, di cui il terzo è opzionale.
Il primo parametro è il nome del campo che si intende usare quando si interroga l'indice, che viene specificato nella parte della sintassi di Lucene delle query successive. Un esempio è rappresentato dalla seguente query:
query=color:red
Il nome del campo Lucene color è il primo parametro della funzione index.
Il parametro query può essere abbreviato in q, quindi un altro modo di scrivere la query è mostrato nell'esempio seguente.
q=color:red
Se si usa il valore speciale "default" quando si definisce il nome, non è necessario specificare il nome del campo al momento della query. L'effetto è che la query può essere semplificata:
query=red
Il secondo parametro è il dato da indicizzare. Tenere presente le seguenti informazioni quando si indicizzano i dati:
- Questi dati devono essere solo una stringa, un numero o un booleano. Altri tipi restituiscono un errore dalla chiamata alla funzione indice.
- Se durante l'esecuzione della funzione viene restituito un errore, per questo o altri motivi, il documento non viene aggiunto all'indice di ricerca.
Il terzo parametro, opzionale, è un oggetto JavaScript con i seguenti campi:
| Opzione | Descrizione | Valori | Valore predefinito |
|---|---|---|---|
boost |
Un numero che specifica la rilevanza nei risultati di ricerca. I contenuti indicizzati con un valore di boost superiore a 1 sono più rilevanti di quelli indicizzati senza valore di boost. I contenuti con un valore di boost inferiore a uno non sono così rilevanti. | Un numero positivo in virgola mobile | 1 (Nessun potenziamento) |
facet |
Crea un indice sfaccettato. Per ulteriori informazioni, vedere Sfaccettatura. | true |
false |
index |
Se i dati sono indicizzati e, in caso affermativo, come. Se impostato su false, i dati non possono essere usati per le ricerche, ma possono essere recuperati dall'indice se store è impostato su true.
Per ulteriori informazioni, vedere Analizzatori. |
true, false |
true |
store |
Se true, il valore viene restituito nel risultato della ricerca; altrimenti, il valore non viene restituito. |
true, false |
false |
Se non si imposta il parametro store, i risultati dei dati dell'indice per il documento non vengono restituiti in risposta a una query.
Vedere il seguente esempio di funzione indice di ricerca:
function(doc) {
index("default", doc._id);
if (doc.min_length) {
index("min_length", doc.min_length, {"store": true});
}
if (doc.diet) {
index("diet", doc.diet, {"store": true});
}
if (doc.latin_name) {
index("latin_name", doc.latin_name, {"store": true});
}
if (doc.class) {
index("class", doc.class, {"store": true});
}
}
Archiviare vs include_docs=true
Quando IBM Cloudant restituisce i dati di una ricerca, è possibile scegliere tra le seguenti opzioni: store: true o include_docs=true. Vedere le seguenti descrizioni:
- Al momento dell'indicizzazione, scegliere l'opzione "
{store: true}". Questa opzione indica che il campo con cui si sta lavorando deve essere memorizzato all'interno dell'indice. Un campo può essere "memorizzato" anche se non viene utilizzato per l'indicizzazione stessa. Ad esempio, potresti voler "memorizzare" un numero di telefono, anche se il tuo algoritmo di ricerca non include la ricerca per numero di telefono. - Al momento della query, passare
?include_docs=trueper indicare a IBM Cloud che si desidera che venga restituito l'intero corpo di ogni documento corrispondente.
La prima opzione significa avere un indice più grande, ma è il modo più veloce per recuperare i dati. La seconda opzione mantiene l'indice piccolo, ma aggiunge un lavoro extra di tempo di interrogazione per l' IBM Cloud, poiché deve recuperare i corpi dei documenti dopo che il set di risultati della ricerca è stato calcolato. Questo processo può essere più lento e aggiungere un ulteriore carico al cluster dell' IBM Cloud.
Se possibile, scegli la prima opzione seguendo le seguenti linee guida:
- Indicizza solo i campi che vuoi rendere ricercabili.
- Memorizza solo i campi che devi recuperare al momento della query.
Clausole di protezione degli indici
La funzione index richiede il nome del campo dati da indicizzare come secondo parametro. Tuttavia, se quel campo dati non esiste per il documento, si verifica un errore. La soluzione consiste nell'utilizzare un'appropriata "clausola
di guardia" che verifichi l'esistenza del campo. Questa clausola contiene il tipo di dati atteso prima di qualsiasi tentativo di creare l'indice corrispondente.
Si veda il seguente esempio di definizione che non prevede alcuna validazione del tipo di campo dati dell'indice:
if (doc.min_length) {
index("min_length", doc.min_length, {"store": true});
}
Si può usare l'operatore JavaScript typeof per implementare il test della clausola di guardia. Se il campo esiste e ha il tipo previsto, viene restituito il nome del tipo corretto. Il test della clausola di guardia ha successo,
il che significa che l'uso della funzione indice è sicuro. Se il campo non esiste, non si otterrebbe il tipo di campo previsto, ecco perché non si dovrebbe provare a indicizzare il campo.
JavaScript considera un risultato falso se viene verificato uno dei seguenti valori:
- 'non definito'
- Null
- Il numero +0
- Il numero -0
- NaN (non è un numero)
- "" (la stringa vuota)
Si veda il seguente esempio che utilizza una clausola di guardia per verificare l'esistenza del campo dati richiesto, e contiene un numero, prima di provare a indicizzare:
if (typeof doc.min_length === 'number') {
index("min_length", doc.min_length, {"store": true});
}
Utilizzare una clausola di guardia generica per assicurarsi che il tipo del campo dati candidato sia definito.
Si veda il seguente esempio di clausola di guardia "generica":
if (typeof doc.min_length) !== 'undefined') {
// The field exists, and does have a type, so we can proceed to index using it.
...
}
Analizzatori
Gli analizzatori sono impostazioni che definiscono come riconoscere i termini all'interno del testo. Per ulteriori informazioni, vedere Analizzatori di ricerca.
Gli analizzatori possono essere utili se è necessario indicizzare più lingue.
La tabella seguente mostra un elenco di analizzatori generici supportati dalla ricerca IBM Cloudant:
| Analizzatore | Descrizione |
|---|---|
classic |
L'analizzatore standard di Lucene, versione 3.1 circa. |
email |
Come l'analizzatore standard, ma tenta di abbinare un indirizzo e-mail come un token completo. |
keyword |
L'input non è affatto tokenizzato. |
simple |
Divide il testo in corrispondenza dei non caratteri. |
simple_asciifolding |
Divide il testo in corrispondenza dei non caratteri. Converte i caratteri nell'equivalente ASCII più vicino |
standard |
L'analizzatore predefinito. Implementa le regole di interruzione delle parole dell'algoritmo di segmentazione del testo Unicode™). |
whitespace |
Divide il testo ai confini dello spazio bianco. |
Si veda il seguente esempio di documento di analisi:
{
"_id": "_design/analyzer_example",
"indexes": {
"INDEX_NAME": {
"index": "function (doc) { ... }",
"analyzer": "$ANALYZER_NAME"
}
}
}
Analizzatori specifici per la lingua
Questi analizzatori omettono parole comuni nella lingua specifica, e molti anche rimuovere i prefissi e i suffissi. Il nome del linguaggio è anche il nome dell'analizzatore.
arabicarmenianbasquebulgarianbraziliancatalancjk(cinese, giapponese, coreano)chinese(smartcn)czechdanishdutchenglishfinnishfrenchgermangreekgalicianhindihungarianindonesianirishitalianjapanese(kuromoji)latviannorwegianpersianpolish(stempel)portugueseromanianrussianspanishswedishthaiturkish
Gli analizzatori specifici per la lingua sono ottimizzati per la lingua specificata. Non è possibile combinare un analizzatore generico con un analizzatore specifico per la lingua. Si può invece usare un analizzatore perfield per selezionare analizzatori diversi per campi diversi all'interno dei documenti.
Analizzatori per campo
L'analizzatore perfield configura molti analizzatori per diversi campi.
Si veda il seguente esempio che definisce analizzatori diversi per campi diversi:
{
"_id": "_design/analyzer_example",
"indexes": {
"INDEX_NAME": {
"analyzer": {
"name": "perfield",
"default": "english",
"fields": {
"spanish": "spanish",
"german": "german"
}
},
"index": "function (doc) { ... }"
}
}
}
Parole d'ordine
Le stop words sono parole che non vengono indicizzate. Si definiscono all'interno di un documento di progettazione trasformando la stringa dell'analizzatore in un oggetto.
Gli analizzatori keyword, simple e whitespace non supportano le stop words.
Le stop word predefinite per l'analizzatore standard sono incluse nel seguente elenco:
"a", "an", "and", "are", "as", "at", "be", "but", "by", "for", "if",
"in", "into", "is", "it", "no", "not", "of", "on", "or", "such",
"that", "the", "their", "then", "there", "these", "they", "this",
"to", "was", "will", "with"
Si veda il seguente esempio che definisce le parole non indicizzate ("stop"):
{
"_id": "_design/stop_words_example",
"indexes": {
"INDEX_NAME": {
"analyzer": {
"name": "portuguese",
"stopwords": [
"foo",
"bar",
"baz"
]
},
"index": "function (doc) { ... }"
}
}
}
Verifica della tokenizzazione dell'analizzatore
È possibile verificare i risultati della tokenizzazione dell'analizzatore inviando dati campione all'endpoint _search_analyze.
Vedi l'esempio seguente che utilizza HTTP per testare l'analizzatore di keyword:
Host: $ACCOUNT.cloudant.com
POST /_search_analyze HTTP/1.1
Content-Type: application/json
{"analyzer":"keyword", "text":"ablanks@renovations.com"}
Si veda il seguente esempio che utilizza la riga di comando per testare l'analizzatore keyword
curl "https://$ACCOUNT.cloudant.com/_search_analyze" \
-H "Content-Type: application/json" \
-d '{"analyzer":"keyword", "text":"ablanks@renovations.com"}'
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.PostSearchAnalyzeOptions;
import com.ibm.cloud.cloudant.v1.model.SearchAnalyzeResult;
Cloudant service = Cloudant.newInstance();
PostSearchAnalyzeOptions searchAnalyzerOptions =
new PostSearchAnalyzeOptions.Builder()
.analyzer("keyword")
.text("ablanks@renovations.com")
.build();
SearchAnalyzeResult response =
service.postSearchAnalyze(searchAnalyzerOptions).execute()
.getResult();
System.out.println(response);
import { CloudantV1 } from '@ibm-cloud/cloudant';
const service = CloudantV1.newInstance({});
service.postSearchAnalyze({
analyzer: 'keyword',
text: 'ablanks@renovations.com',
}).then(response => {
console.log(response.result);
});
from ibmcloudant.cloudant_v1 import CloudantV1
service = CloudantV1.new_instance()
response = service.post_search_analyze(
analyzer='keyword',
text='ablanks@renovations.com'
).get_result()
print(response)
postSearchAnalyzeOptions := service.NewPostSearchAnalyzeOptions(
"keyword",
"ablanks@renovations.com",
)
searchAnalyzeResult, _, err := service.PostSearchAnalyze(postSearchAnalyzeOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(searchAnalyzeResult, "", " ")
fmt.Println(string(b))
Il precedente esempio di Go richiede il seguente blocco di importazione:
import (
"encoding/json"
"fmt"
"github.com/IBM/cloudant-go-sdk/cloudantv1"
)
Si veda il seguente risultato che mette alla prova l'analizzatore keyword
{
"tokens": [
"ablanks@renovations.com"
]
}
Vedi l'esempio seguente che utilizza HTTP per testare l'analizzatore di standard:
Host: $ACCOUNT.cloudant.com
POST /_search_analyze HTTP/1.1
Content-Type: application/json
{"analyzer":"standard", "text":"ablanks@renovations.com"}
Si veda il seguente esempio che utilizza la riga di comando per testare l'analizzatore standard
curl "https://$ACCOUNT.cloudant.com/_search_analyze" -H "Content-Type: application/json"
-d '{"analyzer":"standard", "text":"ablanks@renovations.com"}'
Si veda il seguente risultato del test dell'analizzatore standard
{
"tokens": [
"ablanks",
"renovations.com"
]
}
Query
Dopo aver creato un indice di ricerca, è possibile interrogarlo.
-
Eseguire una query di partizione utilizzando la seguente richiesta:
GET /$DATABASE/_partition/$PARTITION_KEY/_design/$DDOC/_search/$INDEX_NAME -
Eseguire una query globale utilizzando la seguente richiesta:
GET /$DATABASE/_design/$DDOC/_search/$INDEX_NAME
Specificare la ricerca utilizzando il parametro query.
Vedere l'esempio seguente che utilizza HTTP per interrogare un indice partizionato:
GET /$DATABASE/_partition/$PARTITION_KEY/_design/$DDOC/_search/$INDEX_NAME?include_docs=true&query="*:*"&limit=1 HTTP/1.1
Content-Type: application/json
Host: $ACCOUNT.cloudant.com
Si veda il seguente esempio che utilizza la riga di comando per interrogare un indice partizionato:
curl "https://$ACCOUNT.cloudant.com/$DATABASE/_partition/$PARTITION_KEY/_design/$DDOC/_search/$INDEX_NAME?include_docs=true&query=\"*:*\"&limit=1"
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.PostPartitionSearchOptions;
import com.ibm.cloud.cloudant.v1.model.SearchResult;
Cloudant service = Cloudant.newInstance();
PostPartitionSearchOptions searchOptions =
new PostPartitionSearchOptions.Builder()
.db("<db-name>")
.partitionKey("<partition-key>")
.ddoc("<ddoc>")
.index("<index-name>")
.query("*:*")
.includeDocs(true)
.limit(1)
.build();
SearchResult response =
service.postPartitionSearch(searchOptions).execute()
.getResult();
System.out.println(response);
import { CloudantV1 } from '@ibm-cloud/cloudant';
const service = CloudantV1.newInstance({});
service.postSearch({
db: '<db-name>',
partitionKey: '<partition-key>',
ddoc: '<ddoc>',
index: '<index-name>',
query: '*:*',
includeDocs: true,
limit: 1
}).then(response => {
console.log(response.result);
});
from ibmcloudant.cloudant_v1 import CloudantV1
service = CloudantV1.new_instance()
response = service.post_search(
db='<db-name>',
partition_key='<partition-key>',
ddoc='<ddoc>',
index='<index-name>',
query='*:*',
include_docs=True,
limit=1
).get_result()
print(response)
postPartitionSearchOptions := service.NewPostPartitionSearchOptions(
"<db-name>",
"<partition-key>",
"<ddoc>",
"<index-name>",
"*:*",
)
postPartitionSearchOptions.SetIncludeDocs(true)
postPartitionSearchOptions.SetLimit(1)
searchResult, _, err := service.PostPartitionSearch(postPartitionSearchOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(searchResult, "", " ")
fmt.Println(string(b))
Il precedente esempio di Go richiede il seguente blocco di importazione:
import (
"encoding/json"
"fmt"
"github.com/IBM/cloudant-go-sdk/cloudantv1"
)
Vedi l'esempio seguente che utilizza HTTP per interrogare un indice globale:
GET /$DATABASE/_design/$DDOC/_search/$INDEX_NAME?include_docs=true&query="*:*"&limit=1 HTTP/1.1
Content-Type: application/json
Host: $ACCOUNT.cloudant.com
Si veda il seguente esempio che utilizza la riga di comando per interrogare un indice globale:
curl "https://$ACCOUNT.cloudant.com/$DATABASE/_design/$DDOC/_search/$INDEX_NAME?include_docs=true&query=\"*:*\"&limit=1"
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.PostSearchOptions;
import com.ibm.cloud.cloudant.v1.model.SearchResult;
Cloudant service = Cloudant.newInstance();
PostSearchOptions searchOptions = new PostSearchOptions.Builder()
.db("<db-name>")
.ddoc("<ddoc>")
.index("<index-name>")
.query("*:*")
.includeDocs(true)
.limit(1)
.build();
SearchResult response =
service.postSearch(searchOptions).execute()
.getResult();
System.out.println(response);
import { CloudantV1 } from '@ibm-cloud/cloudant';
const service = CloudantV1.newInstance({});
service.postSearch({
db: '<db-name>',
ddoc: '<ddoc>',
index: '<index-name>',
query: '*:*',
includeDocs: true,
limit: 1
}).then(response => {
console.log(response.result);
});
from ibmcloudant.cloudant_v1 import CloudantV1
service = CloudantV1.new_instance()
response = service.post_search(
db='<db-name>',
ddoc='<ddoc>',
index='<index-name>',
query='*:*',
include_docs=True,
limit=1
).get_result()
print(response)
postSearchOptions := service.NewPostSearchOptions(
"<db-name>",
"<ddoc>",
"<index-name>",
"*:*",
)
postSearchOptions.SetIncludeDocs(true)
postSearchOptions.SetLimit(1)
searchResult, _, err := service.PostSearch(postSearchOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(searchResult, "", " ")
fmt.Println(string(b))
Il precedente esempio di Go richiede il seguente blocco di importazione:
import (
"encoding/json"
"fmt"
"github.com/IBM/cloudant-go-sdk/cloudantv1"
)
Parametri di query
You must enable sfaccettatura before you can use the following parameters: counts and drilldown.
| Argomento | Descrizione | Facoltativo | Immettere | Valori supportati | Query di partizione |
|---|---|---|---|---|---|
bookmark |
Un segnalibro ricevuto da una ricerca precedente. Questo parametro consente di sfogliare i risultati. Se non ci sono risultati dopo il segnalibro, si ottiene una risposta con un array di righe vuoto e lo stesso segnalibro, che conferma la fine dell'elenco dei risultati. | yes |
Stringa | Sì | |
counts |
Questo campo definisce un array di nomi di campi stringa, per i quali sono richiesti i conteggi. La risposta include i conteggi per ogni valore unico di questo nome di campo tra i documenti che corrispondono alla query di ricerca. Affinché questo parametro funzioni, è necessario che la sfaccettatura sia abilitata. | Sì | JSON | Un array JSON di nomi di campi. | No |
drilldown |
Questo campo può essere utilizzato più volte. Ogni utilizzo definisce una coppia di un nome di campo e di un valore. La ricerca corrisponde solo ai documenti che includono il valore fornito nel campo denominato. Si differenzia dall'uso
di "fieldname:value" nel parametro q solo per il fatto che i valori non vengono analizzati. Affinché questo parametro funzioni, è necessario che la sfaccettatura sia abilitata. |
No | JSON | Un array JSON che include due elementi: il nome del campo e il valore. | Sì |
group_field |
Campo in base al quale raggruppare le corrispondenze di ricerca. | Sì | Stringa | Una stringa che include il nome di un campo stringa. I campi che includono altri dati, come numeri, oggetti o array, non possono essere utilizzati. | No |
group_limit |
Numero massimo di gruppi. Questo campo può essere utilizzato solo se è specificato group_field. |
Sì | Numerico | No | |
group_sort |
Questo campo definisce l'ordine dei gruppi in una ricerca che utilizza group_field. L'ordine predefinito è la rilevanza. |
Sì | JSON | Questo campo può avere gli stessi valori del campo di ordinamento, quindi sono supportati campi singoli e array di campi. | No |
highlight_fields |
Specifica quali campi evidenziare. Se specificato, l'oggetto risultato include un campo highlights con una voce per ogni campo specificato. |
Sì | Array di stringhe | Sì | |
highlight_pre_tag |
Una stringa che viene inserita prima della parola evidenziata nell'output delle evidenziazioni. | Sì, l'impostazione predefinita è <em> |
Stringa | Sì | |
highlight_post_tag |
Una stringa che viene inserita dopo la parola evidenziata nell'output delle evidenziazioni. | Sì, l'impostazione predefinita è </em> |
Stringa | Sì | |
highlight_number |
Numero di frammenti restituiti in evidenza. Se il termine di ricerca supera la dimensione del frammento, viene restituito l'intero termine di ricerca. | Sì, valore predefinito 1 | Numerico | Sì | |
highlight_size |
Suddivide il contenuto del campo in un certo numero di caratteri, i cosiddetti frammenti, ed evidenzia le corrispondenze solo all'interno dei frammenti specificati. | Sì, impostazione predefinita: 100 caratteri | Numerico | Sì | |
include_docs |
Includere il contenuto completo dei documenti nella risposta. | Sì | Booleano | Sì | |
include_fields |
Un array JSON di nomi di campi da includere nei risultati della ricerca. I campi inclusi devono essere indicizzati con l'opzione store:true. |
Sì, l'impostazione predefinita è tutti i campi. | Array di stringhe | Sì | |
limit |
Limita il numero dei documenti restituiti al numero specificato. Per una ricerca raggruppata, questo parametro limita il numero di documenti per gruppo. | Sì | Numerico | Il valore limite può essere qualsiasi numero intero positivo fino a 200 compreso. | Sì |
q |
Abbreviazione di query. Esegue una query Lucene. |
No | Stringa o numero | Sì | |
query |
Esegue una query Lucene. | No | Stringa o numero | Sì | |
ranges |
Questo campo definisce gli intervalli per i campi di ricerca numerici sfaccettati. Il valore è un oggetto JSON in cui i nomi dei campi sono campi di ricerca numerici sfaccettati e i valori dei campi sono oggetti JSON. I nomi dei campi
degli oggetti JSON sono nomi di intervalli. I valori sono stringhe che descrivono l'intervallo, ad esempio "[0 TO 10]". |
Sì | JSON | Il valore deve essere un oggetto con campi che hanno oggetti come valori. Questi oggetti devono avere come valori di campo stringhe con intervalli. | No |
sort |
Specifica l'ordine dei risultati. In una ricerca raggruppata (quando si usa group_field ), questo parametro specifica l'ordine all'interno di un gruppo. L'ordine predefinito è la rilevanza. |
Sì | JSON | Una stringa JSON della forma "fieldname<type>" o -fieldname<type> per l'ordine decrescente. Il campo fieldname è il nome di un campo String o Number e type è un
numero, una stringa o un array JSON di stringhe. La parte type è facoltativa e ha come valore predefinito number. Alcuni esempi sono "foo", "-foo", "bar<string>",
"-foo<number>" e ["-foo<number>","bar<string>"]. I campi stringa utilizzati per l'ordinamento non devono essere campi analizzati. I campi utilizzati per l'ordinamento
devono essere indicizzati dallo stesso indicizzatore utilizzato per la query di ricerca. |
Sì |
stale |
Non aspettare che l'indice finisca di costruirsi per restituire i risultati. | Sì | Stringa | OK | Sì |
Non combinare le opzioni bookmark e stale. Queste opzioni vincolano la scelta delle repliche dello shard da utilizzare per la risposta. Se usate insieme, le opzioni possono causare problemi quando si cerca di contattare
repliche lente o non disponibili.
L'uso di include_docs=true potrebbe avere implicazioni sulle prestazioni.
Rilevanza
Quando possono essere restituiti più risultati, è possibile ordinarli. Per impostazione predefinita, l'ordine di ordinamento è determinato dalla "rilevanza".
La rilevanza è misurata in base a
Apache Lucene Scoring. A titolo di esempio, se si cerca in un semplice database la parola example, due documenti potrebbero contenere
questa parola. Se un documento cita la parola example 10 volte, ma il secondo documento la cita solo due volte, allora il primo documento è considerato più "rilevante".
Se non si fornisce un parametro sort, viene utilizzato per impostazione predefinita. Le partite con il punteggio più alto vengono restituite per prime.
Se si fornisce un parametro sort, le corrispondenze vengono restituite in quell'ordine, ignorando la rilevanza.
Se si desidera utilizzare un parametro sort, e includere anche l'ordinamento per rilevanza nei risultati della ricerca, utilizzare i campi speciali -<score> o <score> all'interno del parametro
sort.
POST delle query di ricerca
Invece di utilizzare il metodo GET HTTP, puoi anche utilizzare POST. Il vantaggio principale delle POST query è che possono avere un corpo di richiesta, quindi è possibile specificare la richiesta come
oggetto JSON. Ogni parametro della tabella precedente corrisponde a un campo dell'oggetto JSON nel corpo della richiesta.
Vedi l'esempio seguente che utilizza HTTP per inviare una richiesta di ricerca a POST:
POST /db/_design/ddoc/_search/searchname HTTP/1.1
Content-Type: application/json
Host: $ACCOUNT.cloudant.com
Si veda il seguente esempio che utilizza la riga di comando per POST una richiesta di ricerca:
curl "https://$ACCOUNT.cloudant.com/$DATABASE/_design/$DDOC/_search/$INDEX_NAME" -X POST -H "Content-Type: application/json" -d @search.json
Si veda il seguente esempio di documento JSON che include una richiesta di ricerca:
{
"q": "index:my query",
"sort": "foo",
"limit": 3
}
Paginazione
Utilizzare la paginazione dei segnalibri per le query di ricerca. Per dettagli ed esempi specifici, consultare l'argomento della documentazione API Paging on search index queries.
Sintassi della query
La sintassi delle query di ricerca IBM Cloudant è basata sulla sintassi di
Lucene. Le query di ricerca assumono la forma di name:value, a
meno che il nome non venga omesso, in tal caso utilizzano il campo predefinito, come mostrato negli esempi seguenti:
Si vedano i seguenti esempi di espressioni di query di ricerca:
// Birds
class:bird
// Animals that begin with the letter "l"
l*
// Carnivorous birds
class:bird AND diet:carnivore
// Herbivores that start with letter "l"
l* AND diet:herbivore
// Medium-sized herbivores
min_length:[1 TO 3] AND diet:herbivore
// Herbivores that are 2m long or less
diet:herbivore AND min_length:[-Infinity TO 2]
// Mammals that are at least 1.5m long
class:mammal AND min_length:[1.5 TO Infinity]
// Find "Meles meles"
latin_name:"Meles meles"
// Mammals who are herbivore or carnivore
diet:(herbivore OR omnivore) AND class:mammal
// Return all results
*:*
Le query su più campi possono essere combinate logicamente, e i gruppi e i campi possono essere ulteriormente raggruppati. Gli operatori logici disponibili distinguono tra maiuscole e minuscole e sono AND,+,OR,NOT e - Le query di intervallo possono essere eseguite su stringhe o numeri.
Se si desidera una ricerca confusa, è possibile eseguire una query con ~ per trovare termini simili al termine di ricerca. Ad esempio,
look~ trova i termini book e took.
Se i limiti superiori di una query di intervallo sono entrambi stringhe che contengono solo cifre numeriche, i limiti vengono trattati come numeri e non come stringhe. Ad esempio, se si effettua una ricerca utilizzando la query mod_date:["20170101" TO "20171231"],
i risultati includono i documenti per i quali mod_date è compreso tra i valori numerici 20170101 e 20171231, non tra le stringhe "20170101" e "20171231".
È possibile modificare l'importanza di un termine di ricerca aggiungendo ^ e un numero positivo. Questa alterazione crea corrispondenze che contengono il termine più o meno rilevante, proporzionale alla potenza del valore di boost.
Il valore predefinito è 1, che significa nessun aumento o diminuzione della forza della corrispondenza. Un valore decimale di 0 - 1 riduce l'importanza, rende la forza della corrispondenza più debole. Un valore maggiore di uno aumenta l'importanza,
che rende più forte la forza della corrispondenza.
Sono supportate le ricerche con caratteri jolly, per ricerche con caratteri singoli ?) e multipli *). Ad esempio,
dat? corrisponderebbe a date e data, mentre dat* corrisponderebbe a date,data,database, e dates. I caratteri jolly devono essere inseriti
dopo il termine di ricerca.
Utilizzare *:* per restituire tutti i risultati.
I set di risultati delle ricerche sono limitati a 200 righe, e restituiscono 25 righe per impostazione predefinita. Il numero di righe che vengono restituite può essere cambiato utilizzando il parametro limit.
Se la query di ricerca non specifica l'argomento "group_field", la risposta include un segnalibro. Se questo segnalibro viene fornito in seguito come parametro di tipo " URL ", la risposta salta le righe già
visualizzate, rendendo più facile e veloce ottenere la serie di risultati successiva.
La risposta non include mai un segnalibro se il parametro "group_field" è incluso nella query di ricerca.
Le opzioni group_field, group_limit e group_sort sono disponibili solo quando si eseguono query globali.
I seguenti caratteri richiedono l'escape se si vuole effettuare una ricerca su di essi:
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /
Per sfuggire a uno di questi caratteri, utilizzare un carattere backslash precedente \).
La risposta a una query di ricerca include un campo order per ciascuno dei risultati. Il campo order è un array in cui il primo elemento è il campo o i campi specificati nel parametro nel parametro sort.
Se nessun parametro sort è incluso nella query, il campo order contiene il punteggio di rilevanza di Lucene.
Se si utilizza la funzione sort by distance come descritto in Ricerche geografiche, il primo elemento è la distanza da un punto. La distanza viene misurata utilizzando i chilometri o le miglia.
Il secondo elemento dell'array di ordini può essere ignorato. Viene utilizzato esclusivamente a scopo di risoluzione dei problemi.
Sfaccettatura
IBM Cloudant La ricerca supporta anche la ricerca sfaccettata, che consente di scoprire informazioni aggregate sulle corrispondenze in modo rapido e semplice. È possibile trovare una corrispondenza tra tutti i documenti utilizzando la sintassi
speciale ?q=*:* della query, e utilizzare le sfaccettature restituite per affinare la query. Per indicare che un campo deve essere indicizzato per le query sfaccettate, impostare {"facet": true} nelle opzioni.
Vedere il seguente esempio di query di ricerca, specificando che la ricerca sfaccettata è abilitata:
function(doc) {
index("type", doc.type, {"facet": true});
index("price", doc.price, {"facet": true});
}
Per utilizzare le faccette, tutti i documenti dell'indice devono includere tutti i campi per i quali sono state attivate le faccette. Se i documenti non includono tutti i campi, si riceve un errore con il seguente motivo: bad_request Il file field_name non esiste" Se ogni documento non contiene tutti i campi per le faccette, creare indici separati per ogni campo. Se non si creano indici separati per ogni campo, è necessario includere solo i documenti
che contengono tutti i campi. Verificare che i campi esistano in ogni documento utilizzando una singola istruzione if.
Vedere il seguente esempio di dichiarazione if per verificare che i campi richiesti esistano in ogni documento:
if (typeof doc.town == "string" && typeof doc.name == "string") {
index("town", doc.town, {facet: true});
index("name", doc.name, {facet: true});
}
Conteggi
L'opzione counts è disponibile solo quando si effettuano query globali.
La sintassi counts delle faccette prende un elenco di campi, e restituisce il numero di risultati della query per ogni valore univoco di ciascun campo.
L'operazione count funziona solo se i valori indicizzati sono stringhe. I valori indicizzati non possono essere di tipo misto. Ad esempio, se sono indicizzate 100 stringhe, e un numero, l'indice non può essere utilizzato per operazioni
count. È possibile verificare il tipo utilizzando l'operatore typeof , e convertirlo utilizzando le funzioni parseInt, parseFloat`` o .toString() .
Si veda il seguente esempio di query che utilizza la sintassi delle faccette counts:
?q=*:*&counts=["type"]
Si veda il seguente esempio di risposta dopo aver utilizzato la sintassi counts delle faccette:
{
"total_rows":100000,
"bookmark":"g...",
"rows":[...],
"counts":{
"type":{
"sofa": 10,
"chair": 100,
"lamp": 97
}
}
}
drilldown
L'opzione drilldown è disponibile solo quando si effettuano query globali.
È possibile limitare i risultati ai documenti con una dimensione pari all'etichetta specificata. Limitare i risultati aggiungendo drilldown=["dimension","label"] a una query di ricerca. È possibile includere
più parametri drilldown per limitare i risultati lungo più dimensioni.
L'uso di un parametro drilldown è simile all'uso di key:value nel parametro q, ma il parametro drilldown restituisce valori che l'analizzatore potrebbe saltare.
Ad esempio, se l'analizzatore non ha indicizzato una parola d'ordine come "a", il parametro drilldown la restituisce quando si specifica drilldown=["key","a"].
Intervalli
L'opzione ranges è disponibile solo quando si effettuano query globali.
La sintassi delle faccette range riutilizza la sintassi standard di Lucene per gli intervalli per restituire il conteggio dei risultati che rientrano in ciascuna categoria specificata. Le query con intervallo inclusivo sono indicate
da parentesi [, ]). Le query con intervallo esclusivo sono indicate da parentesi graffe {, }).
I valori indicizzati non possono essere di tipo misto. Ad esempio, se sono indicizzate 100 stringhe, e un numero, l'indice non può essere utilizzato per operazioni range. È possibile verificare il tipo utilizzando l'operatore
typeof , e convertirlo utilizzando le funzioni parseInt, parseFloat`` o .toString() .
Si veda il seguente esempio di richiesta che utilizza la ricerca sfaccettata per la corrispondenza con ranges:
?q=*:*&ranges={"price":{"cheap":"[0 TO 100]","expensive":"{100 TO Infinity}"}}
Si vedano i seguenti esempi di risultati dopo un controllo ranges su una ricerca sfaccettata:
{
"total_rows":100000,
"bookmark":"g...",
"rows":[...],
"ranges": {
"price": {
"expensive": 278682,
"cheap": 257023
}
}
}
Ricerche geografiche
Oltre alla ricerca in base al contenuto dei campi testuali, è possibile ordinare i risultati in base alla distanza da una coordinata geografica.
Per ordinare i risultati in questo modo, è necessario indicizzare due campi numerici che rappresentano la longitudine e la latitudine.
È quindi possibile eseguire la query utilizzando il campo speciale <distance...> sort, che richiede cinque parametri:
- Nome del campo longitudine - Il nome del campo longitudine
mylonnell'esempio). - Nome del campo latitudine - Il nome del campo latitudine
mylatnell'esempio). - Longitudine di origine - La longitudine del luogo da cui si desidera ordinare per distanza.
- Latitudine di origine - La latitudine del luogo da cui si desidera ordinare per distanza.
- Unità - Le unità da utilizzare includono
kmper i chilometri omiper le miglia. La distanza viene restituita nel campo dell'ordine.
È possibile combinare l'ordinamento per distanza con qualsiasi altra query di ricerca, come la ricerca per intervallo di latitudine e longitudine, o query che coinvolgono informazioni non geografiche.
In questo modo, è possibile effettuare la ricerca in un'area delimitata, e restringere la ricerca con altri criteri.
Si veda il seguente esempio di dati geografici:
{
"name":"Aberdeen, Scotland",
"lat":57.15,
"lon":-2.15,
"type":"city"
}
Si veda l'esempio seguente di un documento di progettazione che include un indice di ricerca per i dati geografici:
function(doc) {
if (doc.type && doc.type == 'city') {
index('city', doc.name, {'store': true});
index('lat', doc.lat, {'store': true});
index('lon', doc.lon, {'store': true});
}
}
Si veda il seguente esempio che utilizza HTTP per una query che ordina le città dell'emisfero settentrionale in base alla loro distanza da New York:
GET /examples/_design/cities-designdoc/_search/cities?q=lat:[0+TO+90]&sort="<distance,lon,lat,-74.0059,40.7127,km>" HTTP/1.1
Host: $ACCOUNT.cloudant.com
Si veda il seguente esempio che utilizza la riga di comando per una query che ordina le città dell'emisfero settentrionale in base alla loro distanza da New York:
curl "https://$ACCOUNT.cloudant.com/examples/_design/cities-designdoc/_search/cities?q=lat:\[0+TO+90\]&sort=\"<distance,lon,lat,-74.0059,40.7127,km>\""
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.PostSearchOptions;
import com.ibm.cloud.cloudant.v1.model.SearchResult;
import java.util.Arrays;
Cloudant service = Cloudant.newInstance();
PostSearchOptions searchOptions = new PostSearchOptions.Builder()
.db("examples")
.ddoc("cities-designdoc")
.index("cities")
.query("lat:\\[0+TO+90\\]")
.sort(Arrays.asList("<distance,lon,lat,-74.0059,40.7127,km>"))
.build();
SearchResult response =
service.postSearch(searchOptions).execute()
.getResult();
System.out.println(response);
import { CloudantV1 } from '@ibm-cloud/cloudant';
const service = CloudantV1.newInstance({});
service.postSearch({
db: 'examples',
ddoc: 'cities-designdoc',
index: 'cities',
query: 'lat:\\[0+TO+90\\]',
sort: ['<distance,lon,lat,-74.0059,40.7127,km>']
}).then(response => {
console.log(response.result);
});
from ibmcloudant.cloudant_v1 import CloudantV1
service = CloudantV1.new_instance()
response = service.post_search(
db='examples',
ddoc='cities-designdoc',
index='cities',
query='lat:\\[0+TO+90\\]',
sort=['<distance,lon,lat,-74.0059,40.7127,km>']
).get_result()
print(response)
postSearchOptions := service.NewPostSearchOptions(
"examples",
"cities-designdoc",
"cities",
"lat:\\[0+TO+90\\]",
)
postSearchOptions.SetSort([]string{"<distance,lon,lat,-74.0059,40.7127,km>"})
searchResult, _, err := service.PostSearch(postSearchOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(searchResult, "", " ")
fmt.Println(string(b))
Il precedente esempio di Go richiede il seguente blocco di importazione:
import (
"encoding/json"
"fmt"
"github.com/IBM/cloudant-go-sdk/cloudantv1"
)
Si veda il seguente esempio di risposta (abbreviata) che include un elenco di città dell'emisfero settentrionale ordinate in base alla distanza da New York:
{
"total_rows": 205,
"bookmark": "g1A...XIU",
"rows": [
{
"id": "city180",
"order": [
8.530665755719783,
18
],
"fields": {
"city": "New York, N.Y.",
"lat": 40.78333333333333,
"lon": -73.96666666666667
}
},
{
"id": "city177",
"order": [
13.756343205985946,
17
],
"fields": {
"city": "Newark, N.J.",
"lat": 40.733333333333334,
"lon": -74.16666666666667
}
},
{
"id": "city178",
"order": [
113.53603438866077,
26
],
"fields": {
"city": "New Haven, Conn.",
"lat": 41.31666666666667,
"lon": -72.91666666666667
}
}
]
}
Evidenziare i termini di ricerca
A volte è utile ottenere il contesto in cui un termine di ricerca è stato menzionato in modo da poter mostrare all'utente dei risultati più enfatizzati.
Per ottenere risultati più enfatizzati, aggiungere il parametro highlight_fields alla query di ricerca. Specificare i nomi dei campi di cui si desidera ottenere gli estratti, con il termine di ricerca evidenziato.
Per impostazione predefinita, il termine di ricerca viene inserito nei tag <em> per evidenziarlo, ma l'evidenziazione può essere sovrascritta utilizzando i parametri highlights_pre_tag e highlights_post_tag.
La lunghezza dei frammenti è di 100 caratteri per impostazione predefinita. È possibile richiedere una lunghezza diversa con il parametro highlights_size.
Il parametro highlights_number controlla il numero di frammenti restituiti, e il valore predefinito è 1.
Nella risposta, viene aggiunto un campo highlights, con un sottocampo per ogni nome di campo.
Per ogni campo, riceve un array di frammenti con il termine di ricerca evidenziato.
Affinché l'evidenziazione funzioni, memorizzare il campo nell'indice usando l'opzione store: true.
Vedi l'esempio seguente che utilizza HTTP per cercare con l'evidenziazione abilitata:
GET /movies/_design/searches/_search/movies?q=movie_name:Azazel&highlight_fields=["movie_name"]&highlight_pre_tag=" "&highlight_post_tag=" "&highlights_size=30&highlights_number=2 HTTP/1.1
HOST: $ACCOUNT.cloudant.com
Authorization: ...
Si veda l'esempio seguente che mostra la riga di comando per la ricerca con l'evidenziazione abilitata:
curl "https://$ACCOUNT.cloudant.com/movies/_design/searches/_search/movies?q=\"movie_name:Azazel\"&highlight_fields=\[\"movie_name\"\]&highlight_pre_tag=\" \"&highlight_post_tag=\" \"&highlights_size=30&highlights_number=2" \
-X GET
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.PostSearchOptions;
import com.ibm.cloud.cloudant.v1.model.SearchResult;
import java.util.Arrays;
Cloudant service = Cloudant.newInstance();
PostSearchOptions searchOptions = new PostSearchOptions.Builder()
.db("movies")
.ddoc("searches")
.index("movies")
.query("movie_name:Azazel")
.highlightFields(Arrays.asList("[\"movie_name\"]"))
.highlightPreTag("\" \"")
.highlightPostTag("\" \"")
.highlightSize(30)
.highlightNumber(2)
.build();
SearchResult response =
service.postSearch(searchOptions).execute()
.getResult();
System.out.println(response);
import { CloudantV1 } from '@ibm-cloud/cloudant';
const service = CloudantV1.newInstance({});
service.postSearch({
db: 'movies',
ddoc: 'searches',
index: 'movies',
query: 'movie_name:Azazel',
highlightFields: ['["movie_name"]'],
highlightPreTag: '" "',
highlightPostTag: '" "',
highlightSize: 30,
highlightNumber: 2
}).then(response => {
console.log(response.result);
});
from ibmcloudant.cloudant_v1 import CloudantV1
service = CloudantV1.new_instance()
response = service.post_search(
db='movies',
ddoc='searches',
index='movies',
query='movie_name:Azazel',
highlight_fields=['["movie_name"]'],
highlight_pre_tag='" "',
highlight_post_tag='" "',
highlight_size=30,
highlight_number=2
).get_result()
print(response)
postSearchOptions := service.NewPostSearchOptions(
"movies",
"searches",
"movies",
"movie_name:Azazel",
)
postSearchOptions.SetHighlightFields([]string{"[\"movie_name\"]"})
postSearchOptions.SetHighlightPreTag("\" \"")
postSearchOptions.SetHighlightPostTag("\" \"")
postSearchOptions.SetHighlightSize(30)
postSearchOptions.SetHighlightNumber(2)
searchResult, _, err := service.PostSearch(postSearchOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(searchResult, "", " ")
fmt.Println(string(b))
Il precedente esempio di Go richiede il seguente blocco di importazione:
import (
"encoding/json"
"fmt"
"github.com/IBM/cloudant-go-sdk/cloudantv1"
)
Si veda il seguente esempio di risultati di ricerca evidenziati:
{
"highlights": {
"movie_name": [
" on the Azazel Orient Express",
" Azazel manuals, you"
]
}
}
Metadati dell'indice di ricerca
Per recuperare informazioni su un indice di ricerca, si invia una GET richiesta all'endpoint _search_info, come mostrato nell'esempio seguente.
DDOC si riferisce al documento di progettazione che include l'indice, e INDEX_NAME è il nome dell'indice.
Vedi l'esempio seguente che utilizza HTTP per richiedere i metadati dell'indice di ricerca:
GET /$DATABASE/_design/$DDOC/_search_info/$INDEX_NAME HTTP/1.1
Si veda il seguente esempio che utilizza la riga di comando per richiedere i metadati dell'indice di ricerca:
curl "https://$ACCOUNT.cloudant.com/$DATABASE/_design/$DDOC/_search_info/$INDEX_NAME" \
-X GET
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.GetSearchInfoOptions;
import com.ibm.cloud.cloudant.v1.model.SearchInfoResult;
Cloudant service = Cloudant.newInstance();
GetSearchInfoOptions infoOptions =
new GetSearchInfoOptions.Builder()
.db("<db-name>")
.ddoc("<ddoc>")
.index("<index-name>")
.build();
SearchInfoResult response =
service.getSearchInfo(infoOptions).execute()
.getResult();
System.out.println(response);
import { CloudantV1 } from '@ibm-cloud/cloudant';
const service = CloudantV1.newInstance({});
service.getSearchInfo({
db: '<db-name>',
ddoc: '<ddoc>',
index: '<index-name>'
}).then(response => {
console.log(response.result);
});
from ibmcloudant.cloudant_v1 import CloudantV1
service = CloudantV1.new_instance()
response = service.get_search_info(
db='<db-name>',
ddoc='<ddoc>',
index='<index-name>'
).get_result()
print(response)
getSearchInfoOptions := service.NewGetSearchInfoOptions(
"<db-name>",
"<ddoc>",
"<index-name>",
)
searchInfoResult, _, err := service.GetSearchInfo(getSearchInfoOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(searchInfoResult, "", " ")
fmt.Println(string(b))
Il precedente esempio di Go richiede il seguente blocco di importazione:
import (
"encoding/json"
"fmt"
"github.com/IBM/cloudant-go-sdk/cloudantv1"
)
La risposta include informazioni sull'indice, come il numero di documenti presenti nell'indice e la dimensione dell'indice su disco.
Vedere il seguente esempio di risposta dopo aver richiesto i metadati dell'indice di ricerca:
{
"name": "_design/DDOC/INDEX",
"search_index": {
"pending_seq": 7125496,
"doc_del_count": 129180,
"doc_count": 1066173,
"disk_size": 728305827,
"committed_seq": 7125496
}
}