科技未来网站建设免费的电脑优化软件
分类
query查询分类
总体规律就是逻辑性的,从外层的你干嘛,到下一层的查询类型,再到下一层的查询字段(如果需要的话)和然后是查询内容
查询所有
语法
get /索引库名/_serarch
{"query":{"查询条件":{//如果是查询所有match_all,不需要条件,否则以下不能为空}}
}
查询所有案例
// 查询所有
GET /indexName/_search
{"query": {"match_all": {}}
}
全文检索查询
match查询
GET /indexName/_search
{"query": {"match": {"FIELD(字段)": "TEXT(查询内容)"}}
}
查询多个字段的multi_match
GET /indexName/_search
{"query": {"multi_match": {//查询多个"query": "TEXT","fields": ["FIELD1", " FIELD12"]}}
}
精确查询
查询keyword,数值,日期等类型字段(精确值),不会对搜索条件进行分词
term:词条
// term查询
GET /indexName/_search
{"query": {"term": {"FIELD": {"value(这是固定的)": "VALUE(这是你要搜的词条)"}}}
}
range:范围
gt是大于(不等于),gte是大于等于(lte同理)
// range查询
GET /indexName/_search
{"query": {"range": {"FIELD": {"gte": 10,"lte": 20}}}
}
地理查询
根据经纬度查询(地理上进行查询附近的酒店/出租车)
geo_bounding_box经纬度范围查询
// geo_bounding_box查询
GET /indexName/_search
{"query": {"geo_bounding_box": {"FIELD": {"top_left": {"lat": 31.1,"lon": 121.5},"bottom_right": {"lat": 30.9,"lon": 121.7}}}}
}
geo_distance查询到指定中心点的举例小于某个距离值的所有位置
// geo_distance 查询
GET /indexName/_search
{"query": {"geo_distance": {"distance": "15km","FIELD": "31.21,121.5"}}
}
复合查询
将简单的查询组合起来,实现复杂的搜索逻辑
fuction score:算分函数查询,打分机制
tf算法
TF(词条频率) = 词条出现次数/文档中词条总数
TF-IDF算法
IDF(逆文档频率) = Log(文档总数/包含词条的文档总数)
score = ∑_i^n▒TF(词条频率) ∗ IDF(逆文档频率)
BM25算法
Score(Q,d) = ∑_i^n▒log(1+ N −n+0.5/n+0.5)∙ f_i /f_i+ k_1 ∙ (1 −b+ b ∙ dl/avgdl)
复合查询案例
GET /hotel/_search
{"query": {"function_score": {"query": { "match": {"all": "外滩"} },//原始查询条件,搜索文档并根据相关性打分(query score"functions": [{"filter": {"term": {"id": "1"}},//过滤条件,符合条件的文档才会被重新算分"weight": 10/*算分函数,算分函数的结果称为function score ,将来会与query score运算,得到新算分,常见的算分函数有:weight:给一个常量值,作为函数结果(function score)field_value_factor:用文档中的某个字段值作为函数结果random_score:随机生成一个值,作为函数结果script_score:自定义计算公式,公式结果作为函数结果*/}],"boost_mode": "multiply"/*加权模式,定义function score与query score的运算方式,包括:multiply:两者相乘。默认就是这个replace:用function score 替换 query score其它:sum、avg、max、min*/}}
}
案例:给如家增加权重
GET /hotel/_search
{"query": {"function_score": {"query": {// 某查询条件 },"functions": [ // 算分函数{"filter": { // 满足的条件,品牌必须是如家"term": {"brand": "如家"}},"weight": 2 // 算分权重为2}],"boost_mode": "sum"}}
}
function score query定义的三要素是什么?
-
过滤条件:哪些文档要加分
-
算分函数:如何计算function score
-
加权方式:function score 与 query score如何运算