需求: 对业务某实体进行多条件匹配排序,属性有实体名称、实体浏览量…
db做法 like then order by viewCount
死板 名称相关性无法体现 搜出来的只是包含 有多包含?
TF-IDF = TF * IDF
TF:term frequency词频
某文本1000词 'JAVA'匹配到10个 词频为TF = 10 / 1000 = 0.01
IDF:inverse document frequency逆向文件频率
1000个文本 'JAVA'在10个文本中出现过 IDF = 10为底1000的对数 = 3
TF-IDF = 3 * 0.01 = 0.03
什么用?替换like then order by viewCount 为TF-IDF + 计算因子 * viewCount 动动脑筋 此时内容相关性不仅有了体现 而且你可以修改计算因子来随心所欲的控制最终排序结果所依赖不同排序指标的比重
计算因子怎么定 正常状态下一个词的TD-IDF一定是变化的,只要你的es存在修改,那么这个因子怎么定一个初始值,最简单的是抽取排序指标的极值、中位数获取TF-IDF,同时预估其余指标的极值来设定,尽可能的让每一个指标的参与排序的比重去符合自己的预期
其中指标如果属于爆发、平缓增量大的情况,可以利用ln函数来平衡 一般是这样做的