我正在運行SOLR作爲內部網的搜索引擎,其文檔超過40000個。通過使用copyField指令將title
和keywords
字段複製到content
字段並僅索引該字段,我保持它非常簡單。SOLR: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"/>
</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個文檔與某個關鍵字(「索尼」)。現在,只有2個。我徹底沖洗了索引並從頭開始構建它。當我再次將該線路重新排列並重新編制文檔時,它會再次按預期工作。這導致我的問題,我有:
- 是FilterFactory對我來說是正確的事情,或者它應該是令牌工廠?如果標記器:它可以在過濾器之後運行嗎?
- 我將文檔作爲xml添加到75個文檔的分檔中,並在最後進行提交。應該有更多的提交?
- 又是一個,我現在忘了.. GRR提前
謝謝!
一個很好的「瘋狂猜測」。增加限制完成了這項工作。你知道是否可以檢查索引中有多少令牌? – harpax
您可以檢查索引中的條款。不確定您是否可以檢查文檔和字段特定。嘗試盧克工具,它可能會幫助你。 – Jayendra