0

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

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

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

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

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

4

1 回答 1

0

我在 solr 中有太多布尔子句异常的问题。我有更多数量的 acl id(访问控制列表),因此查询变得太长。

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

  1. 增加 maxBooleanCLauses

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

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

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:("); for (int j = 0; j < 8000 && aclCounter < acls.length; aclCounter++, j++) { queryString.append(acls[aclCounter]).append(APPEND_OR); } queryString.replace(queryString.length() - 4, queryString.length(), ")"); } }

我希望这会给解决您的问题提供一个想法。

于 2015-06-10T08:10:52.557 回答