如何使用Solrj获取SolceDocument的Lucene解释?

Tim*_*imo 5 java lucene solr solrj

我正在使用SolrJ搜索Solr索引,并试图获取Lucene的解释,以便将其记录下来以供进一步使用.

代码如下:

    SolrServer server = new CommonsHttpSolrServer("solr_url");
    SolrQuery solrquery = new SolrQuery();
    solrquery.set("fl", "score, id"); // id is a String field
    solrquery.set("rows", "1000");
    solrquery.set("debugQuery", "on");
    solrquery.setQuery("query words here");

    try {
        QueryResponse response = server.query(solrquery);
        SolrDocumentList docs = response.getResults();
        Iterator<SolrDocument> dociterator = docs.iterator();

        while (dociterator.hasNext())
        {
            SolrDocument doc = dociterator.next();
            String id = (String) doc.getFirstValue(idfield);
            Float relevance = (Float) doc.getFirstValue("score");
            String explanation = ???;
        }
    } catch (SolrServerException e) {
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

我认为response.getEplainMap()将包含一个值为response.getEplainMap().get(id)的映射,但似乎explainmap只包含带有最后找到的文档值的键null.

任何想法如何得到正确的解释?

Tim*_*imo 6

就我而言,Solr索引本身存在一个错误.以下代码现在有效.

Map<String, String> explainmap = response.getExplainMap();
String explanation = explainmap.get(id);
Run Code Online (Sandbox Code Playgroud)

创建索引并遇到上述问题时,请确保schema.xml(例如<uniqueKey>id</uniqueKey>)中确定的id字段包含正确的数据.在我的例子中,我在代码中使用的id字段与Solr认为的不同,并且它不包含任何数据,因此explainmap只有一个字段,其中键为null.