我正在运行 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 个。我完全刷新了索引并从头开始构建它。当我再次取出该行并重新索引文档时,它再次按预期工作。这让我想到了我的问题:
- FilterFactory 对我来说是正确的还是应该是标记器工厂?如果分词器:它可以在过滤器之后运行吗?
- 我在 75 个文档中将文档添加为 xml,并在最后进行提交。是否应该有更多的提交?
- 还有一个我现在忘记了.. grr
提前致谢!