24

在进行搜索时,Elasticsearch 返回一个包含各种元信息的数据结构。

实际结果集包含在从数据库返回的 JSON 结果中的“命中”字段中。

Elasticsearch 是否有可能只返回所需的数据(然后“命中”字段的内容)而不嵌入所有其他元数据中?

我知道我可以将结果解析为 JSON 并提取它,但我不希望复杂性、麻烦和性能受到影响。

谢谢!

下面是 Elasticsearch 返回的数据结构示例。

{
    "_shards":{
        "total" : 5,
        "successful" : 5,
        "failed" : 0
    },
    "hits":{
        "total" : 1,
        "hits" : [
            {
                "_index" : "twitter",
                "_type" : "tweet",
                "_id" : "1", 
                "_source" : {
                    "user" : "kimchy",
                    "postDate" : "2009-11-15T14:12:12",
                    "message" : "trying out Elastic Search"
                }
            }
        ]
    }
}
4

2 回答 2

26

您至少可以过滤结果,即使您无法提取它们。REST API的“ common options ”页面解释了“filter_path”选项。这使您可以仅过滤您感兴趣的树部分。树结构仍然相同,但没有额外的元数据。

我通常添加查询选项:

&filter_path=hits.hits.*,aggregations.*

文档没有说明这会使您的查询更快(我怀疑它确实如此),但至少您可以只返回有趣的部分。

  • 更正为仅显示 hits.hits.*,因为顶级“命中”也具有元数据。
于 2015-11-16T22:57:17.313 回答
12

不,目前不可能。如果解析的性能和复杂性是主要问题,您可能需要考虑使用不同的客户端:例如java 客户端Thrift 插件

于 2012-06-02T16:27:12.077 回答