Elasticsearch只返回指定的字段(用_source)
在Elasticsearch中,当你想要查询文档但不返回所有字段,只返回指定的字段(比如这里的id
字段),你可以使用_source
参数来实现这一点。但是,有一点需要注意:Elasticsearch的_source
字段默认是返回的,除非你在查询时明确指定不返回。如果你想仅返回id
字段,实际上你应该使用_source
过滤来实现这一点,或者在查询中指定返回哪些字段。
方法1:使用_source
过滤
如果你想通过_source
过滤返回特定的字段,你可以这样做:
GET /your_index/_search
{
"_source": ["id"],
"query": {
"match_all": {}
}
}
在这个例子中,_source
被设置为一个包含单个元素["id"]
的数组,这表示Elasticsearch将只返回每个匹配文档的id
字段。
方法2:使用fields
参数
如果你使用的是Elasticsearch 7.x或更新版本,并且想要更灵活地控制哪些字段被返回(包括文档元数据),你可以使用fields
参数:
GET /your_index/_search
{
"fields": ["id"],
"query": {
"match_all": {}
}
}
这里,fields
参数同样设置为一个数组,包含你想要返回的字段名。这种方法允许你同时请求文档的元数据(如_id
)以及其他指定字段。例如:
GET /your_index/_search
{
"fields": ["id", "_id"],
"query": {
"match_all": {}
}
}
这将返回每个匹配文档的id
和_id
字段。
总结
-
如果你只想返回特定的字段(例如只返回
id
),使用第一种方法(_source: ["id"]
)。 -
如果你还想返回其他非默认字段或者文档的元数据,使用第二种方法(
fields: ["id", "_id"]
)。
确保根据你的Elasticsearch版本和具体需求选择合适的方法。在Elasticsearch 7.x及更高版本中,推荐使用fields
参数来更灵活地控制返回的字段。