【问题标题】:Elasticsearch - how to return only data, not meta information?Elasticsearch - 如何只返回数据,而不是元信息?
【发布时间】:2017-06-26 21:11:53
【问题描述】:

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

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

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"
                }
            }
        ]
    }
}

【问题讨论】:

标签: elasticsearch


【解决方案1】:

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

我一般会加上查询选项:

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

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

  • 已更正为仅显示 hits.hits.*,因为顶级“命中”也包含元数据。

【讨论】:

【解决方案2】:

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

【讨论】:

  • “不,目前不可能”...随着时间的变化,答案是否应该/可以更新? :)
猜你喜欢
  • 2020-06-24
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
相关资源
最近更新 更多