使SOLR拼写检查案例不敏感但返回原始案例

Tek*_*mmy 6 java search solr spell-checking case-insensitive

我正在使用SOLR 4.10实现搜索服务,并希望根据已指定的术语提供搜索建议.今天搜索应用程序的标准功能......

我想要的是SOLR搜索不区分大小写的建议但是返回原始的大小写字符串,这似乎是不可能的...搜索:abc return:AbCdEfG

当我使用"LowerCaseFilterFactory"时,搜索不区分大小写,但返回的建议都是小写的.当我删除它时,返回的建议是原始的但搜索不是不区分大小写的.... = /

我将此请求处理程序和搜索组件添加到我的solrconfig.xml:

<requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler">
    <lst name="defaults">
        <str name="echoParams">none</str>
        <str name="wt">json</str>
        <str name="indent">false</str>
        <str name="spellcheck">true</str>
        <str name="spellcheck.dictionary">_all</str>
        <str name="spellcheck.onlyMorePopular">false</str>
        <str name="spellcheck.count">20</str>
        <str name="spellcheck.collate">false</str>
    </lst>
    <arr name="components">
        <str>suggest</str>
    </arr>
</requestHandler>

<searchComponent name="suggest" class="solr.SpellCheckComponent" >
    <lst name="spellchecker">
        <str name="name">_all</str>
        <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
        <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.FSTLookupFactory</str>
        <str name="field">_all</str>
        <float name="threshold">0.</float>
        <str name="buildOnCommit">true</str>
    </lst>
Run Code Online (Sandbox Code Playgroud)

我将它添加到我的schema.xml中

<fields>
    <field name="_all" type="string" indexed="true" stored="false" multiValued="true" omitNorms="true" />
</fields>
<types>
    <fieldType name="string" class="solr.TextField">
        <analyzer>
            <tokenizer class="solr.KeywordTokenizerFactory" />
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.TrimFilterFactory" />
        </analyzer>
    </fieldType>
</types>
Run Code Online (Sandbox Code Playgroud)

Nat*_*nch 0

我认为,如果您在想要返回原始值并重新索引的字段上将“stored”属性设置为 true,那么它将解决您的问题。

如果字段上的索引属性设置为 true,Solr 仅将从文档分析中获取的标记存储在其索引中。因此,您的 Solr 索引仅包含从文档中获取的不区分大小写的标记。如果 storage 也设置为 true,那么它将原始术语存储在它创建的索引中的某个位置,以便在搜索时返回它。

有关索引与存储的更多信息可以在这里找到: 链接