2015-11-24 93 views
0

我們正在嘗試在SOLR中設置多語言拼寫檢查選項,並剛剛完成基本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

回答

0

回答我的問題的解決方案,以便它可以幫助誰正在尋找一個類似的選項othes。 除了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的更新的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_ *字段,將它們絲拼寫檢查字典,你基於語言有任何建議。

有我測試過,但下面應該在大多數情況下是足夠的幾個來源: http://lucidworks.com/blog/2010/08/31/getting-started-spell-checking-with-apache-lucene-and-solr/