2

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>

それが役に立てば幸い !!

4

1 に答える 1

1

最近、スペルチェッカーのインデックスを再構築していないようですね。クエリ文字列にを追加してクエリを作成し、手動更新をリクエストしspellcheck=true&spellcheck.build=trueます (ビルド プロセスには時間がかかる可能性があるため、リクエストごとにこれを行わないでください)。また、スペルチェッカーのインデックスを作成するために正しいフィールドを使用していることを確認する必要があります。

以下を追加することで、すべてのコミットまたはすべての optimizeでインデックスを再構築するようにスペルチェッカー コンポーネントを構成することもできます。

<str name="buildOnCommit">true</str>

また

<str name="buildOnOptimize">true</str>

スペルチェッカーの設定に。

于 2012-12-12T10:01:19.490 に答える