我们使用了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
中看不到您的拼写检查器配置,我将不得不在这里进行一些有根据的猜测。
首先,我认为您可能想使用SolrQuery
的set()
方法,但是我不确定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)单元测试中,无法重现该错误。