使用tomcat7,myeclipse2017 C1,JDK 1.7,maven 3.2.3,solr 4.10.2
错误信息:
controller:
service:
pojo:
solr中的schema.xml中的cid
solr中cid的属性:
自己debug后发现映射过程中出问题的地方:
对queryResponse进行查看:
发现确实取到值了并贴出:
说一下程序中的数据来源吧,mysql中是直接导入的几千条数据
然后用solrj将表中的数据导入到solr服务器中 的代码:
public class DataImportTest {
private HttpSolrServer httpSolrServer;
private static final ObjectMapper MAPPER = new ObjectMapper();
@Before
public void setUp() throws Exception {
String url = "http://solr.taotao.com/taotao";
HttpSolrServer httpSolrServer = new HttpSolrServer(url);
httpSolrServer.setParser(new XMLResponseParser());
httpSolrServer.setMaxRetries(1);
httpSolrServer.setConnectionTimeout(500);
this.httpSolrServer = httpSolrServer;
}
@Test
public void testData() throws Exception{
String url = "http://manage.taotao.com/rest/item?page={page}&rows=100";
int page = 1;
int pageSize=0;
do {
String u = StringUtils.replace(url, "{page}", ""+page);
String jsonData =doGet(u);
JsonNode jsonNode = MAPPER.readTree(jsonData);
String rowsStr = jsonNode.get("rows").toString();
List<Item> items=MAPPER.readValue(rowsStr,
MAPPER.getTypeFactory().constructCollectionType(List.class, Item.class));
pageSize=items.size();
httpSolrServer.addBeans(items);
this.httpSolrServer.commit();
page++;
} while (pageSize == 100);
}
private String doGet(String url) throws Exception{
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(url);
CloseableHttpResponse response = null;
try {
response = httpclient.execute(httpGet);
if (response.getStatusLine().getStatusCode() == 200) {
return EntityUtils.toString(response.getEntity(), "UTF-8");
}
} finally {
if (response != null) {
response.close();
}
httpclient.close();
}
return null;
}
}
然后就是出了文章开头报的错误。
在后续的编程过程中,我发现将item中的cid改为Integer,可以解决这个报错。
但是通过后台新增的数据,查询就会报错,报的错为
与之前报的错(文章第一张图中的报错)刚好相反。但是将Item类中的cid改为Long型,那么查询新增数据(自己添加的数据)就没问题,查询导入的数据则报文章开头帖子中的错。
这样,我的分析是导入的数据可能存在问题,是否是导入过程中将本来为long型的cid转为了Integer类型?
但是我确实不知道在哪个地方出错了,麻烦懂的大神帮忙给看看,并告之我详情,十分之感谢~需要什么地方的代码请跟我说,谢谢