SolrSpellCheckを使用しています。起動して実行しています。ただし、特定のスペルミスについては、期待した結果が得られません。
正しい言葉:がん
間違ったスペル:Cacner、cacnar、cancar、cancre、cancere。
私は「cacnar」の提案として「cancer」を取得していません。代わりに、「inner」を示しています。これは、cacnerのように聞こえますが、正しい提案ではありません。そして、再びcacnarについては、「肺」としての提案を受けています。
他の結果の代わりに癌を表示するように構成する方法はありますか?
または、ユーザーに表示する前に参照できる提案のスコアはありますか?
リクエストに応じて、構成は次のとおりです。辞書に使用されるフィールド(schema.xml内):
<copyField source="procname" dest="dtextspell" />
<field name = "dtextspell" stored="false" type="text_small" multiValued="true" indexed="true"/>
「text_small」の定義(これもschema.xmlにあります):
<fieldType name="text_small" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StandardFilterFactory"/>
</analyzer>
<analyzer type ="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StandardFilterFactory"/>
</analyzer>
</fieldType>
solrconfig.xmlの場合:
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<str name="queryAnalyzerFieldType">text_small</str>
<lst name="spellchecker">
<str name="name">default</str>
<str name="classname">solr.IndexBasedSpellChecker</str>
<str name="field">dtextspell</str>
<float name="thresholdTokenFrequency">.0001</float>
<str name="spellcheckIndexDir">./spellchecker</str>
<str name="field">name</str>
<str name="buildOnCommit">true</str>
</lst></searchComponent>
次のようにselectリクエストハンドラーにアタッチしました:
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="spellcheck.count">10</str>
<str name="df">text</str>
</lst>
<arr name="last-components">
<str>spellcheck</str>
</arr> </requestHandler>
スペルチェックを作成するには:
http://localhost:8080/solr/select?q=*:*&spellcheck=true&spellcheck.build=true
用語を検索するには:
http://localhost:8080/solr/select?q=procname:%22cacner%22&spellcheck=true&defType=edismax
応答XML:
<lst name="spellcheck"><lst name="suggestions">
<lst name="cacner">
<int name="numFound">1</int>
<int name="startOffset">10</int>
<int name="endOffset">16</int>
<arr name="suggestion">
<str>inner</str> <end tags start from here>
それが役に立てば幸い !!