FosElasticaBundle查询前缀似乎没有返回相关结果

时间:2018-01-10 13:14:35

标签: php symfony elasticsearch foselasticabundle

我想要完成的是返回以下结果:

  • 搜索2种类型(食谱,产品),暂时没有照顾它
  • 属性名称 使用搜索查询启动
  • 建立 fieldFuzziness (使用拼写错误进行搜索)

到目前为止,我有控制器

$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: ~

问题是前缀定义,字段名称必须以'pom'开头,因此必须获得0结果,但我从示例数据中获得所有三个结果。

1 个答案:

答案 0 :(得分:0)

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

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