1、请问Elasticsearch中match和term检索的区别?
match:全文检索 分词 用在text类型
1)先对搜索内容进行分词,得到词条
2)使用词条匹配倒排索引库,得到文档ID
3)使用文档ID,查询具体的文档记录进行聚合(并集或交集)
term:精确匹配 不分词 用keyword,boolean,日期,数值
1)使用搜索内容全文匹配倒排索引库,得到文档ID
2)使用文档ID,查询具体的文档记录进行聚合(并集或交集)
2、请问Elasticsearch中如何实现多条件检索?must和filter的区别是什么?
使用布尔查询进行多条件检索
must的条件会参与算法过程,影响结果的排序
filter的条件不参与算法过程,不影响结果的排序
3、请问Elasticsearch如何实现搜索附近的酒店? (假如简历上写了这个功能)
1)在hotel表中记录酒店的经度和维度值(后端干的)
2)前端把用户的坐标发送至后端(前端干的活)
3)后端根据用户坐标值,利用Elasticsearch的geo_distance做升序排序,里面参数大概是地理坐标,升降序规则(DESC/ASC),距离单位
“sort”: [
{
“_geo_distance”: {
“location”: “22.57,113.88”,
“order”: “asc”,
“unit”: “km”
}
}
]
4、请问在Elasticsearch如何提升指定搜索结果的权重?(请问如何实现类似百度搜索结果的竞价排名的?)
1)首先,Elasticsearch默认情况下使用BM25算法(5.1版本以前,使用TF-IDF算法)计算_score得到,按照得到倒序
TF-IDF算法:TF(词频)* IDF(逆文档频率)
TF:词条在文档中出现的频率
IDF:计算词条在所有文档中的权限(出现越多文档,权限越低,反之则越高)
BM25:是 TF-IDF算法是升级版,单个词条的算分有一个上限,不至于过高,让曲线更加平滑
2)如果希望改变指定结果的权限,使用 function_score 函数提升权限
function_score 大体三部分条件:
第一部分:原始查询条件
第二部分:过滤条件和权重分值,过滤条件就是哪部分文档需要提分
第三部分:加权模式,对权限分值进行sum,avg,相乘等规则。
