Я делаю сервис для применения некоторых пользовательских фильтров к результатам ebay. Для этого я использую Symfony 4 и FOSElasticaBundle следующим образом:
fos_elastica.yaml:
# Read the documentation: https://github.com/FriendsOfSymfony/FOSElasticaBundle/blob/master/Resources/doc/setup.md
fos_elastica:
clients:
default: { host: 127.0.0.1, port: 9200 }
indexes:
app_product:
finder: ~
types:
product:
properties:
name: { boost: 10 }
tags: { boost: 9 }
description: { boost: 8 }
persistence:
# the driver can be orm, mongodb or phpcr
driver: orm
model: App\Entity\Product
provider: ~
finder: ~
elastica_to_model_transformer:
ignore_missing: true
Как я вызываю ElasticSearch из контроллера:
$results = $manager->getRepository(Product::class)->findPaginated($term);
$results->setCurrentPage($page);
$totalresults = $results->count();
$maxPerPage = $results->getMaxPerPage();
$maxPages = round($totalresults/$maxPerPage);
Приведенный выше код работает нормально, но я хочу улучшить свои результаты, используя больше весов, и для этого я хочу использовать некоторые дополнительные поля, такие как: vendorRating, positiveFeedbacks, positiveFeedbacks, нейтральные обратные ссылки, vendorTransactions, AddedTime, editedTime
Еслиискомый термин соответствует названию, тегам или описанию. Я хочу отсортировать результаты на основе следующих условий: - время, когда продукт был добавлен в базу данных (более старый продукт дает продукту больше баллов) - если продукт был недавно изменен, он будетотнимите немного баллов - рейтинг поставщика и транзакции, высокий рейтинг с большим количеством транзакций даст больший балл продукту, чем у продавца с высоким рейтингом, но мало транзакций
Также есть некоторые случаи, которые я не рассматриваюне знаю, как управлять ими, потому что если у меня естьодин продавец с рейтингом 5 звезд, а другой с рейтингом 4,8 - легко, мне нужно будет показать первые результаты от поставщика с более высоким рейтингом, но если у меня будет тот же пример, но у поставщика с 5 звездами будет только несколько транзакций, а второйу меня есть намного больше, я должен инвертировать результаты. Я подумал, что, возможно, лучший подход должен добавить новый индекс с именем (например) vendorLevel, где я могу рассчитать уровень поставщика на основе их рейтинга, положительных отзывов, транзакций и т. Д.
Я проверил документацию FOSElasticaBundle в Github, ноЯ не вижу примера того, как я мог бы реализовать то, что я объяснил, если кто-то может указать мне правильное направление или дать небольшой пример, чтобы я мог продолжать, я буду благодарен, спасибо.