映射文件中的Boosting字段不能与QueryString一起使用

时间:2016-03-29 13:01:08

标签: symfony elasticsearch foselasticabundle

我有一个应用程序,用户(客户端)可以激活不同的模块 在搜索中,用户应该能够搜索整个索引中的值(对于他已激活的模块)。

问题在于我还需要增加一些领域。

目前我有这个。

  

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'
));

我做错了吗? 还有另一种方法吗?

谢谢!

0 个答案:

没有答案