ORO - выражение строки запроса к сетке данных Elasticsearch `EndWith`

Я работал над применением дополнительных фильтров в datagrids на основе Oro\Bundle\SearchBundle\Datagrid\Datasource\SearchDatasource в ORO - 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 выражения просто проигнорированы, запрос dont convert in elasticsearch.

Должен ли я применять другие выражения, чтобы получить endsWith результатов? Это проблема OroElasticSearchBundle?


person Artoa    schedule 25.09.2020    source источник


Ответы (1)


Поисковая система Oro не поддерживает оператор endsWith, потому что он не используется широко для поиска.

Другая причина, по которой он не реализован, - плохая работа подстановочного знака ElasticSearch в обычных полях. Эта проблема была недавно решена в ES 7.9. Поскольку OroCommerce зависит от версии 7.0+, она не будет реализована в ядре для 4.1 LTS.

Если вы хотите реализовать это в настройке, вы можете создать построитель части where для поддержки оператора end_with с помощью запроса с подстановочными знаками.

Вы также можете внести решение в основной репозиторий Github, если хотите, чтобы это было включено в следующем LTS. Для получения дополнительной информации см. Как внести свой вклад в исходный код OroCommerce

person Andrey Yatsenko    schedule 25.09.2020