分类
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如何运算