最近两天在debug搜索引擎的一个bug,在关键词运营时,将某个商品以运营的方式索引进搜索引擎后,在搜索特定的某个关键词时,该商品的排名会提升到最前边,但是在系统重新启动后,发现运营的商品不能排到前列。重新索引进去再搜索就可以排在前列。
经过debug,发现在BM25算法计算得分时avgPropLength的值是一个e-5级别的值。原因是只有我试验的极个别文档含有运营的字段,从而导致avgPropLength的值及其小e-5。这样在计算此字段的BM25得分时非但没有沾光反而吃亏,最终导致商品不能排列到最前列。
但是,为什么索引进去之后,只要不重新启动就能排列到最前列呢?这还需要进一步的分析!
解决办法就是所有索引的document都必须包含次字段,且需要含有value。否则还会有这个问题!!!
----------------------------------------转载内容----------------------------------------------------------------------------------------------------
BM25 is a bag-of-words retrieval function that ranks a set of documents based on the query terms appearing in each document,