使用 SOLR & PHP 通过用户名和姓名搜索查找用户的关注者
Find user's followers by username and name search with SOLR & PHP
我想做的是创建一个输入字段,在您输入时,它会根据输入的用户名 and/or 名称搜索关注您的用户。
我正在尝试使用 SOLR,因为它速度很快,而且我无法使用 MySQL 的 LIKE 功能,但我 运行 遇到了关于我的值数量的问题可以传递给 SOLR 查询(例如 user_id:(1,2,3,5,etc)
)。 SOLR 显然对您可以传递的值的数量有限制,我需要这个解决方案不受限制。
截至目前,我的 SOLR 索引包括 username
、name
和 user_id
。然后我将以前收集的列表 follower_ids
传递给查询。
关于如何使这项工作有任何想法吗?
更新:正如评论中关于增加 OR 子句数量的建议...这确实不是一个好的解决方案,因为它会导致未来出现问题。
我在 solr 中遇到了太多布尔子句异常的问题。
我有更多数字的 acl id(访问控制列表),所以查询太长了。
我为解决这个问题所采取的步骤是
增加maxBooleanCLauses
在过滤器查询中使用了 &fq=acl:(id1 or id2...)
如果 acl 的计数大于 8000,那么我将使用以下逻辑发送多个请求
StringBuilder queryString = new StringBuilder(5000);
如果(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(), ")");
}
}
我希望这能为解决您的问题提供思路。
我想做的是创建一个输入字段,在您输入时,它会根据输入的用户名 and/or 名称搜索关注您的用户。
我正在尝试使用 SOLR,因为它速度很快,而且我无法使用 MySQL 的 LIKE 功能,但我 运行 遇到了关于我的值数量的问题可以传递给 SOLR 查询(例如 user_id:(1,2,3,5,etc)
)。 SOLR 显然对您可以传递的值的数量有限制,我需要这个解决方案不受限制。
截至目前,我的 SOLR 索引包括 username
、name
和 user_id
。然后我将以前收集的列表 follower_ids
传递给查询。
关于如何使这项工作有任何想法吗?
更新:正如评论中关于增加 OR 子句数量的建议...这确实不是一个好的解决方案,因为它会导致未来出现问题。
我在 solr 中遇到了太多布尔子句异常的问题。 我有更多数字的 acl id(访问控制列表),所以查询太长了。
我为解决这个问题所采取的步骤是
增加maxBooleanCLauses
在过滤器查询中使用了 &fq=acl:(id1 or id2...)
如果 acl 的计数大于 8000,那么我将使用以下逻辑发送多个请求
StringBuilder queryString = new StringBuilder(5000); 如果(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(), ")"); } }
我希望这能为解决您的问题提供思路。