Elasticsearch java顶级查询

时间:2014-12-15 14:04:39

标签: java json elasticsearch

我正在尝试使用java api

在以下json上运行搜索
{
  "query": {
    "has_child": {
      "query" : {
        "filtered": {
          "query": { "match_all": {}},
          "filter" : {
            "and": {"filters":[
              {"term": {"term": "value"}}
            ]}
          }
        }
      },
      "child_type": "child"
    }
  }
}

这是我的java代码,

        QueryBuilders.hasChildQuery("child", QueryBuilders
                           .filteredQuery(QueryBuilders.matchAllQuery(),
                                         FilterBuilders.andFilter(FilterBuilders.
                                          termFilter("term", "value"))));

然而,这只会产生json

{"has_child":
    {"query":
        {"filtered":
            {"query":{"match_all":{}},
                "filter":{
                "and":
                    {"filters":[
                        {"term":{"term":"value"}}
                        ]
                    }
                }
            }
        },
        "child_type":"child"
    }
}

正如您所看到的,我错过了顶级{ "query" : ... },但我无法找到如何使用java api为elasticsearch添加此顶级查询。

1 个答案:

答案 0 :(得分:0)

从我对代码中的理解

client.prepareSearch("parent-child")
            .setSearchType(SearchType.QUERY_THEN_FETCH)
            .setQuery(query)
            .setFrom(0).setSize(60).setExplain(true)
            .execute()
            .actionGet();

使用{"query" : ...}

自动包装查询

我的问题是我在搜索错误的索引。