Come posso scrivere un'aggregazione di termini Elasticsearch che divide i bucket per l'intero termine piuttosto che per i singoli token? Ad esempio, vorrei aggregare per stato, ma il seguente restituisce nuovo, York, jersey e California come singoli secchi, non New York e New Jersey e la California come i secchi come previsto:Aggregazione dei termini Elasticsearch per stringhe in un array
curl -XPOST "http://localhost:9200/my_index/_search" -d'
{
"aggs" : {
"states" : {
"terms" : {
"field" : "states",
"size": 10
}
}
}
}'
mio caso d'uso è come quello descritto qui https://www.elastic.co/guide/en/elasticsearch/guide/current/aggregations-and-analysis.html con una sola differenza: il campo città è un array nel mio caso.
Esempio oggetto:
{
"states": ["New York", "New Jersey", "California"]
}
Sembra che la soluzione proposta (mappatura del campo come not_analyzed) non funziona per gli array.
mio mappatura:
{
"properties": {
"states": {
"type":"object",
"fields": {
"raw": {
"type":"object",
"index":"not_analyzed"
}
}
}
}
}
ho cercato di sostituire "oggetto" da "string", ma questo non funziona neanche.
Grazie mille per la risposta, hai ragione, la mia domanda è infatti manca il '.raw'. Questo perché ho provato così tante diverse combinazioni di mappature e ricerche e ho finito per postarlo. La tua risposta mi ha portato a scoprire che il mio vero problema è che sto usando il plug-in elasticsearch-transport-couchbase per importare i miei documenti in Elasticsearch e il plugin cambia la struttura del documento, circondandolo con un attributo "doc". Grazie alla tua risposta, ho aggiunto un documento manualmente, e ha funzionato, ed è così che ho rilevato l'attributo "doc" circostante negli altri documenti. – Marieke