Ho un documento con un numero di campi su cui non ho mai eseguito una query, quindi mi piacerebbe attivare l'indicizzazione su quei campi per risparmiare risorse. Credo di aver bisogno di disable the _all
field, ma come faccio a specificare quali campi sono indicizzati?Specificare quali campi sono indicizzati in ElasticSearch
risposta
Per impostazione predefinita tutti i campi sono indicizzati all'interno del campo speciale _all, che fornisce la cosiddetta funzione di catchall out of the box. Tuttavia, è possibile specificare per ogni campo nella vostra mappatura se si desidera aggiungere al campo _all o no, attraverso l'opzione include_in_all
:
"person" : {
"properties" : {
"name" : {
"type" : "string", "store" : "yes", "include_in_all" : false
}
}
}
L'esempio sopra disabilita il comportamento predefinito per il campo del nome, che ha vinto far parte di tutto il campo
In caso contrario, se non è necessario il campo _all a tutti per un tipo specifico è possibile disattivare in questo modo, ancora una volta nella vostra mappatura:
"person" : {
"_all" : {"enabled" : false},
"properties" : {
"name" : {
"type" : "string", "store" : "yes"
}
}
}
Quando si disattiva che i vostri campi sarà ancora indicizzati separatamente, ma non avrai la funzione di catchall che _all fornisce. Dovrai quindi interrogare i tuoi campi specifici invece di fare affidamento sul campo _all speciale, il gioco è fatto. Infatti, quando si esegue una query e non si specifica un campo, elasticsearch interroga il campo _all sotto il cofano, a meno che non si sostituisca il campo predefinito per eseguire una query.
Ogni campo stringa ha il parametro index
nella configurazione di mappatura, che è defaults toanalyzed
. Ciò significa che, oltre al campo all, ogni campo è solo indicizzato.
E per il _all field si dice in riferimento che:
Per impostazione predefinita, è abilitata e tutti i campi sono inclusi in esso per la facilità d'uso.
Quindi, per l'indicizzazione disabilitare completamente per un campo è necessario specificare (se il campo _all è abilitato):
"mappings": {
"your_mapping": {
"properties": {
"field_not_to_index": {
"type": "string",
"include_in_all": false,
"index": "no"
}
}
}
}
Per i campi che dovrebbero essere interrogati dal fatto che essi includono nel campo _all (con "index": "no"
per risparmiare risorse) se si esegue una query attraverso il campo _all o se si esegue una query su tali campi utilizzare esclusivamente il parametro index
con qualsiasi valore positivo (analyzed
o not_analyzed
) e disabilitare il campo _all per salvare le risorse.
seguito è riportato un importante pagina doc per capire le impostazioni dell'indice in elasticsearch http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/mapping-intro.html
per il vostro problema, idealmente si dovrebbe impostare il flag "indice" per non nei proprietà del campo.
In quel link, l'esempio mostra "index": "not_analyzed". Ma ho pensato che l'indicizzazione e l'analisi siano concetti distinti in ES? 'No' non è un'impostazione diversa da 'not_analyzed'? Si prega di precisare. – szeitlin
'analizzato' Prima analizzare la stringa e indicizzarla. In altre parole, indicizza questo campo come testo completo. 'not_analyzed' Indicizza questo campo, quindi è ricercabile, ma indicizza il valore esattamente come specificato. Non analizzarlo. 'no' Non indicizzare questo campo. Questo campo non sarà ricercabile. – Tjorriemorrie
Imposta indice dinamico e _all indice su falso. Specificare i campi richiesti nella mappatura. https://www.elastic.co/guide/en/elasticsearch/guide/current/dynamic-mapping.html
{
"mappings":{
"candidates":{
"_all":{
"enabled":false
},
"dynamic": "false",
"properties":{
"tags":{
"type":"text"
},
"derivedAttributes":{
"properties":{
"city":{
"type":"text"
},
"zip5":{
"type":"keyword"
}
}
}
}
}
}
}
- 1. Come specificare ElasticSearch copy_to order?
- 2. Elenca tutti i campi in un indice elasticsearch?
- 3. Quali campi del modello nel tutorial di django-haystack vengono indicizzati?
- 4. elasticsearch corrisponde a due campi
- 5. elasticsearch confronto tra i campi
- 6. ElasticSearch: ricerca di campi in matrici annidate
- 7. gruppo elasticsearch da molteplici campi
- 8. ElasticSearch NEST restituisce campi specifici
- 9. Campi indice con trattini in Elasticsearch
- 10. NEST (elasticsearch) Evidenziazione in più campi
- 11. MongoDB, le prestazioni di query espressioni regolari sui campi indicizzati
- 12. Django Haystack - Ricerca su molti campi non indicizzati
- 13. Specificare i campi restituiti in Node.js/Waterline?
- 14. Come specificare due campi in Lucene QueryParser?
- 15. Trovare quali campi sono stati aggiornati dopo aver chiamato update_attributes?
- 16. Quali sono i campi di intestazioni HTTP richiesti
- 17. Quali caratteri NON sono consentiti nei nomi dei campi MongoDB?
- 18. Specificare campi specifici con Sequelize (NodeJS) anziché *
- 19. Query prefisso frase Elasticsearch su più campi
- 20. Come ottenere un'aggregazione Elasticsearch con più campi
- 21. modello di Rails elasticsearch con campi
- 22. Interrogazione di Solr senza specificare i nomi dei campi
- 23. L'aggiunta di campi aggiuntivi per elasticsearch termini di aggregazione
- 24. Elasticsearch corrispondenze esatte sui campi analizzati
- 25. Fai elasticsearch restituire solo determinati campi?
- 26. Filtra i campi dei metadati e restituisce solo i campi di origine in elasticsearch
- 27. Best practice per i nomi dei campi in ElasticSearch
- 28. Eliminazione nodi indicizzati in Neo4j
- 29. Come cercare in più campi con OR economico elasticsearch
- 30. Evidenziare tutto il contenuto in elasticsearch per i campi multivalore
Grazie per quello! Quindi posso disabilitare '_all' dato che non sto usando quella funzione e spero che questo riduca la dimensione dell'indice. E, se ho capito bene, l'unica altra opzione per ridurre la dimensione dell'indice che ho è di specificare 'not_analyzed' sui campi su cui non cerco? – Michael
Beh, non è solo per cambiare la dimensione dell'indice ... cambia il modo in cui i dati sono indicizzati.Se non si analizza un campo, questo conterrà un singolo token. Non verranno utilizzati tokenizer o filtri token. Se contiene una frase (con spazi bianchi, ecc.), Per avere una corrispondenza su di essa è necessario interrogare per l'intera frase esatta. Se non si interroga mai un campo, è sufficiente impostare indexed = false. – javanna
Sì, è quello che pensavo. Grazie per la spiegazione. Ho alcuni campi nei miei documenti come "descrizione" o "link" che non ho mai bisogno di cercare, quindi è uno spreco di risorse per analizzarli. E sto testando l'esecuzione dell'intero indice in memoria ('{" index ": {" store.type ":" memoria "}}') così la dimensione dell'indice diventerà un fattore importante. – Michael