使用SOLR& amp;用户名和名称搜索查找用户的关注者PHP

时间:2015-05-29 02:25:24

标签: php mysql solr solr-query-syntax

我尝试做的是创建一个输入字段,当您键入时,它会根据输入的用户名和/或名称搜索关注您的用户。

我尝试使用SOLR,因为它速度快,而且我无法使用MySQL的LIKE功能,但我遇到了数值问题我可以传递给SOLR查询(例如user_id:(1,2,3,5,etc))。 SOLR显然对您可以通过的值的数量有限制,我需要这个解决方案不受限制。

截至目前,我的SOLR索引包括usernamenameuser_id。然后我将先前收集的follower_ids列表传递给查询。

关于如何使这项工作的任何想法?

更新:正如在增加OR条款的评论中所建议的......这确实不是一个好的解决方案,因为它会导致未来的问题。

1 个答案:

答案 0 :(得分:0)

我在solr中遇到过多布尔子句异常的问题。 我有了更多的acl ID(访问控制列表),因此查询得太长了。

我采取的克服这个问题的步骤是

  1. 增加maxBooleanCLauses

  2. 在过滤器查询中使用& fq = acl:(id1或id2 ...)

  3. 如果acl的计数大于8000,那么我将发送多个具有以下逻辑的请求

  4. StringBuilder queryString = new StringBuilder(5000);       if(acls.length> 8000){           整数aclCounter = 0;           long requestCnt = Math.round(Math.ceil((acls.length / 8000.0)));           for(int i = 0; i< requestCnt; i ++)               {                   queryString = new StringBuilder(acls.length * 10);                   queryString.append("&安培; FQ = ACL:(&#34);                   for(int j = 0; j< 8000&& aclCounter< acls.length; aclCounter ++,j ++)                   {                       queryString.append(ACL的[aclCounter])追加(APPEND_OR)。                    } queryString.replace(queryString.length() - 4,queryString.length(),")");               }        }

    我希望这可以解决您的问题。