Elasticsearch中的null_value映射

Sag*_*gar 16 elasticsearch

我已经为索引中的tweetb类型创建了一个映射twitter:

curl -XPUT http://www.mydomain:9200/twitter/tweetb/_mapping -d '{
  "twitter": {
    "mappings": {
      "tweetb": {
        "properties": {
          "message": {
            "type": "string",
            "null_value": "NA"
          }
        }
      }
    }
  }
}'
Run Code Online (Sandbox Code Playgroud)

然后,我把一个文件:

curl -XPUT http://www.mydomain.com:9200/twitter/tweetb/1 -d '{"message": null}'
Run Code Online (Sandbox Code Playgroud)

然后,我试图让插入的doc回来:

curl -XGET http://www.mydomain:9200/twitter/tweetb/1
Run Code Online (Sandbox Code Playgroud)

那回来了:

{
  "_index": "twitter",
  "_type": "tweetb",
  "_id": "1",
  "_version": 2,
  "found" : true,
  "_source" : { "message": null }
}
Run Code Online (Sandbox Code Playgroud)

"message" : "NA"_source田野里期待着.但是,它似乎"null_value"不起作用.我错过了什么吗?

pic*_*ypg 32

"null_value"字段映射不改变存储的值,而它的变化是在搜索中使用的值.

如果您尝试搜索您的"message"使用"NA",则它应显示在结果中:

curl -XPOST http://www.mydomain.com:9200/twitter/tweetb/_search -d '{
  "query" : {
    "match" : { "message" : "NA" }
  }
}'
Run Code Online (Sandbox Code Playgroud)

有趣的是,它应该以实际价值回应null.现在,如果您添加一个原始值按字面意思"NA"并执行搜索的新文档,那么您应该看到上述查询返回了两个结果 - 一个带有值,另一个带有已null定义的.

也许有类似的兴趣,这适用于其他查询以及它如何被索引,这就是小写n.*匹配,但N.*半惊人地不匹配的原因:

curl -XPOST http://www.mydomain.com:9200/twitter/tweetb/_search -d '{
  "query" : {
    "regexp" : { "message" : "n.*" }
  }
}'
Run Code Online (Sandbox Code Playgroud)