FOSElasticaBundle:在用户搜索中优先关注关注者

时间:2014-11-14 11:52:53

标签: elasticsearch foselasticabundle

我通过FOSElasticaBundle设置了弹性的symfony2项目。 我已经使用基本设置为用户文档(Mongo)设置了索引。 现在,当我搜索用户时,我希望搜索按指定用户的关注者优先排序(返回搜索顶部)。 关注者存储在单独的文档中(结构:id,follower_id,folowee_id)。 这样做的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

好的,所以经过研究似乎只有首先在跟随文档上进行查找,然后最终将结果与find一起合并到用户身上。 首先在跟随实体上添加索引,如:

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

现在我可以轻松地使用followee id和followers文本字符串(前缀)进行搜索:

    $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);