事實上,_source 字段就是1個貯存字段。
在 Elasticsearch 中,單獨設置貯存字段不是1個好做法。完全的文檔已被保存在 _source 字段中。
通常最好的辦法會是使用 _source 參數來過濾你需要的字段。
必須設置所有字段:store:true
如果mapping中,對某個type,設置了 “_source”: {“enabled”: false},那末查詢結果中就沒有_source字段只能查到文檔id。
如果mapping中,field設置了store為true,例如 “age”:{“type”:”integer”,”store”:true},那末就能夠在查詢時通過指定fields獲得到指定的field的數據。
store默許false。
fielddata_fields 和 fields區分?
fielddata_fields同時還返回_source, fields不返回_source。
https://www.elastic.co/guide/en/elasticsearch/reference/2.1/search-request-fielddata-fields.html
https://www.elastic.co/guide/en/elasticsearch/reference/2.1/search-request-fields.html
REST:
https://www.elastic.co/guide/en/elasticsearch/reference/2.1/search-request-fields.html
{
"fields" : ["user", "postDate"],
"query" : {
"term" : { "user" : "kimchy" }
}
}
Java API
SearchRequestBuilder類
方法:addFields(String... fields)
或:addField(String field)
默許存儲所有字段
PUT logs
{
"mappings": {
"event": {
"_source": {
"includes": [
"*.count",
"meta.*"
],
"excludes": [
"meta.description",
"meta.other.*"
]
}
}
}
}
GET /_search
{
"query": { "match_all": {}},
"_source": [ "title", "created" ]
}
//支持通配符
{
"_source": "obj.*",
"query" : {
"term" : { "user" : "kimchy" }
}
}
{
"_source": [ "obj1.*", "obj2.*" ],
"query" : {
"term" : { "user" : "kimchy" }
}
}
{
"_source": {
"include": [ "obj1.*", "obj2.*" ],
"exclude": [ "*.description" ]
},
"query" : {
"term" : { "user" : "kimchy" }
}
}