スペル チェックを 2 セット行う方法を探しています。
ドキュメントで見つかった一般的な単語のスペルチェック クエリを処理するもの。もう 1 つは、複数の単語が含まれる可能性がある著者名などの項目のクエリのスペルチェックを処理します。著者の名前に少しでも近づいた場合でも、提案が表示されるように動作するようにしたいと思います。ただし、スペルミスの提案には、単語の距離を近づける必要があります。
現在、スペリング用の包括的なフィールドがありますが、多くのトークン化が行われるため、フレーズが分割されます。ですから、それをそのままフレーズ一致に使用することはできません。
スペル チェック コンポーネントは次のとおりです。
<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"/>