我使用Solr索引了大量文档(通过从DB读取数据),管理控制台正确显示了文档数。
当我使用以下网址查询这些文档时,我会收到结果。
http://localhost:8983/solr/objects/select?q=(OBJ_ID:20110259365)&wt=json&indent=true`
当我尝试使用java程序获取文档时,它不会返回任何文档。不确定我做错了什么。
这是我的Java代码。
HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/objects");
Map<String,String> docsMap = new HashMap<String,String>();
org.apache.solr.client.solrj.SolrQuery query = new org.apache.solr.client.solrj.SolrQuery();
//query.setStart(0);
query.addFilterQuery("(OBJ_ID:20110259364)");
try{
logger.info("Query=["+query+"]");
QueryResponse response = solrServer.query(query);
SolrDocumentList docList = response.getResults();
SolrDocument doc =null;
Iterator<SolrDocument> docIter = docList.iterator();
logger.info("docList Size=["+docList.size()+"]");
if(docList!=null && docList.size()>0){
while(docIter.hasNext()){
doc = docIter.next();
docsMap.put(doc.getFieldValue("OBJ_ID").toString(),doc.toString());
}
}
catch(Exception e){
e.printStackTrace();
}
我使用的是Solr 5.0.0版。
在我的pom.xml中,我有以下依赖。
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>5.0.0</version>
</dependency>
由于
答案 0 :(得分:1)
我认为你在这里得到了一些语法错误,Solr需要一个查询参数q=*:* or any query
但addFilterQuery()
添加fq=*:*
,根据你的查询我发布了这个代码。希望这会帮助你。
HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/objects");
Map<String, String> docsMap = new HashMap<String, String>();
SolrQuery query = new SolrQuery();
query.setQuery("OBJ_ID:20110259364");
query.setStart(0);
query.setRows(0);
try {
QueryResponse response = solrServer.query(query);
query.setRows((int) response.getResults().getNumFound());
response = solrServer.query(query);
SolrDocumentList docList = response.getResults();
for (SolrDocument doc : docList) {
docsMap.put(doc.getFieldValue("OBJ_ID").toString(), doc.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
答案 1 :(得分:1)
在Java代码中,您将生成以下查询(应在日志中显示):
选择FQ = OBJ_ID:20110259364
注意fq(过滤查询)而不是q。因为没有查询(q)参数,所以不会匹配任何文档,并且过滤器将在空列表上运行,结果返回一个空列表。
您想要做的是:
org.apache.solr.client.solrj.SolrQuery query = new org.apache.solr.client.solrj.SolrQuery("OBJ_ID:20110259364");
并省略了addFilterQuery。这将生成select?q = OBJ_ID:20110259364。