2013-05-23 9 views
12

Dire che ho un campo che può avere solo un insieme finito di valori. Non sarebbe più efficiente (indicizzato, e/o in termini di spazio di archiviazione) archiviarlo come una sorta di ENUM?Campo enumeria Elasticsearch

C'è qualche possibilità in elasticsearch?

Un esempio potrebbe essere il nome degli stati in una macchina a stati.

+0

Un tipo ENUM non richiede il lancio di un errore se il tipo di vincolo è stato interrotto da un tentativo di immettere un valore che non fa parte del tipo enumerabile? – LeeGee

risposta

13

Sì, lo farebbe. Quando si indicizzano campi di testo completi, Elasticsearch indicizza anche informazioni come la lunghezza del campo e la posizione e la frequenza di ciascun termine nel campo.

Questi valori sono irrilevanti ai valori ENUM e possono essere esclusi completamente.

In realtà, se si mappa vostro campo come {"index": "not_analyzed"} poi, oltre a memorizzare il valore esatto che fornite senza cercare di analizzarlo, disattiva anche lo stoccaggio di informazioni in più che ho citato sopra.

+0

Sì, lo so cosa stai dicendo. Tuttavia, desidero ridurre ulteriormente i dati. Se il campo ha uno dei tre valori possibili, ma i valori sono stringhe molto lunghe, memorizzarli ripetutamente è ancora dispendioso, anche se non sono "analizzati". Inoltre, vorrei limitare i possibili valori per quel campo. – eran

+4

Beh, sì e no. Innanzitutto, nell'indice, ogni stringa viene memorizzata solo una volta. Ecco come funziona un indice invertito. Hai "termini": [elenco di documenti che contengono il termine]. Il valore apparirà ripetutamente all'interno del campo _source, ma verrà compresso automaticamente, quindi probabilmente non avrà un impatto così grande come previsto. – DrTech

+2

Giusto per chiarire: se vuoi ancora fare LONGNAME -> ENUM mapping, dovrai farlo nella tua applicazione. – DrTech

2

Nella tua app usa la mappa di hash { "enumVal1" => 1, "enumVal2" => 2, "enumValX" => 3 } e poi usa in ES solo i valori di hashmap, questo può far risparmiare spazio.

Problemi correlati