elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Java hasParentQuery中的Elasticsearch命名查询不起作用?

Java hasParentQuery中的Elasticsearch命名查询不起作用?,java,elasticsearch,Java,elasticsearch,我做了一个测试来测试我是否在hasParentQuery中得到了正确的命名查询。但它似乎不起作用 运行elasticsearch 2.4时,我找不到有关它的任何信息。或者可能是一只虫子? 输出 parent outerBool // "innerBool" and "term" should also be here? JSON搜索查询 { "query": { "bool": { "must": { "has_parent": {

我做了一个测试来测试我是否在hasParentQuery中得到了正确的命名查询。但它似乎不起作用

运行elasticsearch 2.4时,我找不到有关它的任何信息。或者可能是一只虫子?

输出

parent
outerBool
// "innerBool" and "term" should also be here?
JSON搜索查询

{
  "query": {
    "bool": {
      "must": {
        "has_parent": {
          "query": {
            "bool": {
              "should": {
                "term": {
                  "value": {
                    "value": "1",
                    "_name": "term"
                  }
                }
              },
              "_name": "innerBool"
            }
          },
          "parent_type": "branch",
          "_name": "parent"
        }
      },
      "_name": "outerBool"
    }
  }
}
和测试:

client.admin().indices().create(new CreateIndexRequest("my_index")).actionGet();

String employee =
    IOUtils.toString(this.getClass().getClassLoader().getResourceAsStream("employeeMapping.json"));
client.admin().indices().preparePutMapping("my_index")
    .setType("employee").setSource(employee).execute().actionGet();
String branch = IOUtils.toString(this.getClass().getClassLoader().getResourceAsStream("branchMapping.json"));
client.admin().indices().preparePutMapping("my_index").setType("branch").setSource(branch).execute()
    .actionGet();

String parentId = "1";
client.prepareIndex("my_index", "branch", parentId)
    .setSource(new HashMap<String, Object>() {{
        put("value", "1");
        put("value2", "2");
    }}).execute().actionGet();
client.prepareIndex("my_index", "employee", parentId)
    .setSource(new HashMap<String, Object>() {{
        put("id", "1");
    }}).setParent(parentId).execute().actionGet();

Thread.sleep(1000);

SearchRequestBuilder searchRequestBuilder = client.prepareSearch("my_index").setTypes("employee").setQuery(
    QueryBuilders.boolQuery().must(
        QueryBuilders.hasParentQuery("branch",
            QueryBuilders.boolQuery()
                .should(QueryBuilders.termQuery("value", "1").queryName("term")).queryName("innerBool")

        ).queryName("parent")
    ).queryName("outerBool")
);
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();

Arrays.stream(searchResponse.getHits().getHits()[0].getMatchedQueries()).forEach(q ->
    System.out.println(q)
);
employeeMapping.json

{
  "properties": {}
}
{
  "_parent": {
    "type": "branch"
  }
}

我必须将innerHits添加到父查询中,以便在响应中添加innerHits元素,并从中获得匹配的查询

QueryBuilders.hasParentQuery("branch",
   QueryBuilders.boolQuery()
      .should(QueryBuilders.termQuery("value", "1").queryName("term")).queryName("innerBool"))
   .queryName("parent")
   .innerHit(new QueryInnerHitBuilder())

我必须将innerHits添加到父查询中,以便在响应中添加innerHits元素,并从中获得匹配的查询

QueryBuilders.hasParentQuery("branch",
   QueryBuilders.boolQuery()
      .should(QueryBuilders.termQuery("value", "1").queryName("term")).queryName("innerBool"))
   .queryName("parent")
   .innerHit(new QueryInnerHitBuilder())