我有一个应用程序,用户(客户端)可以激活不同的模块 在搜索中,用户应该能够搜索整个索引中的值(对于他已激活的模块)。
问题在于我还需要增加一些领域。
目前我有这个。
mapping.yml
indexes:
traveler:
client: default
finder: ~
types:
Country:
mappings:
name: { boost: 10 }
code:
# additional info (irrelevant)
persistence:
driver: orm
model: CoreBundle\Entity\Country
provider: ~
listener: ~
finder: ~
serializer:
groups: [Default, elastica]
Places:
mappings:
name:
address:
type: "object"
properties:
city: ~
region: ~
country: ~
persistence:
driver: orm
model: CoreBundle\Entity\Places
provider: ~
listener: ~
finder: ~
serializer:
groups: [Default, elastica]
在我的服务中我有这个:
$index = $this->get('fos_elastica.finder.traveler');
$query = new \Elastica\Query\QueryString($search);
# if the client has the module activated
foreach ($this->getClient()->getServices() as $service) {
switch ($service->getService()->getTag()) {
case "countries":
$filters->addShould(
new Type('Country')
);
break;
case "places":
$filters->addShould(
new Type('Places')
);
break;
}
}
$query = new \Elastica\Query\Filtered($query, $filters);
// set result limit
$globalQuery = new Query();
$globalQuery->setQuery($query);
$globalQuery->setSize($limit);
// return result
return $index->find($query);
现在,例如,如果我搜索" 德国"," 国家/地区"结果应该是结果集中的第一个,因为我在yml映射中对它应用了一个boost。 相反,前5或6个结果适用于" 地方"在他们的国家地址" 德国"。
未应用提升(我尝试使用更高的值,删除它...结果不会更改)。
如果我改变了我的服务,我找到了一种工作方式,但我更希望它使用映射中定义的boost属性。
$query = new QueryString($search);
$query->setFields(array(
'_all',
'Country.name^10'
));
我做错了吗? 还有另一种方法吗?
谢谢!