##索引数据,dynamic mapping 会不断加入新增字段 PUT cookie_service/_doc/1 { "url":"www.google.com", "cookies":{ "username":"tom", "age":32 } } PUT cookie_service/_doc/2 { "url":"www.amazon.com", "cookies":{ "login":"2019-01-01", "email":"xyz@abc.com" } }
咱们的cookie字段使用了Dynamic=true
默认值,因此随着写入的数据愈来愈多,若是不对cookies字段的子字段进行限制的话,字段数会愈来愈多,会影响性能,cookie
#使用 Nested 对象,增长key/value PUT cookie_service { "mappings": { "dynamic": "strict", "properties": { "cookies": { "type": "nested", "properties": { "name": { "type": "keyword" }, "dateValue": { "type": "date" }, "keywordValue": { "type": "keyword" }, "IntValue": { "type": "integer" } } }, "url": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } }
须要说明几点的是:app
"dynamic": "strict"
阻止其余字段加入正则查询的性能不够好,前缀查询属于Term查询性能
文档中某个字段包含了Elasticsearch的版本信息,例如version: "7.1.0",如今咱们须要查询朱版本是7,次要版本是2的文档,不要使用正则查询google
PUT softwares/ { "mappings": { "_meta": { "software_version_mapping": "1.1" }, "properties": { "version": { "properties": { "display_name": { "type": "keyword" }, "hot_fix": { "type": "byte" }, "marjor": { "type": "byte" }, "minor": { "type": "byte" } } } } } }
而后咱们再使用查询url
POST softwares/_search { "query": { "bool": { "filter": [ { "match":{ "version.marjor":7 } }, { "match":{ "version.minor":2 } } ] } } }
PUT ratings/_doc/1 { "rating":5 } PUT ratings/_doc/2 { "rating":null } POST ratings/_search { "size": 0, "aggs": { "avg": { "avg": { "field": "rating" } } } } # 查询结果 { "took" : 1, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : null, "hits" : [ ] }, "aggregations" : { "avg" : { "value" : 5.0 } } }
很明显,咱们查到了两条数据,可是平均值是5,这个很难以理解,spa
PUT ratings { "mappings": { "properties": { "rating": { "type": "float", "null_value": 0 } } } }
再次插入上面的数据,咱们获得下面的结果设计
{ "took" : 5, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : null, "hits" : [ ] }, "aggregations" : { "avg" : { "value" : 2.5 } } }
这样就比较对了,固然null_value
的值是能够本身根据业务需求本身设定的3d