使用未直接关联的实体进行FOS Elastica搜索

时间:2018-07-30 06:11:58

标签: symfony foselasticabundle

我正在使用FOSElasticaBundle进行搜索;我需要一个文本和一些ID作为查询的条件。

config.yml中定义索引的方式如下:

lignecatalogue:
        types:
            lignecatalogue:
                mappings:
                  lignecatalogueDesignation: ~
                  gamme:
                    type: "nested"
                    properties:
                      catalogue:
                        type: "nested"
                        properties:
                          fournisseur:
                            type: "object"
                            properties:
                              id: ~

                persistence:
                  driver: orm
                  model: CatalogueBundle\Entity\Lignecatalogue
                  provider: ~
                  listener: ~
                  finder: ~

对于仅使用文本进行查询,我没有遇到任何问题,但是当我向查询中添加ID时出现了问题。

 public function getElasticCatLignecatQuery($txt, $fourns) {
    $boolQuery = new BoolQuery();

    $queryString = new QueryString();
    $queryString->setQuery('*' . Util::escapeTerm($txt) . '*');
    $queryString->setFields(array(
        'lignecatalogueDesignation'
    ));
    $boolQuery->addMust($queryString);

    //the above part works fine, but part below doesn't work
    if (!empty($fourns)) {
        foreach ($fourns as $fournId) {
            $nestedQuery = new Nested();
            $nestedQuery->setPath('catalogue');
            $nestedQuery->setParam('id', $fournId);
            $boolQuery->addMust($nestedQuery);
        }
    }

    $result = $this->finder->find($boolQuery, 10000);

    return $result;
}

问题是实体fournisseur没有直接与实体lignecatalogue关联,否则我不会有问题。

要从fournisseur访问实体lignecatalogue:lignecatalogue-> gamme-> catalogue-> fournisseur

我也尝试过类似的方法,但是没有用:

if (!empty($fourns)) {
        foreach ($fourns as $fournId) {
            $tagsQuery = new Match();
            $tagsQuery->setFieldQuery('gamme.catalogue.fournisseur.id', $fournId);
            $boolQuery->addMust($tagsQuery);
        }
    }

我什至不确定是否可以像对嵌套部分那样定义索引。我也尝试使用type“对象”而不是“嵌套”,但是没有用。

0 个答案:

没有答案