处理Solr中的大量ID

chi*_*ito 6 solr solr4

我需要在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内部结构不太了解,所以不知道如何继续.

sam*_*ass 3

借助 Solr4 的软提交,提交变得足够便宜,实际上可以将“online”标志直接存储在用户记录中,并且只需在查询中使用 &fq=online:true 即可。这减少了通过网络发送 5000 个 id 并解析它们所涉及的开销,并让 Solr 稍微优化了查询。每当有人登录或注销时,设置他们的状态并设置更新的 commitWithin 。无论如何,值得一试。

  • 我不认为这将是一个理想的解决方案,因为我已经提到索引是不可能的,并且通常需要 15-30 分钟 (2认同)
  • 你不应该按照这个想法重新创建整个索引。您也可以更新单个实体。在您的情况下,如果用户登录,则仅更新他的用户记录(他的单个记录)。为此,您可以将 json 或 xml 更新请求发送到 solr 服务器。有关参考,请查看此处 http://yonik.com/solr/atomic-updates/ 或 http://wiki.apache.org/solr/UpdateJSON 或 http://solr.pl/en/2012/07/09 /solr-4-0-部分文档更新/ (2认同)