2014-04-01 13 views
16

ho creato una mappatura per un tipo tweetb in un indice twitter:mappatura null_value in elasticsearch

curl -XPUT http://www.mydomain:9200/twitter/tweetb/_mapping -d '{ 
    "twitter": { 
    "mappings": { 
     "tweetb": { 
     "properties": { 
      "message": { 
      "type": "string", 
      "null_value": "NA" 
      } 
     } 
     } 
    } 
    } 
}' 

Poi, ho messo un documento:

curl -XPUT http://www.mydomain.com:9200/twitter/tweetb/1 -d '{"message": null}' 

Poi, ho cercato di ottenere il inserito doc back:

curl -XGET http://www.mydomain:9200/twitter/tweetb/1 

E che restituito:

{ 
    "_index": "twitter", 
    "_type": "tweetb", 
    "_id": "1", 
    "_version": 2, 
    "found" : true, 
    "_source" : { "message": null } 
} 

Mi aspettavo "message" : "NA" nel campo _source. Tuttavia, sembra che "null_value" non funzioni. Mi sto perdendo qualcosa?

risposta

29

Il mapping del campo "null_value" non modifica il valore memorizzato, ma modifica il valore utilizzato nelle ricerche.

Se si prova a cercare il tuo "message" utilizzando "NA", allora dovrebbe comparire nei risultati:

curl -XPOST http://www.mydomain.com:9200/twitter/tweetb/_search -d '{ 
    "query" : { 
    "match" : { "message" : "NA" } 
    } 
}' 

Di interesse, si deve rispondere con il valore effettivo di essere null. Ora, se aggiungi un nuovo documento il cui valore grezzo è letteralmente "NA" ed esegui la ricerca, dovresti vedere entrambi i risultati restituiti per la query precedente, uno con un valore e l'altro con null definito.

Forse di interesse simile, questo funziona per le altre richieste così in base a come viene indicizzato, che è il motivo per cui un minuscolo n.* partite, ma N.* semi-sorprendentemente non corrisponderà:

curl -XPOST http://www.mydomain.com:9200/twitter/tweetb/_search -d '{ 
    "query" : { 
    "regexp" : { "message" : "n.*" } 
    } 
}' 
+0

+1 per ulteriori informazioni fornite oltre alla risposta. – Kaunteya

Problemi correlati