【问题标题】:null_value mapping in ElasticsearchElasticsearch 中的 null_value 映射
【发布时间】:2014-04-02 13:22:44
【问题描述】:

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

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 }
}

我在 _source 字段中期待 "message" : "NA"。但是,"null_value" 似乎不起作用。我错过了什么吗?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    "null_value" 字段映射不会更改存储的值,而是更改搜索中使用的值。

    如果您尝试使用"NA" 搜索您的"message",那么它应该会出现在结果中:

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

    有趣的是,它应该以null 的实际值响应。现在,如果您添加一个原始值为 "NA" 的新文档并执行搜索,那么您应该会看到上述查询返回的 both 结果——一个带有值,另一个带有 @ 987654327@ 已定义。

    也许有类似的兴趣,这也适用于其他查询基于它的索引方式,这就是为什么小写 n.* 匹配,但 N.* 半出人意料地不匹配:

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

    【讨论】:

    • +1 以获得除了答案之外提供的额外信息。
    • 我们可以做的另一项检查是“存在”查询(不为空)应该返回文档。
    猜你喜欢
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 2020-04-09
    • 2019-09-27
    • 2019-05-18
    • 1970-01-01
    相关资源
    最近更新 更多