使用 solr suggestor 搜索中间或后缀字符串?
Search a middle or suffix string using solr suggestor?
我正在使用 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>
欢迎您提出建议和意见。
提前致谢。
您可以在 schema.xml 中修改字段类型。使用以下 "key_lower_case" 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
我正在使用 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>
欢迎您提出建议和意见。
提前致谢。
您可以在 schema.xml 中修改字段类型。使用以下 "key_lower_case" 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