我正在使用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
“对象”而不是“嵌套”,但是没有用。