【问题标题】:elasticsearch "fields" parameter with dot notation带点符号的弹性搜索“字段”参数
【发布时间】:2015-12-22 10:30:01
【问题描述】:

Elasticsearch 的搜索 API 支持“字段”参数来限制从命中返回的字段。它还支持文档子属性的点表示法。例如,查询

{
    "fields" : ["user.lastname"],
    "query" : {
        "term" : { "_id" : 1 }
    }
}

将返回匹配为:

{
   "hits": [
        {"_id": 1,
         "user.lastname": "Smith"}
  ]
}

我想知道是否可以选择让它返回:

{
   "hits": [
        {"_id": 1,
         "user": {"lastname": "Smith"}}
  ]
}

第二个的好处是保持与完整文档相同的结构,因为以下数据访问逻辑是一致的。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    是的,如果你改用source filtering(即_source而不是fields),你会得到预期的结果,即

    POST index/_search
    {
        "_source" : ["user.lastname"],
        "query" : {
            "term" : { "_id" : 1 }
        }
    }
    

    结果:

    {
       "hits": [
          {
             "_id": 1,
             "_source": {
                 "user": {"lastname": "Smith"}
             }
          }
      ]
    }
    

    【讨论】:

    • 难道没有办法在字段对象中返回相同的结构吗?我正在使用字段对象在 Django 的模板中呈现数据,但在 Django 中,变量和属性可能不以下划线开头。所以我不能直接在模板中使用_source
    • 你可以试试custom template filter?
    猜你喜欢
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    相关资源
    最近更新 更多