2012-02-29 90 views
7

我使用Solr的我的应用程序,我整合了拼写检查组件,但我有一些问题:Solr的你的意思(拼写检查组件)

第一: 当我键入用空格隔开的一个术语,他们给我的修正每学期

如:“笏TER值” =>“什么术语”但真正是沃特斯

二: 当我输入所以我有一些错误的词语。尽管其他条款是正确的,但他们适用于所有条款的咒语。

例如: “Difreenceslankuage使用约定” => “语言使用转换差异”。

真正是

“在语言的使用规范的区别” 这是我在solrconfig.xml中配置:

<searchComponent name="spellcheck" class="solr.SpellCheckComponent"> 
      <str name="queryAnalyzerFieldType">textSpell</str> 
      <lst name="spellchecker"> 
       <str name="name">default</str> 
       <str name="field">spell</str> 
       <str name="spellcheckIndexDir">spellchecker</str> 
      </lst> 
</searchComponent> 

<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy"> 
      <lst name="defaults"> 
       <str name="spellcheck.onlyMorePopular">true</str> 
       <str name="spellcheck.extendedResults">false</str> 
       <str name="spellcheck.count">1</str> 
      </lst> 
      <arr name="last-components"> 
       <str>spellcheck</str> 
      </arr> 
</requestHandler> 

Schema.xml的:

字段类型:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
       <tokenizer class="solr.StandardTokenizerFactory"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="1"/> 
       <filter class="solr.ASCIIFoldingFilterFactory" /> 
       <filter class="solr.SnowballPorterFilterFactory" language="English"/> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
      </analyzer> 
      <analyzer type="query"> 
       <tokenizer class="solr.StandardTokenizerFactory"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> 
       <filter class="solr.ASCIIFoldingFilterFactory" /> 
       <filter class="solr.SnowballPorterFilterFactory" language="English"/> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
      </analyzer> 
      <analyzer type="multiterm" > 
       <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
       <filter class="solr.ASCIIFoldingFilterFactory" /> 
      </analyzer> 
     </fieldType> 


    <fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" omitNorms="true"> 
       <analyzer type="index"> 
        <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
        <filter class="solr.LowerCaseFilterFactory"/> 
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
        <filter class="solr.StandardFilterFactory"/> 
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
       </analyzer> 
       <analyzer type="query"> 
        <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
        <filter class="solr.LowerCaseFilterFactory"/> 
        <!--<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>--> 
        <filter class="solr.StandardFilterFactory"/> 
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
       </analyzer> 
      </fieldType> 

领域:

<field name="title" type="text" indexed="true" stored="true" termVectors="true"/> 
<field name="spell" type="textSpell" indexed="true" stored="true" multiValued="true"/> 

复制场

<copyField source="title" dest="spell"/> 

我会感激你的帮助

干杯

+0

不错的问题...你有任何教程,你用来了解更多关于lucene ...其他然后从Solr页的官方文档? Ty – 2013-08-26 12:13:01

+0

@Sebastian: **基本教程:** [Solr in 5 minutes](http://www.solrtutorial.com/solr-in-5-minutes.html), [Apache Lucene快速入门导(http://www.ibm.com/developerworks/opensource/tutorials/os-apachelucene/)。 **高级教程:** [Dzone Solr教程](http://www.dzone.com/links/search.html?query=solr+lucene&x=-1335&y=-4)。 **示例:** [Drupal for Drupal](https://drupal.org/project/apachesolr), [Apache Solr for WordPress](http://wordpress.org/plugins/solr- for-wordpress /), [Solr Php Manual](http://php.net/manual/fr/book.solr.php)。 祝你好运,我希望它有帮助;) – ZendMind 2013-09-11 11:06:23

+0

**书籍:** [Lucene和Solr:权威指南](http://www.amazon.com/Lucene-Solr-Definitive-comprehensive-realtime/dp/1449359957/ref = sr_1_3?s = books&ie = UTF8&qid = 1378896499&sr = 1-3&keywords = solr), [Apache Solr 4 Cookbook](http://www.amazon.com/Apache-Solr-Cookbook-Rafal-Kuc/ DP/1782161325/REF = sr_1_1?S =书籍&即= UTF8&QID = 1378896499&SR = 1-1&关键字= SOLR)是。 – ZendMind 2013-09-11 11:06:57

回答

1

关于第一个问题,你可以使用WordBreakSpellChecker

至于你的第二个问题你可以设置<str name="spellcheck.onlyMorePopular">true</str><str name="spellcheck.onlyMorePopular">false</str>,看看这是否有预期的结果。

+0

嗨克莱因,你的回应,我正在使用appach-solr3.5与php进行交互。你能告诉我如何使用这个补丁?欢呼声 – ZendMind 2012-03-01 12:30:13

+0

WordBreakSpellChecker是appach-solr3.5中的标准吗? – ZendMind 2012-03-01 12:43:04

+0

这不是标准。您需要将其应用于源代码并构建新的jar/war。 – 2012-03-01 13:09:01