FOSElasticaBundle: prioritizing followers in user search

150 views Asked by At

I've got symfony2 project set up with elastica via FOSElasticaBundle. I've got indexing set up for User document(Mongo) using basic settings. Now when I do a search for users I'd like that search to be prioritized by specified user's followers (to be returned of the top of search). The followers are stored in separate document (structure: id, follower_id, folowee_id). What would be the best approach to do so?

1

There are 1 answers

0
impiix On BEST ANSWER

Ok, so after research it seems that only way is to first make a find on follow document, then eventually merge results with find on user. First added indexing on follow entity like:

    follow:
                mappings:
                     follower: ~
                     followee :
                         type : object
                         properties :
                             id : ~

Now I can easily make a search with followee id and followers text string (prefix):

    $baseQuery = new \Elastica\Query\Prefix();
    $baseQuery->setPrefix('follower', $text);


    $filter = new \Elastica\Filter\Term();
    $filter->setTerm('id', $id);
    $subquery = new \Elastica\Query\Filtered($baseQuery, $filter);

    $query = new \Elastica\Query();
    $query->setSize(10);
    $query->setQuery($subquery);

    $results =  $service->find($query);