elasticsearch 过滤嵌套对象ElasticSearch,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 过滤嵌套对象ElasticSearch,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 过滤嵌套对象ElasticSearch

elasticsearch 过滤嵌套对象ElasticSearch,elasticsearch,nest,elasticsearch,Nest,您好: 是否可以过滤掉不相关的嵌套对象?用例是,您只有一个父级,但父级有多个子级。比如说,一个特定的父母……有100个孩子;我需要一种方法来过滤掉特定的子项,这样从100个子项中,我就得到了结果的一个子集 已更新 运行以下查询 GET /dev/doc/_search?typed_keys=true {"_source":{"includes":["reviews"]},"query":{"nested":{"query":{"bool":{"filter":[{"term":{"reviews

您好:

是否可以过滤掉不相关的嵌套对象?用例是,您只有一个父级,但父级有多个子级。比如说,一个特定的父母……有100个孩子;我需要一种方法来过滤掉特定的子项,这样从100个子项中,我就得到了结果的一个子集

已更新

运行以下查询

GET /dev/doc/_search?typed_keys=true
{"_source":{"includes":["reviews"]},"query":{"nested":{"query":{"bool":{"filter":[{"term":{"reviews.userId":{"value":"339c8add-4278-4acd-905e-64b9acabc71a"}}}]}},"path":"reviews"}}}
然而,我得到了以下结果:

"reviews": [
            {
              "score": 0,
              "friendlinessOfStaff": 1,
              "amenities": 2,
              "grounds": 2,
              "reviewDate": "2018-07-03T02:00:34.8735726-07:00",
              "qualityOfCare": 4,
              "activities": 2,
              "facilityReviewReplies": [],
              "id": "56a4bac2-85d0-4ccf-aba2-fd9ff74fb3a5",
              "message": "blah blah blah",
              "userId": "339c8add-4278-4acd-905e-64b9acabc71a",
              "cleanliness": 4
            },
             {
              "score": 0,
              "friendlinessOfStaff": 1,
              "amenities": 2,
              "grounds": 2,
              "reviewDate": "2018-07-04T12:01:22.228658-07:00",
              "qualityOfCare": 4,
              "activities": 2,
              "facilityReviewReplies": [],
              "id": "f2f1b84e-bc1d-4e9c-b6d5-bdc578cb1b5f",
              "message": "blah blah blah",
              "userId": "7f1d389d-1316-4058-9857-ca51ecd9f5f8",
              "cleanliness": 4
            }
           ]

正如您可以看到的,此列表中的最后一个对象具有“userId”:“7f1d389d-1316-4058-9857-ca51ecd9f5f8”,它不匹配,但是,过滤器仍在返回值。你知道为什么会这样吗?

你使用的是什么客户端

您可能想要这样的东西(java):

否则就是这样:

您可以指定要包括和排除的字段,如下所示:

GET /_search
{
    "_source": {
        "includes": [ "obj1.*", "obj2.*" ],
        "excludes": [ "*.description" ]
    },
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

你用的是什么客户机

您可能想要这样的东西(java):

否则就是这样:

您可以指定要包括和排除的字段,如下所示:

GET /_search
{
    "_source": {
        "includes": [ "obj1.*", "obj2.*" ],
        "excludes": [ "*.description" ]
    },
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

听起来像是在问如何过滤返回的内部嵌套对象。如果您询问如何选择返回哪些列而不过滤这些列中的数据,Andreas的回答将有所帮助

要仅返回与查询匹配的嵌套对象,可以使用
internal\u hits
。基本上,只需将其添加到查询子句中,就可以得到匹配的内部对象。您还可以选择添加更多的分页等配置选项

GET index/_search
{
    "query": {
        "nested": {
            "path": "field_name",
            "query": { ... },
            "inner_hits": {}
        }
    }
}

听起来像是在问如何过滤返回的内部嵌套对象。如果您询问如何选择返回哪些列而不过滤这些列中的数据,Andreas的回答将有所帮助

要仅返回与查询匹配的嵌套对象,可以使用
internal\u hits
。基本上,只需将其添加到查询子句中,就可以得到匹配的内部对象。您还可以选择添加更多的分页等配置选项

GET index/_search
{
    "query": {
        "nested": {
            "path": "field_name",
            "query": { ... },
            "inner_hits": {}
        }
    }
}

谢谢你的回复,安德烈亚斯。问题是…我可以查询嵌套对象吗?我的客户也是NEST。是的,你可以查询嵌套对象,看看吧,谢谢你的回复Andreas。问题是…我可以查询嵌套对象吗?另外,我的客户是NEST。是的,你可以查询嵌套对象,看看NEST的内部点击文档:@RussCam&Ryan。。我已经更新了我原来的帖子。运行嵌套查询仍然没有显示理想的结果。@Dean您更新的查询没有包含嵌套查询的
内部\u命中:{}
query@RussCam好的。我会更新并分享结果…谢谢。@RussCam非常感谢。
internal\u hits
肯定有效。NEST for internal hits的文档:@RussCam&Ryan。。我已经更新了我原来的帖子。运行嵌套查询仍然没有显示理想的结果。@Dean您更新的查询没有包含嵌套查询的
内部\u命中:{}
query@RussCam好的。我会更新并分享结果…谢谢。@RussCam非常感谢。
internal\u hits
肯定有效。