我想要完成的是返回以下结果:
到目前为止,我有控制器:
$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结果,但我从示例数据中获得所有三个结果。
答案 0 :(得分:0)
前缀查询适用于未分析的字段。检查一下Term level queries doc 对于您正在做的事情,您应该使用匹配词组前缀查询Doc here
这是ES文档,因此您必须将该查询转换为FosElastica查询,或者只创建一个数组并将其用作查询。