我正在尝试构建一个查询,首先让我获取一个跟随用户的关注者列表,然后它应该获取该列表,然后检查它们是否“在线”。
我有两个'索引'或端点/频道和/跟随。
通道端点JSON对象看起来像这样(部分缩写)
{ channel: {"username":"username1", ... , "online":"true" } }
以下端点对象看起来有点像
{ following : {"username1":{"username2":"username2", "username3":"username3"} }
如果我运行一个简单的查询/在/ _search之后我会回复点击...
{
"_index": "following",
"_type": "following",
"_id": "_Liso_",
"_score": 1,
"_source": {
"Gabe": "Gabe",
"Gavin": "Gavin"
}
}
这个结果意味着Gavin跟随Gabe。
我认为问题在于我如何存储数据 在firebase中,我的数据看起来像这样
following
|---Gabe
|----Gavin:Gavin
因此,以下对象的每个子对象都具有{username}:{username}
的键/值子对象现在,我可以运行单独获取所需结果的查询。例如,如果我问ElasticSearch(ES),如果频道“Gavin”是“在线”,我会取回一个结果,具体取决于他们是否在线。和跟随一样。但是,我似乎无法获得查询,先查看谁在关注Gavin,然后查看他们是否在线并返回在线用户。
答案 0 :(得分:0)
我找到了更好的解决方案(或许不是)。首先,您在数据库中查询跟随用户的用户。
从此列表中发送另一个查询
{
"query":{
"filtered":{
"query":{
"match_all":{}
},
"filter":{
"bool":{
"must":{
"terms":{
"username":["username1"]
}
},
"must_not":{
"terms":{
"online":["true"]
}
}
}
}
}
}
}
但这不起作用,但用户名不能与capitols混合使用。我不知道这是否是我的索引问题,或者条款必须非常具体。我在客户端使用的解决方案是在提交之前将搜索条件小写。它原油和hacky但它现在有效。
我可能遇到的问题:
在开发/学习更好的查询方法时,我会继续修改答案。