har*_*pax 3 lucene solr n-gram
我正在运行SOLR作为内部网的搜索引擎,只有超过40000个文档.我把它很简单,通过使用copyField指令复制title和keywords字段的content字段,只指数.
从现在开始我们使用这个配置:
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.SnowballPorterFilterFactory" language="German" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但有人抱怨说,必须手动设置通配符.所以我NGRamFilterFactory在分析器中添加了最后一行:
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.SnowballPorterFilterFactory" language="German" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="30" />
</analyzer>
Run Code Online (Sandbox Code Playgroud)
现在的问题是:使用旧的配置我曾经找到7个带有特定关键字的文档('Sony').现在,只有2.我完全刷新了索引并从头开始构建它.当我再次使用该行并重新索引文档时,它再次按预期工作.这引出了我的问题:
提前致谢!
只是猜测 -
您的内容字段中的大小(单词数量)是什么?
因为,现在您将NGramFilterFactory放入过滤器链中,minGramSize为3,将生成许多令牌并且所有令牌都处于新位置.
solrconfig.xml中的maxFieldLength设置限制了要编制索引的标记数.
默认值为10000(仍然很高)但可以在过滤器链中使用大内容和ngramfilter时超出.
<maxFieldLength>10000</maxFieldLength>
Run Code Online (Sandbox Code Playgroud)
尝试将此值增加到高数字,重新索引并检查是否找到匹配项.
| 归档时间: |
|
| 查看次数: |
3566 次 |
| 最近记录: |