赞
踩
目录
之前聊了Elasticsearch(ES)的高级搜索(DSL搜索)的一部分内容,今天把剩下的部分聊完。
2.1 创建索引同时创建映射
PUT http://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 http://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":"https://www.zhuifengren.cn/img/jsls.jpg"
- }
POST http://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":"https://www.zhuifengren.cn/img/xwe.jpg"
- }
POST http://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":"https://www.zhuifengren.cn/img/dsnzxr.jpg"
- }
……………………
3.1 布尔查询
参数中可以包含多种条件的组合。
其中 must 块下的条件,文档必须都符合才会被查出来。
must_not 块下的条件,文档必须都不符合才会被查出来。
should 块下的条件,文档只要符合一个就能被查出来。
最终结果集是 must、must_not、should 块查询结果的交集。
POST http://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 http://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 http://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 http://192.168.1.11:9200/index_user/_doc/_search
参数:
- {
- "query":{
- "match":{
- "desc":"一名"
- }
- },
- "sort":[
- {
- "age":"desc"
- },
- {
- "user_id":"asc"
- },
- {
- "login_name":"asc"
- }
- ]
- }
3.5 高亮
高亮效果就是在匹配的关键字上增加标签,便于前端去高亮显示。
POST http://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干货。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。