Как добавить фильтр на основе «пользовательского счета» с помощью FOSElasticaBundle? - PullRequest
1 голос
/ 13 октября 2019

Я делаю сервис для применения некоторых пользовательских фильтров к результатам 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, ноЯ не вижу примера того, как я мог бы реализовать то, что я объяснил, если кто-то может указать мне правильное направление или дать небольшой пример, чтобы я мог продолжать, я буду благодарен, спасибо.

...