我需要在Solr中执行在线搜索,即用户需要找到具有特定标准的在线用户列表.
我如何处理这个问题:我们将用户的ID存储在一个表中,并在Solr请求中发送所有在线用户ID
&fq=-id:(id1 id2 id3 ............id5000)
Run Code Online (Sandbox Code Playgroud)
这种方法的问题在于,当id变大时,Solr需要花费太多时间来解决,我们需要通过网络传输大量请求.
一种解决方案可以是在Solr中使用join,但是在线数据会定期更改,我不能每次都对数据进行索引(例如5-10分钟,应该至少一小时).
其他解决方案我认为根据URL中的某些参数从Solr内部触发此查询.我对Solr内部结构不太了解,所以不知道如何继续.
借助 Solr4 的软提交,提交变得足够便宜,实际上可以将“online”标志直接存储在用户记录中,并且只需在查询中使用 &fq=online:true 即可。这减少了通过网络发送 5000 个 id 并解析它们所涉及的开销,并让 Solr 稍微优化了查询。每当有人登录或注销时,设置他们的状态并设置更新的 commitWithin 。无论如何,值得一试。