我在solr-user邮件列表上发布了这个,但是没有听到反馈,所以FBOW我尝试了。对不起,交叉发布。
问题
Solr'建议/拼写检查'组件在用户执行搜索时抛出NullPointerException(NPE)。它在FSTCompletionLookup上失败(第244行)
更新 这是配置错误。
在我的急速/粗心大意中,而不是定义单独的"拼写检查"并且"建议"组件,我只定义"建议"。 (更具体地说,我复制了" solr in action"中的ch10示例,但没有复制"拼写检查"组件。")
当solr抱怨没有找到'拼写检查'组件,我查看了我的(坏)solrconfig.xml并想到了"嗯。 '拼写检查...组件可能应该建议'"。它在重新索引之后起作用..并且似乎正常运行。
打开硬拷贝,坐在安乐椅上,仔细查看章节,引起了我的注意。
问题
上下文
字典详情
The Suggester使用目前开放的搜索者'建立它的字典。这可能解释了上面的“不一致”[在重新启动后搜索给出NPE,长时间运行的实例成功]
reader = searcher.getIndexReader();
dictionary = new HighFrequencyDictionary(reader, field, threshold);
请求处理程序配置
<str name="spellcheck">on</str>
<str name="spellcheck.dictionary">suggestDictionary</str>
<str name="spellcheck.extendedResults">false</str>
<str name="spellcheck.count">5</str>
<str name="spellcheck.alternativeTermCount">2</str>
<str name="spellcheck.maxResultsForSuggest">5</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.collateExtendedResults">true</str>
<str name="spellcheck.maxCollationTries">5</str>
<str name="spellcheck.maxCollations">3</str>
拼写检查组件
<searchComponent class="solr.SpellCheckComponent" name="suggest">
<lst name="spellchecker">
<str name="name">suggestDictionary</str>
<str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
<str name="lookupImpl">org.apache.solr.spelling.suggest.fst.FSTLookupFactory</str>
<str name="field">title</str>
<!-- <str name="field">suggest</str> -->
<float name="threshold">0.</float>
<str name="buildOnCommit">true</str>
</lst>
</searchComponent>
字段类型定义
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<!-- Use EdgeNGramFilter for wildcard search -->
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
字段定义
提前致谢
答案 0 :(得分:0)
我还有一个与FSTCompletionLookup建议组件的NPE问题,不记得MPE原因的确切行号,我想通过(我的配置和solr使用FSTCompletionLookup的自定义实现)这是因为FSTCompletionLookup建议字典在启动时没有创建,但在启动后重新加载核心后可以使用它。
{solr-version}:4.7.x +
我在启动时添加了以下配置构建建议,希望这有帮助
<query>
<listener event="firstSearcher" class="solr.QuerySenderListener">
<arr name="queries">
<lst> <str name="qt">/suggest</str>
<str name="spellcheck.build">true</str>
</lst>
</arr>
</listener>
</query>