FosElasticaBundle 查询前缀似乎没有 return 正确的结果
FosElasticaBundle Query Prefix does not seem to return corrent results
我想要完成的是 return 结果:
- 搜索2种(recipe,product),一时没注意
- 属性 名称 开始 搜索查询
- 建立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: ~
问题是Prefix defines,那个字段name必须以'pom'开头,所以它必须得到0个结果,但我从示例数据中获得了所有三个结果。
前缀查询适用于未分析的字段。检查这个 Term level queries doc
对于您正在做的事情,您应该使用匹配短语前缀查询 Doc here
这是 ES 文档,因此您必须将该查询转换为 FosElastica 查询,或者只创建一个数组并将其用作查询。
我想要完成的是 return 结果:
- 搜索2种(recipe,product),一时没注意
- 属性 名称 开始 搜索查询
- 建立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: ~
问题是Prefix defines,那个字段name必须以'pom'开头,所以它必须得到0个结果,但我从示例数据中获得了所有三个结果。
前缀查询适用于未分析的字段。检查这个 Term level queries doc 对于您正在做的事情,您应该使用匹配短语前缀查询 Doc here
这是 ES 文档,因此您必须将该查询转换为 FosElastica 查询,或者只创建一个数组并将其用作查询。