2011-08-18 105 views
2

我試圖配置一個拼寫檢查器,以便從我的查詢中自動填充完整的句子。SolR:全句拼寫檢查

我已經能夠得到這樣的結果:

"american israel" :
-> "american something"
-> "israel something"

但我想:

"american israel" :
-> "american israel something"

這是我的solrconfig.xml中:

<searchComponent name="suggest_full" class="solr.SpellCheckComponent"> 
<str name="queryAnalyzerFieldType">suggestTextFull</str> 
<lst name="spellchecker"> 
    <str name="name">suggest_full</str> 
    <str name="classname">org.apache.solr.spelling.suggest.Suggester</str> 
    <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str> 
    <str name="field">text_suggest_full</str> 
    <str name="fieldType">suggestTextFull</str> 
</lst> 
</searchComponent> 

<requestHandler name="/suggest_full" class="org.apache.solr.handler.component.SearchHandler"> 
<lst name="defaults"> 
<str name="echoParams">explicit</str> 
<str name="spellcheck">true</str> 
<str name="spellcheck.dictionary">suggest_full</str> 
<str name="spellcheck.count">10</str> 
<str name="spellcheck.onlyMorePopular">true</str> 
</lst> 
<arr name="last-components"> 
<str>suggest_full</str> 
</arr> 
</requestHandler> 

這是我的schema.xml:

<fieldType name="suggestTextFull" class="solr.TextField"> 
    <analyzer type="index"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

... 

<field name="text_suggest_full" type="suggestTextFull" indexed="true" stored="false" multiValued="true"/> 

我讀的地方,我必須使用spellcheck.q因爲●使用WhitespaceAnalyzer,但是當我使用spellcheck.q我得到一個顯示java.lang.NullPointerException

任何想法?

回答

1

如果您拼寫檢查域(text_suggest_full)包含american somethingisrael something所以一定要確保,這也存在一個文件/項,用價值american israel something

Solr不會將american somethingisrael something合併爲一個字詞,並且不會將結果應用於您的拼寫檢查american israel

+0

當然,我在我的一份文件中有「美國以色列的東西」。這不是問題。 – Valentin

0

有沒有一種自動完成的方法更適合?參見this文章,例如

+0

我已經完成了一個像這樣的自動完成功能(實際上,我用這篇文章來做),但我現在真正想要的是將完整的句子與完整的查詢進行匹配。 – Valentin

0

您可以使用建議器/靈活的「自動完成」組件; 您必須Solr的版本3.X

solrconfig.xml中:

<searchComponent name="suggest" class="solr.SpellCheckComponent"> 
    <lst name="spellchecker"> 
    <str name="name">suggest</str> 
    <str name="classname">org.apache.solr.spelling.suggest.Suggester</str> 
    <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str> 
    <str name="field">name_autocomplete</str> 
    </lst> 
    </searchComponent> 


    <requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler"> 
    <lst name="defaults"> 
    <str name="spellcheck">true</str> 
    <str name="spellcheck.dictionary">suggest</str> 
    <str name="spellcheck.count">10</str> 
    </lst> 
    <arr name="components"> 
    <str>suggest</str> 
    </arr> 
    </requestHandler> 

Shema.xml

<field name="name_autocomplete" type="text" indexed="true" stored="true" multiValued="false" /> 

添加copyField

<copyField source="name" dest="name_autocomplete" /> 

刷新Solr的,重新編制所有和測試: http://localhost:8983/solr/suggest?q=&amerspellcheck=true&spellcheck.collate=true&spellcheck.build=true

得到的東西,如:

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <lst name="spellcheck"> 
    <lst name="suggestions"> 
     <lst name="ameri"> 
     <int name="numFound">2</int> 
     <int name="startOffset">0</int> 
     <int name="endOffset">2</int> 
     <arr name="suggestion"> 
      <str>american morocco</str> 
      <str>american morocco something</str> 
     </arr> 
     </lst> 
     <str name="collation">american morocco something</str> 
    </lst> 
    </lst> 
</response> 

希望能夠幫助

乾杯

0

恕我直言,與拼寫檢查問題組件是每個單詞拼寫檢查完全索引。 拼寫檢查單詞的「排序規則」不必與索引內的單個文檔匹配,但可能來自單獨的索引文檔。