【发布时间】:2019-01-18 14:42:04
【问题描述】:
我很困惑,因为当我不再存储特定字段时,Solr 计算的分数会发生变化。
在我的 schema.xml 中,我通过以下方式使用动态字段(Solr 版本为 7.5):
<dynamicField name="*_fct_c" type="text_default" omitNorms="false"/>
类型“text_default”定义为:
<fieldType name="text_default" class="solr.TextField" positionIncrementGap="100" indexed="true" stored="true" multiValued="false" omitNorms="true">
<analyzer type="index">
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[\p{Punct}&&[^\-_]]" replacement=" "/>
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.WordDelimiterGraphFilterFactory"
generateWordParts="1" generateNumberParts="1" catenateWords="0"
catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"
splitOnNumerics="0" preserveOriginal="1" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<analyzer type="query">
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[\p{Punct}&&[^\-_\?\*]]" replacement=" "/>
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.WordDelimiterGraphFilterFactory"
generateWordParts="1" generateNumberParts="1" catenateWords="0"
catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"
splitOnNumerics="0" preserveOriginal="1" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
我将字段定义更改为:
<dynamicField name="*_fct_c" type="text_default" omitNorms="false" stored="false" />
更改后,我在更改字段中包含搜索词的所有文档都获得了不同的分数。
该字段未包含在返回的 Solr 文档中,这是我所期望的(和预期的)。
但我不明白更改后的分数,因为该字段仍然被索引(就像以前一样),我没想到该字段是否存储会影响分数。官方文档似乎也没有这样的暗示。
我错过了什么吗?
【问题讨论】:
-
您是否两次都删除了索引并从干净的索引开始?否则,如果您只是重新索引,则索引中已删除文档的数量将在两者之间有所不同(并且它们仍然会影响分数,直到它们被删除(即索引已优化或发生索引合并)。
-
两次索引都是从头开始构建的,所以删除文档的数量为零。
-
我将尝试找到一个可以在不使用我的应用程序的情况下重现的最小示例。
标签: solr