我们使用了 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 对象调用查询时,它返回错误
Caused by: java.lang.ClassCastException: java.lang.Boolean cannot be cast to org.apache.solr.common.util.NamedList
代码片段如下
QueryResponse rsp = new QueryResponse();
try {
rsp = server.query(query);
}catch (Exception e) {
e.printStackTrace();
}
它看起来无法从拼写检查条目中的字符串解析为 namedList
。
附言。当我们删除 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) 单元测试中,但无法重现错误。
关于solr - QueryResponse (SolrJ 5.0.0) 将 ClassCastException 从 String 返回到 NamedList for spellcheck.collation=true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33498056/