我针对SOLR核心运行查询,并使用类似的过滤器限制结果fq: {!frange l=0.7 }query($q).我知道SOLR分数没有绝对意义,但是0.7(只是一个例子)是根据用户输入和一些启发式计算的,这非常有效.
问题如下:我在我的核心中更新了不少文档.更新的字段仅是元数据字段,与上述搜索无关.但由于更新内部是删除+插入,因此IDF和doc计数会发生变化.计算得分也是如此.突然,我的查询返回不同的结果.
正如Yonik 在这里向我解释的那样,这种行为是设计的.所以我的问题是:保持我的查询的得分和输出稳定的最简单和最简单的方法是什么?
每次提交后运行优化应解决问题,但我想知道是否有更简单,更便宜的东西.
你确实需要运行优化。当您优化索引 solr 时,会清除所有尚未指向的文档并使查询稳定。发生这种情况是因为在更新文档时构建此元数据信息的成本很高。因为这个 solr 只需在优化时执行此操作。有一个好方法可以查看您的索引是否或多或少稳定...当您访问 Solr API 时,您可以看到Num Docs和Max Doc信息。如果Max Doc大于,Num Docs则表明您有一些旧产品影响了您的相关性计算。优化索引使这两个数字再次相等。如果这些数字相等,您可以相信 IDF 计算正确。