For the ES versions 5.X and above you can a ES query something like this
GET /.../...
{
"_source": {
"includes": [ "FIELD1", "FIELD2", "FIELD3" ... " ]
},
.
.
.
.
}
1
here you can specify whichever field you want in your output and also which you don't.
POST index_name/_search
{
"_source": {
"includes": [ "field_name", "field_name" ],
"excludes": [ "field_name" ]
},
"query" : {
"match" : { "field_name" : "value" }
}
}
6
可以使用'_source'参数进行REST API GET请求 .
示例请求
http://localhost:9200/opt_pr/_search?q=SYMBOL:ITC AND OPTION_TYPE=CE AND TRADE_DATE=2017-02-10 AND EXPIRY_DATE=2017-02-23&_source=STRIKE_PRICE
10 回答
response_filtering
https://stackoverflow.com/a/35647027/844700
Source filtering Allows to control how the _source field is returned with every hit.
关键字 "includes" 定义了细节字段 .
可以使用'_source'参数进行REST API GET请求 .
示例请求
响应
}
是的!使用source filter . 如果你're searching with JSON it' ll看起来像这样:
在ES 2.4及更早版本中,您还可以使用fields option to the search API:
这在ES 5中已弃用 . 无论如何,源过滤器更强大!
在java中,您可以像这样使用setFetchSource:
是的,使用源过滤器可以完成此操作,这里是文档source-filtering
示例请求
输出将是
我发现
get api
的文档很有帮助 - 尤其是两个部分, Source filtering 和 Fields :http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-get.html他们陈述了源过滤:
这完全适合我的用例 . 我最终只是简单地过滤源(使用速记):
仅供参考,他们在有关 fields 参数的文档中说明:
它似乎迎合了专门存储的字段,它将每个字段放在一个数组中 . 如果尚未存储指定的字段,它将从_source中获取每个字段,这可能导致“较慢”的检索 . 我也很难尝试让它返回类型对象的字段 .
总而言之,您有两种选择,无论是源过滤还是[存储]字段 .
在Elasticsearch 5.x中,不推荐使用上述方法 . 您可以使用_source方法,但在某些情况下,存储字段是有意义的 . 例如,如果您有一个包含 Headers ,日期和非常大的内容字段的文档,您可能只想检索 Headers 和日期,而无需从大型_source字段中提取这些字段:
在这种情况下,您将使用:
请参阅有关如何索引存储字段的文档 . Upvote总是很开心!