Elasticsearch(ES)的高级搜索(DSL搜索)(下篇)

阅读: 评论:0

Elasticsearch(ES)的高级搜索(DSL搜索)(下篇)

Elasticsearch(ES)的高级搜索(DSL搜索)(下篇)

目录

1. 概述

2. 场景说明

3. 高级搜索(DSL搜索)(下篇)

4. 综述


1. 概述

之前聊了Elasticsearch(ES)的高级搜索(DSL搜索)的一部分内容,今天把剩下的部分聊完。

2. 场景说明

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. 高级搜索(DSL搜索)(下篇)

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   // 精确显示总条数

4. 综述

今天简单聊了一下 Elasticsearch(ES)的高级搜索(DSL搜索)剩下的部分,希望可以对大家的工作有所帮助。

欢迎帮忙点赞、评论、加关注 :)

关注追风人聊Java,每天更新Java干货。

本文发布于:2024-01-30 14:58:55,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170659793820831.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:下篇   高级搜索   Elasticsearch   ES   DSL
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23