我有一个关于我可以完成某事的问题。 我已准备好用户文档的搜索算法。
我获取了文档列表,但我不想让列表分组同一用户的文档部分。
例如:
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
答案 0 :(得分:0)
即使你找到了一个搜索技巧来评分这个特定的用例,你可能只想考虑对搜索结果进行后处理以获得你需要的东西。
只需遍历列表,保持对前一个用户的引用,如果您在下一个结果中看到相同的用户,只需将其从结果中删除,然后将其附加到列表的末尾。
一般来说,你会得到你的#34;洗牌"用户根据需要,偶尔会在列表的最末端堆积最多产的用户。