es搜索模型例子

ES文本搜索有两个概念
文本召回率
文本准确率
对于用户的搜索我们要尽量保证高的召回率,然后再保证准确率以防止一些结果查询遗漏,但是准确率低的可以通过es的搜索模型打分让其靠后。


#使用function score解决排序模型 GET /shop/_search { "_source": "*", #显示出所有字段 "script_fields": { #查询出对应坐标的距离 "distance":{ "script":{ "source":"haversin(lat,lon,doc['location'].lat,doc['location'].lon)", "lang":"expression", "params":{"lat":31.23916171,"lon":121.48789949} } } }, "query": { "function_score": { "query": { "bool": { "must": [ {"match": {"name": {"query": "凯悦","boost": 0.1}}}, #boost 0.1也就是这部分的被降权到0.1,也就是文本搜索召回结果,不会特别影响打分 {"term": {"seller_disabled_flag": 0}} ]}}, "functions": [ #利用高斯方法控制相关性,涉及打分 { "gauss": { "location": { "origin": "31.23916171,121.48789949", "scale": "100km", #100KM为距离的函数拐点,一旦超过这个点打分就会加速下降 "offset": "0km", #最高点的左右距离为0,也就是只有最高点才为1分 "decay": 0.5 #拐点处为0.5分 } }, "weight": 9 #距离占据总分数的权重为9 }, { "field_value_factor": { "field": "remark_score" }, "weight": 0.2 #评论字段的打分权重为0.2 }, { "field_value_factor": { "field": "seller_remark_score" }, "weight": 0.1 #商店备注字段打分的权重为0.1 } ], "score_mode": "sum", #距离,评论字段,商店备注的打分之间的关系为相加(也可以改为相乘,但是放大的会比较大,在相关性计算放的太大不是很好,因为还需要和别的字段打分进行计算,太大会加重这部分权重) "boost_mode": "replace" #标题,也就是查询部分的权重,replace也就是不计算入内,这部分对查询结果的打分不影响,只做索引查询 } } , "sort": [ #结果的排序方式 { "_score": { "order": "desc" } } ] }
这是高斯函数图,有对应参数的控制属性可以作为参考理解

  

原文地址:https://www.cnblogs.com/yaohaitao/p/12593961.html