And*_*bbs 10 lucene solr sunspot
给定以下一组值,如何配置字段以返回部分字匹配但也匹配整个搜索项的值?
价值观:
Texas State University
Stanford University
St. Johns College
Run Code Online (Sandbox Code Playgroud)
搜索词: sta
期望的结果:
Texas State University
Stanford University
Run Code Online (Sandbox Code Playgroud)
搜索词: stan
期望的结果:
Stanford University
Run Code Online (Sandbox Code Playgroud)
搜索词: st un
期望的结果:
Texas State University
Stanford University
Run Code Online (Sandbox Code Playgroud)
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
</fieldType>
Run Code Online (Sandbox Code Playgroud)
我想我的问题在于EdgeNGramFilterFactory.如上所示,第二次搜索stan返回显示的所有三个值而不是仅显示Stanford.但是,如果没有EdgeNGramFilterFactory,部分词语根本不匹配.
Solr字段的正确配置是返回部分字匹配但是也匹配整个搜索字词的值?
And*_*bbs 12
我想我明白了.我绝对欢迎其他答案和其他更正.
解决方案似乎只是在使用EdgeNGramFilterFactorywhen索引时,而不是在查询时.当你想到它时,这是有道理的.索引时我想要n-gram,但只想在查询时匹配实际的搜索词.
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
Run Code Online (Sandbox Code Playgroud)