我需要按照下一个顺序对结果进行排序:
我的用户看起来像这样:
{
"username": "admin"
"followers": [
{
"id": 2,
"username": "kiehn.nicola2"
},
{
"id": 3,
"username": "adaline253"
},
{
"id": 4,
"username": "skuhic4"
}
],
"following": [
{
"id": 2,
"username": "kiehn.nicola2"
},
{
"id": 3,
"username": "adaline253"
},
{
"id": 4,
"username": "skuhic4"
},
{
"id": 5,
"username": "heaney.garth5"
}
]
}
有可能吗?
当然,我知道当前的用户ID和用户名。
我编写此查询,但它不起作用(例如,用户ID为1):
{
"query": {
"bool": {
"must": [
{
"wildcard": {
"username": {
"value": "*a*",
"boost": 1
}
}
}
]
}
},
"sort": [
{
"following.username": {
"order": "asc",
"nested_path": "following",
"nested_filter": {
"term": {
"following.id": 1
}
}
},
"followers.username": {
"order": "asc",
"nested_path": "followers",
"nested_filter": {
"term": {
"followers.id": 1
}
}
}
}
],
"size": 40
}
答案 0 :(得分:1)
我会通过提升来做到这一点;提升搜索者在其关注者身上获得的点击量,然后以较低的值提升搜索者在其“关注”字段中的点击次数:
注意:在此示例中,搜索者的ID为55
"query": {
"bool": {
"should": [
{
"nested": {
"path": "followers",
"query": {
"term" : { "followers.id": { "value": 55, "boost": 3.0 } }
}
}
},
{
"nested": {
"path": "following",
"query": {
"term" : { "following.id": { "value": 55, "boost": 2.0 } }
}
}
},
{
"match_all": { "boost": 1.0 }
}
]
}
}
如果搜索者处于热门追随者字段中,那么搜索者就会关注该搜索,因此提升率最高,等等...
你说你想要所有其他用户,最后是"match_all: {}
查询。