shard中只有一部分的document,默认情况下,IDF是在shard本地计算的。
在一个shard中,有多个title中包含Java的document,比如10个。当一个搜索title中包含Java当请求到这个shard到时候,会使用TD/IDF算法:
1. 在一个document到title中,Java出现到次数。
2. 在所有document的title中,Java出现的次数---10次。
3. 这个document的title的长度。
在另外一个shard中,只有1个document title中包含Java,此时计算shard local IDF分数就会很高,相关度很高。
也许相关度很高的doc排在六后面,分数不高,而相关度很低的doc排在六前面,分数很高。
解决方案:
数据量很大的话,其实一般情况下,在概率学的背景下,es都是在多个shard中均匀路由数据的,路由的时候根据_id,负载均衡
比如说有10个document,title都包含java,一共有5个shard,那么在概率学的背景下,如果负载均衡的话,其实每个shard都应该有2个doc,title包含java
如果说数据分布均匀的话,其实就没有刚才说的那个问题了