douyu9159 2017-03-22 08:59
浏览 163
已采纳

如何使用elasticsearchDSL Builder创建父子内部命中查询

Using the ONGR/ElasticsearchDSL I'm trying to add a Parent child inner hit query. The example documentation indicates that the proper way to do this is to

{
    "inner_hits" : {
        "children" : {
            "type" : {
                "article" : {
                    "query" : {
                        "match" : {"title" : "[actual query]"}
                    }
                }
            }
        }
    }
}
And now the query via DSL:

$matchQuery = new MatchQuery('title', '[actual query]');
$innerHit = new ParentInnerHit('children', 'article', $matchQuery);

$search = new Search();
$search->addInnerHit($innerHit);
$search->toArray();

So for my scenario I did:

$termQuery = new TermQuery('user', $query);
$innerHit = new ParentInnerHit('child_type', 'parent_type', $termQuery);
$search->addInnerHit($innerHit);

My problem is that I'm getting the error message:

Catchable fatal error: Argument 3 passed to
ONGR\ElasticsearchDSL\InerHit\NestedInnerHit::__construct()
must be an instance of ONGR\ElasticsearchDSL\Search,
instance of ONGR\ElasticsearchDSL\Query\TermLevel\TermQuery
give defined in ../ongr/elasticsearch-dsl/src/InnerHit/NestedInnerHit.php
on line 46

Any thoughts or suggestions?

展开全部

  • 写回答

1条回答 默认 最新

  • doutan5844 2017-04-14 05:32
    关注

    As you can see from exception ParentInnerHit is expecting Search instead of Query, which makes sense. To build desired query you have to:

    $termQuery = new TermQuery('user', $query);
    $searchObject = new Search();
    $search->addQuery($termQuery);
    $innerHit = new ParentInnerHit('child_type', 'parent_type', $searchObject);
    $search->addInnerHit($innerHit);
    

    Did not test this, but you should get the idea.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部