目录
1. 概述
2. 场景说明
3. 高级搜索(DSL搜索)(下篇)
4. 综述
之前聊了Elasticsearch(ES)的高级搜索(DSL搜索)的一部分内容,今天把剩下的部分聊完。
2.1 创建索引同时创建映射
PUT 192.168.1.11:9200/index_user
参数:
{"settings":{"index":{"number_of_shards":5,"number_of_replicas":0}},"mappings" : {"properties":{"user_id":{"type":"long"},"name":{"type":"text","analyzer":"ik_max_word"},"login_name":{"type":"keyword"},"age":{"type":"integer"},"birthday":{"type":"date"},"desc":{"type":"text","analyzer":"ik_max_word"},"head_url":{"type":"text","index":false}}}
}
2.2 创建文档
此处只举几个例子
POST 192.168.1.11:9200/index_user/_doc/1
参数:
{"user_id":"1","name":"僵尸猎手","login_name":"jsls","age":25,"birthday":"1990-03-01","desc":"我是一名房产经纪人,现在转行了,目前是一名运输工人","head_url":".jpg"
}
POST 192.168.1.11:9200/index_user/_doc/2
参数:
{"user_id":"2","name":"夏维尔","login_name":"xwe","age":28,"birthday":"1992-06-06","desc":"我是一名高级开发经理,每天坐地铁上班,在北京住,从不堵车","head_url":".jpg"
}
POST 192.168.1.11:9200/index_user/_doc/3
参数:
{"user_id":"3","name":"迪士尼在逃仙柔","login_name":"dsnzxr","age":10,"birthday":"2011-06-22","desc":"我是一名五年级的小学生,每天专车接专车送,中午在学校入伙,食堂菜可好了,上学期期末考试我拿了三好学生奖","head_url":".jpg"
}
……………………
3.1 布尔查询
参数中可以包含多种条件的组合。
其中 must 块下的条件,文档必须都符合才会被查出来。
must_not 块下的条件,文档必须都不符合才会被查出来。
should 块下的条件,文档只要符合一个就能被查出来。
最终结果集是 must、must_not、should 块查询结果的交集。
POST 192.168.1.11:9200/index_user/_doc/_search
参数:
{"query": {"bool": {"must": [{"match": {"desc": "一名"}},{"match": {"desc": "小学生"}}],"must_not": [],"should": [{"match": {"desc": "一名"}},{"match": {"desc": "小学生"}}]}}
}
3.2 布尔查询,为某个查询加权
命中加权查询项的文档,分数会提高
POST 192.168.1.11:9200/index_user/_doc/_search
参数:
{"query": {"bool": {"should": [{"match": {"desc": {"query": "一名","boost":10}}},{"match": {"desc": "小学生"}}]}}
}
3.3 结果集过滤
从ES查询后,再将结果集过滤一次。
支持范围查询:
gte:大于等于
lte:小于等于
gt:大于
lt:小于
也支持 term、match 操作。
POST 192.168.1.11:9200/index_user/_doc/_search
参数:
{"query":{"match":{"desc":"一名"}},"post_filter": {"range" : {"age": {"gt":10,"lt":26}}}
}
3.4 自定义排序
文本类型的字段,只能对keyword类型的文本字段排序,text类型的不能用于排序。
文本类型字段定义时,可以既是text类型,又是keyword类型,排序时使用 字段.keyword 进行排序。
POST 192.168.1.11:9200/index_user/_doc/_search
参数:
{"query":{"match":{"desc":"一名"}},"sort":[{"age":"desc"},{"user_id":"asc"},{"login_name":"asc"}]
}
3.5 高亮
高亮效果就是在匹配的关键字上增加标签,便于前端去高亮显示。
POST 192.168.1.11:9200/index_user/_doc/_search
参数:
{"query":{"match":{"desc":"一名小学生"}},"highlight":{"pre_tags":"<span>","post_tags":"</span>","fields":{"desc":{}}}
}
3.6 子属性查询
属性中包含对象属性或集合属性,对对象或集合的子属性进行查询,使用 主属性.子属性的方式查询
例如:
{
"term":{
"list.id":""
}
}
3.7 分页、显示总条数例子
"from": 0,
"size": 10,
"track_total_hits": true // 精确显示总条数
今天简单聊了一下 Elasticsearch(ES)的高级搜索(DSL搜索)剩下的部分,希望可以对大家的工作有所帮助。
欢迎帮忙点赞、评论、加关注 :)
关注追风人聊Java,每天更新Java干货。
本文发布于:2024-01-30 14:58:55,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170659793820831.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |