10

現在、Apache Solr 検索をプラットフォームに統合し、オートコンプリートに Suggester 機能を使用しています。ただし、Suggester モジュールはスペル候補も返さないため、たとえば次のように検索すると:

shi

Suggester モジュールは、とりわけ以下を返します。

shirt
shirts

ただし、検索すると:

shrt

提案は返されません。私が知りたいのは:

a) これは Suggester モジュールの不適切な構成ですか? b) Suggester モジュールは、スペル候補を返さないように構築されていますか? c) スペル修正候補の 2 回目の要求を行わなくても、Suggester モジュールがスペル候補も返すようにするにはどうすればよいですか?

私は Solr のドキュメントを読みましたが、これで前進しているようには見えません。

4

1 に答える 1

10

https://lucene.apache.org/solr/guide/8_1/spell-checking.htmlで説明されているように、代替のスペルオプションを生成するようにスペルチェックコンポーネントを構成する必要があります。

このタスクは、次の手順で構成されています。

まず、schema.xmlスペルチェックフィールドでを更新します。これは多くの場合、新しいフィールドを作成し、複数のフィールドを1つのspellcheckフィールドにコピーすることを意味します。

<field name="spellcheck" type="text_general" 
   indexed="true" 
   stored="false" 
   multiValued="true"/>

<copyField source="id" dest="spellcheck"/>
<copyField source="name" dest="spellcheck"/>
<copyField source="description" dest="spellcheck"/>
<copyField source="longdescription" dest="spellcheck"/>
<copyField source="category" dest="spellcheck"/>
<copyField source="source" dest="spellcheck"/>
<copyField source="merchant" dest="spellcheck"/>
<copyField source="contact" dest="spellcheck"/>

solrconfig.xmlリクエストハンドラを更新し、を作成しsolr.SpellCheckComponentて検索ハンドラに追加します。

    <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
      <lst name="spellchecker">
        <!-- decide between dictionary based vs index based spelling suggestions, 
        in most cases it makes sense to use index based spell checker
        as it only generates terms which are 
        actually present in your search corpus -->
        <str name="classname">solr.IndexBasedSpellChecker</str>
        <!-- field to use -->
        <str name="field">spellcheck</str>
        <!-- buildOnCommit|buildOnOptimize -->
        <str name="buildOnCommit">true</str>
        <!-- $solr.solr.home/data/spellchecker-->
        <str name="spellcheckIndexDir">./spellchecker</str>
        <str name="accuracy">0.7</str>
        <float name="thresholdTokenFrequency">.0001</float>
      </lst>
    </searchComponent>

    <requestHandler name="/select" class="solr.SearchHandler">
      <lst name="defaults">
        <str name="echoParams">explicit</str>
        <int name="rows">10</int>
        <str name="df">defaultSearchField</str>
        <!-- spell check component configuration -->
        <str name="spellcheck">true</str>
        <str name="spellcheck.count">5</str>
        <str name="spellcheck.collate">true</str>
        <str name="spellcheck.maxCollationTries">5</str>
      </lst>
      <!-- add spell check processing after 
        the default search component. This is 
        the search component name. -->
      <arr name="last-components">
        <str>spellcheck</str>
      </arr>
    </requestHandler>
  • コーパスのインデックスを再作成

  • テストの提案が機能しています。例えば、

http:// localhost:8983 / solr / select /?q = Coachin

{
  "responseHeader": {
    "status": 0,
    "QTime": 12,
    "params": {
      "indent": "true",
      "q": "coachin"
    }
  },
  "response": {
    "numFound": 0,
    "start": 0,
    "docs": []
  },
  "spellcheck": {
    "suggestions": [
      "coachin", {
        "numFound": 1,
        "startOffset": 0,
        "endOffset": 7,
        "suggestion": ["cochin"]
      }
    ]
  }
}
于 2012-06-15T08:57:26.397 に答える