SolrJ不返回任何文档,其中浏览器中的URL返回Data

时间:2015-02-27 20:15:20

标签: solrj

我使用Solr索引了大量文档(通过从DB读取数据),管理控制台正确显示了文档数。

当我使用以下网址查询这些文档时,我会收到结果。

`http://localhost:8983/solr/objects/select?q=(OBJ_ID:20110259365%20OR%20OBJ_ID:20110259364)&wt=json&indent=true

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>

由于

2 个答案:

答案 0 :(得分:1)

我认为你在这里得到了一些语法错误,Solr需要一个查询参数q=*:* or any queryaddFilterQuery()添加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。