我们使用了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();
    }

似乎无法从字符串将其从Spellcheck条目解析为namedList

PS。当我们删除spellcheck.collate=true时,拼写检查工作正常(但没有整理),并且没有强制转换错误。

最佳答案

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

首先,我认为您可能想使用SolrQueryset()方法,但是我不确定100%是否可以在您的SolrJ版本中使用它。例如,这是我设置拼写检查器查询的方式:

        // Set the spellcheck
        solrQuery.set("spellcheck", Boolean.TRUE);

        // Set the spellcheck_q parameter
        solrQuery.set(SpellingParams.SPELLCHECK_Q, searchTerm);

如果set()方法不可用,那么我现在就不用太担心了。

其次,当您设置spellcheck属性时,您想使用true而不是“on”。

如果以上方法均无济于事,请从solrconfig.xml发布您的拼写检查器配置,我可能会提供更多帮助。

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

07-27 23:37