我们使用了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
时,拼写检查正常(但没有整理)并且没有出现错误。
答案 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
这样,仅返回归类查询。我不需要点击和拼写错误的建议。