简体   繁体   English

在Java中,如何根据ID查询elasticsearch中的嵌套字段?

[英]In Java, how do you query the nested field in elasticsearch according to ID?

ScoreMode mode=ScoreMode.Total;
        SearchRequestBuilder searchRequestBuilder = 
                    client.prepareSearch() 
                          .setIndices("commons")
                          .setTypes("webpage")
                          //.fields("id")
                          .setSize(10000)
                          .setQuery(QueryBuilders
                                  .nestedQuery("imgSource", 
                                          QueryBuilders.boolQuery()
                                  .must(
                                          QueryBuilders.matchQuery(
                                                  "id","48ca52e0d733c5093c08aa4df0b073f7")
                                          ),mode));

this is my code,but result is null,So I don't know if I made a mistake... 这是我的代码,但结果为null,所以我不知道自己是否犯了错误...

As per java api for nested queries , Your code snippet should look something like below: 根据用于嵌套查询的Java api ,您的代码段应如下所示:

Suppose I want to query name field inside nested document child , then code snippet will be: 假设我要查询嵌套文档child内的name字段,那么代码片段将为:

ScoreMode mode=ScoreMode.Total;
    SearchRequestBuilder searchRequestBuilder = 
                client.prepareSearch() 
                      .setIndices(INDEX_NAME)
                      .setTypes(TYPE_NAME)
                      .setQuery(QueryBuilders
                              .nestedQuery("child", 
                                      QueryBuilders.boolQuery()
                              .must(
                                      QueryBuilders.matchQuery(
                                              "child.name","CHILD_NAME")
                                      ),mode));

So, your match query is incorrect, it should be imgSource.id 因此,您的匹配查询不正确,应为imgSource.id

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM