我正在运行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>
这工作得很好,但有人抱怨说,必须手动设置通配符。所以我添加了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>
现在的问题是:使用旧的配置我曾经找到7个带有特定关键字的文档('Sony')。现在,只有2.我完全刷新了索引并从头开始构建它。当我再次使用该行并重新索引文档时,它再次按预期工作。这引出了我的问题:
提前致谢!
答案 0 :(得分:5)
只是猜测 -
您的内容字段中的大小(字数)是什么? 因为,现在您将NGramFilterFactory放入过滤器链中,minGramSize为3,将生成许多令牌并且所有令牌都处于新位置。
solrconfig.xml中的maxFieldLength设置限制了要编制索引的令牌数量。
默认值为10000(仍然很高)但可以在过滤器链中使用大内容和ngramfilter时超出。
<maxFieldLength>10000</maxFieldLength>
尝试将此值增加到高数字,重新索引并检查是否找到匹配项。
答案 1 :(得分:2)
我强烈建议您使用Field Analysis Debugging工具。可以通过Solr Admin站点访问(单击[Config]旁边的[Analysis]链接)。这是一个非常强大的工具,您可以在其中查看文本值如何分解为单词,并在它们通过链中的每个过滤器后显示生成的标记。
使用此工具,您可以在查询“Sony”时获取一个未返回的文档,并将要编入索引的文本粘贴到索引字段中,将sony粘贴到查询字段中,以查看Solr如何应用您的过滤器然后查询该字段以查找匹配项。然后,您可以在没有NGramFilterFactory的情况下将架构更改回原始架构,并查看您的文档最初是如何分解和匹配的,以比较NGramFilterFactory如何影响索引和查询。
您较小的搜索结果可能基于您在NGramFilterFactory设置中指定的minGramSize和maxGramSize设置。请参阅Solr Wiki上的NGramFilterFactory文档,了解这些文档如何影响索引。