使用solr建议器搜索中间或后缀字符串?

时间:2016-03-08 06:21:24

标签: solr solrj

我正在使用solr 5.3
我的字符串是: - Anirudh,Ani,Aniket
当我输入“Ani”时,它确实给了我上面的所有字符串 但是当我键入“ket”时,它不会给出任何结果 预期: - “Aniket”。


solrconfig.xml中 的

<searchComponent name="suggest" class="solr.SuggestComponent">
        <lst name="suggester">
            <str name="name">mySuggester</str>
            <str name="lookupImpl">FreeTextLookupFactory</str>
            <str name="dictionaryImpl">DocumentDictionaryFactory</str>
            <str name="field">name</str>
            <!-- <str name="weightField">price</str> -->
            <str name="suggestAnalyzerFieldType">key_lower_case</str>
            <str name="buildOnStartup">false</str>
        </lst>
    </searchComponent>

    <requestHandler name="/suggest" class="solr.SearchHandler"
        startup="lazy">
        <lst name="defaults">
            <str name="suggest">true</str>
            <str name="suggest.count">10</str>
        </lst>
        <arr name="components">
            <str>suggest</str>
        </arr>
    </requestHandler>


Schema.xml的: -

<schema name='history' version='1.1'>
        <types>
                <fieldtype name='string' class='solr.StrField' />
                <fieldtype name='long' class='solr.TrieLongField' />

                <fieldType name="key_lower_case" class="solr.TextField"
                        sortMissingLast="true" omitNorms="true">
                         <analyzer>
                                <tokenizer class="solr.KeywordTokenizerFactory"/>
                                <filter class="solr.LowerCaseFilterFactory" />
                         </analyzer>
                 </fieldType>
        </types>

        <fields>
                <field name='id' type='long' required='true' />
                <field name="_version_" type="long" indexed="true" stored="true"/>
                <field name='user_id' type='string'/>
                <field name='jsons' type='string' multiValued='true' />
                <field name="row_type" type='string'/>
                <field name='name' type='key_lower_case' indexed="true" stored="true" required='true'/>
                <field name='composite_row-type_name' type='string'/>
                <dynamicField name='*_string' type='string' multiValued='true' indexed='true' stored='true'/>
        </fields>
        <uniqueKey>composite_row-type_name</uniqueKey>
        <solrQueryParser defaultOperator='OR' />
</schema>


欢迎您提出建议和意见。 在此先感谢。

1 个答案:

答案 0 :(得分:1)

您可以在schema.xml中修改字段类型。使用以下&#34; key_lower_case&#34;您要在其中执行搜索的字段的fieldType。

完成schema.xml更改后,您需要重新启动服务器并重新索引数据。

<fieldType name="key_lower_case" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <tokenizer class="solr.NGramTokenizerFactory" minGramSize="2" maxGramSize="10"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
    </analyzer>
</fieldType>

您已添加了字段。

<field name='name' type='key_lower_case' indexed="true" stored="true" required='true'/>

NGramTokenizerFactory 的帮助下,您可以实现以下令牌

输入文字:"abhijit"

令牌生成为:

ab, abh, abhi, abhiji, abhijit, bh, bhi, bhij... etc