如何在ElasticSearch中使用多匹配类型查询跨子字段和父字段进行查询?

时间:2014-09-25 13:47:29

标签: elasticsearch

示例:

Parent doc
    id: 1
    field1: politics
    field2: donkeys
Child doc
    parent_id: 1
    field1: prose

我希望能够搜索“政治驴散文”(作为AND查询,但不关心任何单词匹配哪个字段)并使其与父文档匹配。这可能吗?或者我是否需要开始将孩子们作为父母中的一个大字段卷起来(非常不受欢迎,因为可能有很多孩子)?

我最好在Java中寻找解决方案,但我会采取任何方式来获取它!

1 个答案:

答案 0 :(得分:0)

我认为这可能会这样做:

String parent_fields = "f1,f2";
String child_fields = "f3,f4";
BoolQueryBuilder allQueries = QueryBuilders.boolQuery();

for( String term : terms )
{
    BoolQueryBuilder booly = QueryBuilders.boolQuery();
    for( String field : parent_fields.split( "," ) )
    {
        booly.should( QueryBuilders.termQuery( field, term ) );
    }
    for( String field : child_fields.split( "," ) )
    {
        booly.should( QueryBuilders.topChildrenQuery( child_type, QueryBuilders.termQuery( field, term )  ) );
    }
    allBoolies.must( booly );
}