FosElasticaBundle 查询前缀似乎没有 return 正确的结果

FosElasticaBundle Query Prefix does not seem to return corrent results

我想要完成的是 return 结果:

到目前为止我有 控制器:

$q = 'pom'; // search string

/** @var FinderInterface $finder */
$finder = $this->container->get('fos_elastica.finder.app.recipe');

$match = new Match();
$match
    ->setFieldQuery('name', $q)
    ->setFieldFuzziness('name', 2.5)
;

$prefix = new Query\Prefix();
$prefix
    ->setPrefix('name', $q)
;

$bool = new Query\BoolQuery();
$bool
    ->addMust($prefix)
    ->addShould($match);

$results = $finder->find($bool);

示例数据:

+----+------------------------------------+-------------+
| id |                name                | otherFields |
+----+------------------------------------+-------------+
|  1 | Coctail pomegranate                |             |
|  2 | Coctail pomegranate with nuts      |             |
|  3 | Coctail pomegranate with mushrooms |             |
+----+------------------------------------+-------------+

fos_elastica.yml

fos_elastica:
clients:
    default: { host: %elastic_host%, port: %elastic_port% }
indexes:
    app:
        client: default
        types:
            recipe:
                properties:
                    recipeId :
                        type : integer
                    recipeDescription :
                        type : text
                    createdAt :
                        type : date
                    updatedAt :
                        type : date
                    name :
                        type : text
                persistence:
                    identifier: recipeId
                    driver: orm
                    model: AppBundle\Entity\Recipe
                    finder: ~
                    provider: ~
                    listener: ~

问题是Prefix defines,那个字段name必须以'pom'开头,所以它必须得到0个结果,但我从示例数据中获得了所有三个结果。

前缀查询适用于未分析的字段。检查这个 Term level queries doc 对于您正在做的事情,您应该使用匹配短语前缀查询 Doc here

这是 ES 文档,因此您必须将该查询转换为 FosElastica 查询,或者只创建一个数组并将其用作查询。