我在tweetb
索引中为twitter
类型创建了一个映射:
curl -XPUT http://www.mydomain:9200/twitter/tweetb/_mapping -d '{
"twitter": {
"mappings": {
"tweetb": {
"properties": {
"message": {
"type": "string",
"null_value": "NA"
}
}
}
}
}
}'
然后,我放了一个文件:
curl -XPUT http://www.mydomain.com:9200/twitter/tweetb/1 -d '{"message": null}'
然后,我试图让插入的文档回复:
curl -XGET http://www.mydomain:9200/twitter/tweetb/1
然后又回来了:
{
"_index": "twitter",
"_type": "tweetb",
"_id": "1",
"_version": 2,
"found" : true,
"_source" : { "message": null }
}
我期待"message" : "NA"
字段中的_source
。但是,看起来"null_value"
无效。我错过了什么吗?
答案 0 :(得分:30)
"null_value"
字段映射不会更改存储的值,而是更改搜索中使用的值。
如果您尝试使用"message"
搜索"NA"
,那么它应该出现在结果中:
curl -XPOST http://www.mydomain.com:9200/twitter/tweetb/_search -d '{
"query" : {
"match" : { "message" : "NA" }
}
}'
有趣的是,它应该以实际值null
作为回应。现在,如果您添加一个原始值为"NA"
的新文档并执行搜索,那么您应该看到为以上查询返回的两个结果 - 一个带有值,另一个带有值已定义null
。
也许有类似的兴趣,这适用于其他查询以及基于它的索引方式,这就是小写n.*
匹配的原因,但是N.*
半惊人地不匹配:
curl -XPOST http://www.mydomain.com:9200/twitter/tweetb/_search -d '{
"query" : {
"regexp" : { "message" : "n.*" }
}
}'