我已经开始使用solr6来升级我当前的服务器版本。
我尝试在here上运行代码,但是当我运行代码时,我得到了:
java.sql.SQLException: java.lang.RuntimeException: First tuple is not a metadata tuple
at org.apache.solr.client.solrj.io.sql.StatementImpl.executeQuery(StatementImpl.java:70)
at com.sematext.blog.App.main(App.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: java.lang.RuntimeException: First tuple is not a metadata tuple
at org.apache.solr.client.solrj.io.sql.ResultSetImpl.<init>(ResultSetImpl.java:75)
at org.apache.solr.client.solrj.io.sql.StatementImpl.executeQuery(StatementImpl.java:67)
... 6 more
我的代码是
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class App
{
public static void main( String[] args )
{
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try{
String connectionString = "jdbc:solr://zkhost:port?collection=test&aggregationMode=map_reduce&numWorkers=1";
connection = DriverManager.getConnection(connectionString);
statement = connection.createStatement();
resultSet = statement.executeQuery("select id, text from test limit 5");
while(resultSet.next()){
String id = resultSet.getString("id");
String nickname = resultSet.getString("text");
System.out.println(id + " : " + nickname);
}
}catch(Exception e){
e.printStackTrace();
}finally{
if (resultSet != null) {
try {
resultSet.close();
} catch (Exception ex) {
}
}
if (statement != null) {
try {
statement.close();
} catch (Exception ex) {
}
}
if (connection != null) {
try {
connection.close();
} catch (Exception ex) {
}
}
}
}
}
我试图弄清楚发生了什么,但除了上面的那个之外,没有更多的日志了。在Solr方面,日志似乎没问题:
2016-05-04 15:52:30.364 INFO (qtp1634198-41) [c:test s:shard1 r:core_node1 x:test] o.a.s.c.S.Request [test] webapp=/solr path=/sql params={includeMetadata=true&numWorkers=1&wt=json&version=2.2&stmt=select+id,+text+from+test+limit+5&aggregationMode=map_reduce} status=0 QTime=3
2016-05-04 15:52:30.382 INFO (qtp1634198-46) [c:test s:shard1 r:core_node1 x:test] o.a.s.c.S.Request [test] webapp=/solr path=/select params={q=(*:*)&distrib=false&fl=id,text,score&sort=score+desc&rows=5&wt=json&version=2.2} hits=5624 status=0 QTime=1
抛出异常的相关部分是: org.apache.solr.client.solrj.io.sql.ResultSetImpl
Object isMetadata = this.metadataTuple.get("isMetadata");
if(isMetadata == null || !isMetadata.equals(true)) {
throw new RuntimeException("First tuple is not a metadata tuple");
}
使用classpath:
solr-solrj-6.0.0
commons-io-2.4
httpclient-4.4.1
httpcore-4.4.1
httpmime-4.4.1
zookeeper-3.4.6
stax2-api-3.1.4
woodstox-core-asl-4.4.1
noggit-0.6
jcl-over-slf4j-1.7.7
slf4j-api-1.7.7
错误发生的原因是代码上的错误处理程序丢失或查询缺少参数(从solr日志中怀疑“includeMetadata = true”部分,当我卷曲时它不存在)?在使用sql和solrj时,任何人都有类似的问题吗?
答案 0 :(得分:0)
基本上问题似乎是前6版Solr的配置和格式之间存在差异。
在挖掘了一段时间后,在邮件组中的人员的帮助下,我尝试了一个完全干净的安装,并手动更改配置,而不是直接从以前版本的conf文件夹中复制。