处理未定义的字段Elasticsearch

时间:2014-03-03 05:06:44

标签: elasticsearch

我使用py-elasticsearch和批量特征,例如:

//loop
   action = {
    "_index": "venue",
    "_type": "venue",
    "_id": tempid,
    "_source": item
   }
   actions.append(action)

helpers.bulk(es, actions)

然而,在我的结果中,我看到:

"hits": [
     {
        "_index": "venue",
        "_type": "venue",
        "_id": "52e6d42fc36b4408dbe907d1",
        "_score": 4.0977435,
        "_source": {
           "city": "Athens",
           "name": "Half Note Jazz Club",
           "address": "17 Trivonianou Street",
        }
     },
     {
        "_index": "venue",
        "_type": "venue",
        "_id": "530391abc36b442b25e8a514",
        "_score": 4.023251,
        "_source": {
           "city": null,   <--- this
           "name": "life Jazz Cafe-bar",               
           "address": null  <---- and this
        }
     }
  ]

假设当我“批量提供”ES时我还没有定义城市和地址,那么有没有办法在ES中省略这些字段?

或者,即使此文档没有此字段,ES也会始终创建空值吗? ES是通过这种方式构建的,还是应该在我的代码中搜索错误?

更新

我的完整映射如下:

<type>: {
    mappings: {
        <index>: {
            properties: {                
                address: {
                    type: "string"
                },
                city: {
                    type: "string"
                },
                country: {
                    type: "string"
                },
                location: {
                    properties: {
                        coordinates: {
                            type: "geo_point"
                        },
                        type: {
                            type: "string"
                        }
                    }
                },
                name: {
                    type: "string"
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

我不熟悉py-elasticsearch,但要么是bug存在于库中,要么在代码中,因为_source字段始终会返回与弹性搜索一起发送的内容。

答案 1 :(得分:0)

映射中的null_value将为“null”。因此,如果要省略要编制索引的文档中不存在的字段,请不要在映射null_value

中指定null_value。