我试图找到一种方法来进行两组拼写检查。
一种处理文档中常见单词的拼写检查查询。另一个负责对诸如作者姓名之类的项目进行拼写检查,这些项目可以是多个单词。我希望它能够正常工作,这样即使他们离作者的名字很近,它也会显示建议;但是对于拼写错误的建议将要求单词距离更近。
现在我有一个用于拼写的包罗万象的字段,但它做了很多标记,这会破坏短语;所以我不能真正将它用于短语匹配。
这是拼写检查组件:
<searchComponent name="spellcheck" class="solr.SpellCheckComponent" startup="lazy">
<!-- <str name="queryAnalyzerFieldType">textSpell</str> -->
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">spell</str>
<str name="classname">solr.DirectSolrSpellChecker</str>
<str name="distanceMeasure">internal</str>
<float name="accuracy">0.65</float>
<int name="minPrefix">0</int>
<int name="maxEdits">1</int>
<int name="maxInspections">5</int>
<int name="minQueryLength">3</int>
<float name="maxQueryFrequency">0.0005</float>
<float name="thresholdTokenFrequency">.001</float>
<str name="buildOnCommit">true</str>
</lst>
<!-- a spellchecker that can break or combine words. See "/spell" handler below for usage -->
<lst name="spellchecker">
<str name="name">wordbreak</str>
<str name="classname">solr.WordBreakSolrSpellChecker</str>
<str name="field">spell</str>
<str name="combineWords">true</str>
<str name="breakWords">true</str>
<int name="maxChanges">1</int>
<str name="buildOnCommit">true</str>
</lst>
</searchComponent>
以及实际的拼写字段:
<fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" >
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
<field name="spell" type="textSpell" indexed="true" stored="true" multiValued="true"/>