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