【问题标题】:Multilingual SOLR Spellcheck Setup多语言 SOLR 拼写检查设置
【发布时间】:2015-11-24 14:07:03
【问题描述】:

我们正在尝试在 SOLR 中设置多语言拼写检查选项,并且刚刚完成了基本 SOLR 环境的设置。

我们正在使用“拼写”字段进行拼写检查。

<lst name="spellchecker"> 
 <str name="name">default</str> 
 **<str name="field">spell</str>**
 --Rest are not specified - solrdefaults to IndexBasedSpellChecker --
</lst>

现有语言字段 LANGUAGE_STRING 已被索引和存储。(目前不需要语言检测。)

在导入/更新内容时,我是否可以使用此字段来构建下面的附加 spell_* 字段?

<requestHandler name="/select" class="solr.SearchHandler" lazy="true">
  <lst name="defaults">
    <str name="echoParams">explicit</str>
    <int name="rows">10</int>
    <str name="spellcheck.dictionary">default</str>
    **<str name="spellcheck.dictionary">spell_en</str>**
    **<str name="spellcheck.dictionary">spell_de</str>**
    <str name="spellcheck.count">1</str>
  </lst>
  <arr name="last-components">
    <str>spellcheck</str>
  </arr>
</requestHandler>

我计划按照http://pavelbogomolenko.github.io/multi-language-handling-in-solr.html 中的建议使用单核方法,按文档语言字段进行语言分离

【问题讨论】:

    标签: apache solr spell-checking


    【解决方案1】:

    还有另一个选项,SOLR Suggester 选项,它是专门为建议构建的,作为拼写检查组件的替代方案。

    solr 附带的 techproducts 示例包含拼写建议器组件的示例配置。

    https://cwiki.apache.org/confluence/display/solr/Suggester http://lucidworks.com/blog/2015/03/04/solr-suggester/

    【讨论】:

      【解决方案2】:

      回答我的问题的解决方案,以便帮助正在寻找类似选项的其他人。 除了 Solr Suggester 替代方案之外,构建多语言拼写字典的解决方案是使用脚本更新处理器并使用 update.chain 将其附加到 /update 处理程序。

      <updateRequestProcessorChain name="script">
        <processor class="solr.StatelessScriptUpdateProcessorFactory">
          <str name="script">update-script.js</str>
          <lst name="params">
            <str name="config_param">Spell_Field</str>
          </lst>
        </processor> ...
      

      javascript update-script.js 文件如下:

      function processAdd(cmd) {
        var doc = cmd.solrDoc;  // org.apache.solr.common.SolrInputDocument
        var locale = doc.getFieldValue("locale");
        logger.info("update-script#processAdd: site=" + site);
      
        if(site){
         var lang_str = site.substring(0,2);
         logger.info("update-script#processAdd: language=" + lang_str);
      
        if(lang_str){      
           var spellField = "";
           var slash=" / "; //Use the Standard Tokenizer Factory 
           var field_names = doc.getFieldNames().toArray();        
           for(i=0; i < field_names.length; i++) {
              field_name = field_names[i];
              if ( field_name) { spellField+=  doc.getFieldValue(field_name)+ slash;}
            }                
           doc.addField("spell_text_"+lang_str,spellField);   //Existing dynamic field definition(*_txt_en, *_txt_de, etc) in schema.xml per languauage tokenizes this.
           logger.info("update-script#processAdd: spell_text_"+lang_str+ ":" + spellField);
        }
       }  
      }
      
      function processDelete(cmd) {  // no-op }
      function processMergeIndexes(cmd) {  // no-op }
      function processCommit(cmd) {  // no-op }
      function processRollback(cmd) {  // no-op }
      function finish() {   // no-op }
      

      现在您可以使用这些 spell_txt_* 字段将它们连接到拼写检查器词典,并且您可以根据语言获得建议。

      我检查了几个来源,但以下对于大多数情况来说应该足够了: https://lucidworks.com/post/getting-started-spell-checking-with-apache-lucene-and-solr/

      【讨论】:

      猜你喜欢
      • 2013-09-09
      • 2015-02-26
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2019-09-19
      相关资源
      最近更新 更多