祝你今天愉快
我有两个产品列表,它们非常大,并且会不断增加,我希望对它们的标题进行比较。也就是说,我将第一个列表中的第一个产品与第二个列表中的所有产品进行比较,并以相同的方式进行,将相似的产品放在同一组中。
我用Laravel和Elastic编写了我的代码,我的工作方法如下。
我在Elastic中对第二个列表进行索引,并对第一个列表进行foreach,然后通过Elastic将它们与第二个列表进行比较。最后,我使用min_score,我发现那些高于某个分数的列表是可以接受的。
但是上述方法适用于具有固定数目的列表,并且如果第二列表(在Elastic中索引的列表)的数目增加,则分数值 例如,它找到了产品“a”,并给它打了10分。当第二个列表增加时,他找到了相同的产品“a”,但给它打了12分。
我看到了两种解决方案,一种是使用“function_score”,这看起来毫无用处,或者改变相似度算法,将其从“BM25”改为“布尔”。
是否有其他方法可以获得找到的产品的相似分数,无论我更改了多少个产品?
1条答案
按热度按时间balp4ylt1#
不,只要你依赖于Elasticsearch的基于tf/idf的评分,就不会(实际上是BM 25)。这个分数受您拥有的文档数量、索引的文本数量、单词频率和分布、系统中碎片和副本的数量可以预期,分数将从查询到查询而改变-特别是当索引中的文档改变时(增减)。