Tag: requesthandler

Solr Custom RequestHandler – 注入查询参数

简短的问题:我正在寻找一种方法(java)来拦截对Solr的查询,并注入我的业务逻辑提供的一些额外的过滤参数。 我应该使用什么结构? 背景:首先,有点坦白:我是Solr的新秀。 对我来说,设置服务器,定义模式,编写function索引管理器,然后实际看到服务器返回正确的结果 – 完全按照预期! – 对自己来说已经是一项成就。 我也好! 但是,我目前正在从事一个需要更多的企业项目。 粗略地说,solr实例将由数千名用户通过同一个requestHandler进行查询,即返回的文档会根据用户的权限级别自动过滤。 例如,如果用户A和超级用户B都尝试了相同的搜索参数(即使是相同的URL),则用户B将获得所有用户A的文件,然后获得更多。 为了实现这一点,文档已经使用必要的权限级别信息编制索引。 好吧,考虑到这一点并利用Solr为newb开发人员提供的大量文档,我试图想出一个简单的自定义requestHandler来覆盖handleRequest函数,以便在SolrQueryRequest中注入必要的额外参数。 一切都很好和花花公子 – 除了我在QueryResponse中看不到任何差别,服务器粗鲁地忽略了我的小操作。 如果这是最好的方法,在没有太多暗示天气的情况下搜索网络几天后,最终决定在StackOverflow上找到好心人。 所以,简而言之,我的问题是: 这是正确的方法吗? 还有其他选择吗? 我已经可以掌握Solr的一些概念,但不可否认的是,有很多缺乏,而且完全有可能缺少某些东西。 如果是这样,在修改查询参数后,我应该做些什么来强制更新QueryResponse? 据我所知,这些仅仅是封装http请求,并且在修改后我无法嗅探查询服务器的任何内容。 提前谢谢,非常抱歉长篇文章! UPDATE 经过大量阅读API和特别多的试验和错误后,我设法获得了function性解决方案。 然而,我仍然不了解索尔的内部情况,因此仍然会欣赏一些启发。 随意随意打击,我仍然非常清楚自己的开玩笑。 解决方案的相关部分是通过覆盖handleRequestBody调用的此函数: private void SearchDocumentsTypeII(SolrDocumentList results, SolrIndexSearcher searcher, String q, UserPermissions up, int ndocs, SolrQueryRequest req, Map fields, Set alreadyFound) throws IOException, ParseException { BooleanQuery bq = […]