弹性搜索 - 同一用户的文档的订单/评分

时间:2016-08-17 22:39:00

标签: sorting elasticsearch relevance

我有一个关于我可以完成某事的问题。 我已准备好用户文档的搜索算法。

我获取了文档列表,但我不想让列表分组同一用户的文档部分。

例如:

doc1: user-1 doc2: user-2 doc3: user-2 doc4: user-3 doc5: user-4

更改为:

doc1: user-1 doc2: user-2 doc4: user-3 doc5: user-4 doc3: user-2

排序/随机化......

我可以搜索的任何提示和想法? 或者更好,一些例子。

我对弹性搜索很新。关于自定义评分或订购的文档很棒,但没有给我正确答案。

万分感谢 斯蒂芬

更新18.08: 如您所愿,这里也是我当前的查询。

'query' => [
'filtered' => [
    'query' => [
        'bool' => [
            'must' => [
                'multi_match' => [
                    'query' => $q,
                    'fields' => [ 'title^6', 'description^1', 'tags^3']
                ]
            ], 
            'should' => [
                [
                    'match' => [ 
                        'isTopDocument' => [
                            'query' => 'true',
                            'boost' => 2,
                        ]
                    ]
                ],[
                    'range' => [
                        'online_start' => [
                            'boost' => 1.8,
                            'gte' => 'now-7d/d'
                        ]
                    ]
                ],[
                    'range' => [
                        'online_start' => [
                            'boost' => 1.4,
                            'gte' => 'now-14d/d'
                        ]
                    ]
                ],[ // This is to include all available jobs, at least one should must be true if a must is set
                    // https://www.elastic.co/guide/en/elasticsearch/guide/current/bool-query.html#_controlling_precision
                    'range' => [
                        'online_start' => [
                            'gte' => 'now-61d/d'
                        ]
                    ]
                ]
            ]
        ]
    ],
    'filter' => [
        'bool' => [
            // Some term filters
            'should' => $filter_should,
            'must' => $filter_must,
        ]
    ]
]
],
'size' => $perPage,
'from' => $from

1 个答案:

答案 0 :(得分:0)

即使你找到了一个搜索技巧来评分这个特定的用例,你可能只想考虑对搜索结果进行后处理以获得你需要的东西。

只需遍历列表,保持对前一个用户的引用,如果您在下一个结果中看到相同的用户,只需将其从结果中删除,然后将其附加到列表的末尾。

一般来说,你会得到你的#34;洗牌"用户根据需要,偶尔会在列表的最末端堆积最多产的用户。