2014-04-01 15 views
16

Stworzyłem odwzorowania dla typu tweetb w indeksie twitter:null_value mapowanie w Elasticsearch

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

Następnie kładę jeden dokument:

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

Potem starał się wstawione doc back:

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

I ten, który powrócił:

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

Spodziewałem się "message" : "NA" w polu _source. Jednak wygląda na to, "null_value" nie działa. Czy czegoś brakuje?

Odpowiedz

29

"null_value" odwzorowanie pola nie zmienia wartość przechowywana, a to zmienia wartość, która jest używana w wyszukiwaniach.

Jeśli spróbujesz szukaniem swojego "message" użyciu "NA", to powinno pojawić się w wynikach:

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

Co ciekawe, powinna ona odpowiedzieć wartość rzeczywista jest null. Teraz, jeśli dodać nowy dokument, którego wartość jest dosłownie "NA" surowy i przeprowadzić wyszukiwanie, a następnie należy zobaczyć oba wyniki zwracane do powyższego zapytania - jedną z wartości, a drugi z null zdefiniowane.

Być może z podobnym zainteresowaniem, to działa dla innych zapytań oraz na podstawie, jak to jest indeksowana, dlatego mała litera n.* mecze, ale N.* semi-zaskakująco nie będzie pasował:

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

+1 dodatkowych informacji dostarczonych oprócz odpowiedzi. – Kaunteya

Powiązane problemy