ORO-Elasticsearch Datagrid查询字符串`endsWith`表达式

问题描述

我一直在基于datagrids中的Oro\Bundle\SearchBundle\Datagrid\Datasource\SearchDatasourceORO - 4.1.2应用其他过滤器。 如果使用基于数据库搜索引擎,则可以正确应用搜索表达式,尤其是对于像这样的表达式:

Oro\Bundle\SearchBundle\Query\Criteria\Criteria::expr()->startsWith($field,$value);
Oro\Bundle\SearchBundle\Query\Criteria\Criteria::expr()->endsWith($field,$value);

如果使用elasticsearch,则搜索表达式startsWith适用正确, 在prefix查询过滤器中进行转换。但是,endsWith表达式只是被忽略了,不要t convert in elasticsearch`查询

我应该应用一些不同的表达式来获得endsWith结果吗? 是OroElasticSearchBundle的问题吗?

解决方法

Oro搜索引擎不支持endsWith运算符,因为它没有广泛用于搜索。

未实现的另一个原因是ElasticSearch通配符在常规字段中的性能较差。这个问题最近在ES 7.9中得到解决。由于OroCommerce依赖于7.0+,因此它不会在4.1 LTS的核心中实现。

如果要在定制中实现它,则可以使用通配符查询创建一个where零件生成器,以支持“ ends_with”运算符。

如果您希望在下一个LTS中启用该解决方案,也可以为核心Github存储库提供解决方案。有关更多详细信息,请参见How to Contribute to the OroCommerce Source Code