QueryResponse(SolrJ 5.0.0)将String的ClassCastException返回给NamedList,用于spellcheck.collat​​ion = true

时间:2015-11-03 11:32:21

标签: solr solrj

我们使用了Solr,我们希望使用SolrJ从Solr获得SpellCheck.collate

  SolrQuery query = new SolrQuery(q);
   query.add("spellcheck", "on");
   query.add(SpellingParams.SPELLCHECK_Q, q);
   query.add(SpellingParams.SPELLCHECK_COUNT, "5");
   query.add(SpellingParams.SPELLCHECK_ALTERNATIVE_TERM_COUNT, "2");
   query.add(SpellingParams.SPELLCHECK_MAX_RESULTS_FOR_SUGGEST, "5");
   query.add(SpellingParams.SPELLCHECK_COLLATE, "true");
   query.add(SpellingParams.SPELLCHECK_BUILD, "true");
   query.set(SpellingParams.SPELLCHECK_COLLATE_EXTENDED_RESULTS, true);
   query.set(SpellingParams.SPELLCHECK_MAX_COLLATIONS, 2);

当我们尝试使用Solr Admin GUI时,拼写检查和排序正确返回,但是当我们从QueryResponse对象调用查询时,它会返回错误

  

引起:java.lang.ClassCastException:java.lang.Boolean无法强制转换为org.apache.solr.common.util.NamedList

该摘录如下

QueryResponse rsp = new QueryResponse();
    try {
        rsp = server.query(query);
    }catch (Exception e) {
        e.printStackTrace();
    }

看起来它无法从拼写检查条目中的字符串解析为namedList

PS。当我们删除spellcheck.collate=true时,拼写检查正常(但没有整理)并且没有出现错误。

2 个答案:

答案 0 :(得分:0)

如果没有在solrconfig.xml中看到您的拼写检查配置,我将不得不在这里做一些有根据的猜测。

首先,我想您可能想要使用SolrQuery的{​​{1}}方法,但我不能100%确定您的SolrJ版本是否可以使用。例如,以下是我设置拼写检查器查询的方法:

set()

如果 // Set the spellcheck solrQuery.set("spellcheck", Boolean.TRUE); // Set the spellcheck_q parameter solrQuery.set(SpellingParams.SPELLCHECK_Q, searchTerm); 方法不可用,我现在不会太担心它。

其次,当您设置set()属性时,您希望使用spellcheck,而不是“开启”。

如果这些都没有帮助,请从true发布您的拼写检查配置,我可以提供更多帮助。

为了它的价值,我将您的代码复制粘贴到我当前的Solr(5.2.1)单元测试中,无法重现错误。

答案 1 :(得分:0)

我也遇到了类似的问题,我通过设置这些问题找到了解决方法

SpellingParams.SPELLCHECK_COLLATE_EXTENDED_RESULTS=false

这样,仅返回归类查询。我不需要点击和拼写错误的建议。