你是说Solr(拼写检查组件)

你是说Solr(拼写检查组件),solr,autocorrect,spell-checking,Solr,Autocorrect,Spell Checking,我在应用程序中使用solr,并集成了拼写检查组件,但我遇到了一些问题: 第一: 当我输入一个用空格分隔的术语时,它们会给我每个术语的更正 例如:“watters”=>“什么术语”,但真正的含义是watters 第二: 当我用一些错误的术语键入一些短语时。尽管其他术语是正确的,但它们对所有术语都应用了拼写 例如:“语言中的差异使用约定” =>“语言使用的差异转换” 真正的问题是“语言使用习惯的差异” 这是我在solrconfig.xml中的配置: <searchComponent name=

我在应用程序中使用solr,并集成了拼写检查组件,但我遇到了一些问题:

第一: 当我输入一个用空格分隔的术语时,它们会给我每个术语的更正

例如:“watters”=>“什么术语”,但真正的含义是watters

第二: 当我用一些错误的术语键入一些短语时。尽管其他术语是正确的,但它们对所有术语都应用了拼写

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

真正的问题是“语言使用习惯的差异”

这是我在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>

文字拼写
违约
拼写
拼写检查器
真的
假的
1.
拼写检查
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"/>

谢谢你的帮助


为您可以使用的第一个问题干杯


至于你的第二个问题,你可以将
true
设置为
false
,看看这是否达到了预期的效果。

嗨,克莱恩,谢谢你的回答,我使用appach-solr3.5与php交互。你能告诉我如何使用这个补丁吗?CheersIs WordBreakSpellChecker在appach-solr3.5中是标准的?它不是标准的。您需要将其应用于源代码并构建新的jar/war.Hi,我是windows平台上的php程序员,所以java开发对我来说是新的。你能告诉我如何在ApachSolr上构建新的jar/war吗?搜索后,我找到了spellCheckComponent.class文件,但那里有ise spellCheckComponent.java文件。我打开了/dist pathNice上存在的apache-solr-3.5.0.war问题……除了官方文档之外,你有没有其他教程可以用来了解lucene的更多信息索尔·佩奇?Ty@Sebastian:基础教程:。高级教程:。例如:。祝你好运,希望能有所帮助;)书籍:。