栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

当我从solr查询时,它发生了一个常见异常,告诉我未定义字段userId

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

当我从solr查询时,它发生了一个常见异常,告诉我未定义字段userId

如我所见,您在代码中更改了baseUrl。如您在评论中所说,您在同一页面上查询多个内核,并且所有内核都使用相同的

HttpSolrServer
。因此,您的解决方案似乎缺乏同步性,可能同时有两个请求在运行,而一个请求却在查询另一个的“核心”。

当然,您可以同步您的方法。但我认为,就您而言,最好不要

HttpSolrServer
每次都抽动,而应为查询设置附加参数,这将用作您的附加路径
baseUrl
。您将需要设置
baseUrl
HttpSolrServer
在创建时一次:

HttpSolrServer solrHttpServer = new HttpSolrServer(baseUrl);

而不是为每个查询更改它,而是设置参数(代码的diff):

 String queryexpression = "*:*"; String sortField = "createTime";-String baseUrl = SolrUtil.getSolrbaseURL(solrHttpServer.getbaseURL());-solrHttpServer.setbaseURL(baseUrl + "/" + coreName); SolrQuery query = new SolrQuery();+query.set(CommonParams.QT, "/" + coreName + "/select"); query.setQuery(queryexpression); query.setSortField(sortField, SolrQuery.ORDER.asc); QueryResponse rsp = solrHttpServer.query(query);

但是最好的解决方案是

HttpSolrServer
为每个核心分别设置:

Map<String, HttpSolrServer> servers = new HashMap<String, HttpSolrServer>();servers.put(coreName1, new HttpSolrServer(baseUrl + "/" + coreName1));...

结果代码更改:

 String queryexpression = "*:*"; String sortField = "createTime";-String baseUrl = SolrUtil.getSolrbaseURL(solrHttpServer.getbaseURL());-solrHttpServer.setbaseURL(baseUrl + "/" + coreName); SolrQuery query = new SolrQuery(); query.setQuery(queryexpression); query.setSortField(sortField, SolrQuery.ORDER.asc);-QueryResponse rsp = solrHttpServer.query(query);+QueryResponse rsp = servers.get(coreName).query(query);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438277.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号